@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
@@ -1,16 +1,18 @@
1
1
  import { ConfigService } from '../../../modules/config/services/config.service';
2
+ import { PlatformService } from '../../../modules/platform/services/platform.service';
3
+ import { RemoteAccessStatusService } from '../../../modules/remote-access/services/remote-access-status.service';
2
4
  import { RemoteAccessCloudflareTunnelPluginInstallResponseModel } from '../models/install.model';
3
5
  import { RemoteAccessCloudflareTunnelPluginStatusResponseModel } from '../models/status.model';
4
6
  import { CloudflareTunnelManagedService } from '../services/cloudflare-tunnel-managed.service';
5
- import { CloudflareTunnelProviderService } from '../services/cloudflare-tunnel-provider.service';
6
7
  import { CloudflareTunnelSetupService } from '../services/cloudflare-tunnel-setup.service';
7
8
  export declare class SetupController {
8
9
  private readonly setupService;
9
- private readonly providerService;
10
+ private readonly statusService;
10
11
  private readonly tunnelManagedService;
11
12
  private readonly configService;
13
+ private readonly platformService;
12
14
  private readonly logger;
13
- constructor(setupService: CloudflareTunnelSetupService, providerService: CloudflareTunnelProviderService, tunnelManagedService: CloudflareTunnelManagedService, configService: ConfigService);
15
+ constructor(setupService: CloudflareTunnelSetupService, statusService: RemoteAccessStatusService, tunnelManagedService: CloudflareTunnelManagedService, configService: ConfigService, platformService: PlatformService);
14
16
  install(): Promise<RemoteAccessCloudflareTunnelPluginInstallResponseModel>;
15
17
  reset(): Promise<RemoteAccessCloudflareTunnelPluginStatusResponseModel>;
16
18
  private buildStatusResponse;
@@ -15,7 +15,9 @@ const swagger_1 = require("@nestjs/swagger");
15
15
  const logger_1 = require("../../../common/logger");
16
16
  const transform_utils_1 = require("../../../common/utils/transform.utils");
17
17
  const config_service_1 = require("../../../modules/config/services/config.service");
18
+ const platform_service_1 = require("../../../modules/platform/services/platform.service");
18
19
  const provider_model_1 = require("../../../modules/remote-access/models/provider.model");
20
+ const remote_access_status_service_1 = require("../../../modules/remote-access/services/remote-access-status.service");
19
21
  const api_documentation_decorator_1 = require("../../../modules/swagger/decorators/api-documentation.decorator");
20
22
  const system_exceptions_1 = require("../../../modules/system/system.exceptions");
21
23
  const roles_guard_1 = require("../../../modules/users/guards/roles.guard");
@@ -25,14 +27,14 @@ const install_model_1 = require("../models/install.model");
25
27
  const status_model_1 = require("../models/status.model");
26
28
  const remote_access_cloudflare_tunnel_constants_1 = require("../remote-access-cloudflare-tunnel.constants");
27
29
  const cloudflare_tunnel_managed_service_1 = require("../services/cloudflare-tunnel-managed.service");
28
- const cloudflare_tunnel_provider_service_1 = require("../services/cloudflare-tunnel-provider.service");
29
30
  const cloudflare_tunnel_setup_service_1 = require("../services/cloudflare-tunnel-setup.service");
30
31
  let SetupController = class SetupController {
31
- constructor(setupService, providerService, tunnelManagedService, configService) {
32
+ constructor(setupService, statusService, tunnelManagedService, configService, platformService) {
32
33
  this.setupService = setupService;
33
- this.providerService = providerService;
34
+ this.statusService = statusService;
34
35
  this.tunnelManagedService = tunnelManagedService;
35
36
  this.configService = configService;
37
+ this.platformService = platformService;
36
38
  this.logger = (0, logger_1.createExtensionLogger)(remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_NAME, 'SetupController');
37
39
  }
38
40
  async install() {
@@ -86,11 +88,16 @@ let SetupController = class SetupController {
86
88
  return this.buildStatusResponse();
87
89
  }
88
90
  async buildStatusResponse() {
89
- const [status, requirements] = await Promise.all([
90
- this.providerService.getStatus(),
91
- this.tunnelManagedService.refreshRequirements(),
91
+ const [observed, privilegedWorkerSupport] = await Promise.all([
92
+ this.statusService.getProviderSnapshot(remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_NAME, { fresh: true }),
93
+ this.platformService.getPrivilegedWorkerSupport(),
92
94
  ]);
95
+ const snapshot = this.statusService.getCachedProviderSnapshot(remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_NAME) ?? observed;
96
+ const { status, metadata } = snapshot;
97
+ const requirements = metadata?.requirements ?? [];
93
98
  const data = new status_model_1.RemoteAccessCloudflareTunnelPluginStatusModel();
99
+ data.epoch = status.epoch;
100
+ data.revision = status.revision;
94
101
  data.type = status.type;
95
102
  data.state = status.state;
96
103
  data.endpoints = (0, transform_utils_1.toInstance)(provider_model_1.RemoteAccessEndpointModel, status.endpoints);
@@ -101,6 +108,10 @@ let SetupController = class SetupController {
101
108
  data.updatedAt = status.updatedAt;
102
109
  data.requirements = (0, transform_utils_1.toInstance)(status_model_1.RemoteAccessCloudflareTunnelPluginRequirementModel, requirements);
103
110
  data.setup = null;
111
+ const privilegedSetup = new status_model_1.RemoteAccessCloudflareTunnelPluginPrivilegedSetupModel();
112
+ privilegedSetup.available = privilegedWorkerSupport.supported;
113
+ privilegedSetup.reason = privilegedWorkerSupport.reason;
114
+ data.privilegedSetup = privilegedSetup;
104
115
  const response = new status_model_1.RemoteAccessCloudflareTunnelPluginStatusResponseModel();
105
116
  response.data = data;
106
117
  return response;
@@ -140,8 +151,9 @@ exports.SetupController = SetupController = __decorate([
140
151
  (0, common_1.Controller)(),
141
152
  (0, roles_guard_1.Roles)(users_constants_1.UserRole.OWNER),
142
153
  __metadata("design:paramtypes", [cloudflare_tunnel_setup_service_1.CloudflareTunnelSetupService,
143
- cloudflare_tunnel_provider_service_1.CloudflareTunnelProviderService,
154
+ remote_access_status_service_1.RemoteAccessStatusService,
144
155
  cloudflare_tunnel_managed_service_1.CloudflareTunnelManagedService,
145
- config_service_1.ConfigService])
156
+ config_service_1.ConfigService,
157
+ platform_service_1.PlatformService])
146
158
  ], SetupController);
147
159
  //# sourceMappingURL=setup.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.controller.js","sourceRoot":"","sources":["../../../../src/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.controller.js","sourceRoot":"","sources":["../../../../src/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,13 @@
1
1
  import { PlatformService } from '../../../modules/platform/services/platform.service';
2
+ import { RemoteAccessStatusService } from '../../../modules/remote-access/services/remote-access-status.service';
2
3
  import { RemoteAccessCloudflareTunnelPluginStatusResponseModel } from '../models/status.model';
3
- import { CloudflareTunnelManagedService } from '../services/cloudflare-tunnel-managed.service';
4
- import { CloudflareTunnelProviderService } from '../services/cloudflare-tunnel-provider.service';
5
4
  import { CloudflareTunnelSetupService } from '../services/cloudflare-tunnel-setup.service';
6
5
  export declare class StatusController {
7
- private readonly providerService;
8
- private readonly tunnelManagedService;
6
+ private readonly statusService;
9
7
  private readonly setupService;
10
8
  private readonly platformService;
11
9
  private readonly logger;
12
- constructor(providerService: CloudflareTunnelProviderService, tunnelManagedService: CloudflareTunnelManagedService, setupService: CloudflareTunnelSetupService, platformService: PlatformService);
10
+ constructor(statusService: RemoteAccessStatusService, setupService: CloudflareTunnelSetupService, platformService: PlatformService);
13
11
  getStatus(): Promise<RemoteAccessCloudflareTunnelPluginStatusResponseModel>;
14
12
  private buildSetupJobModel;
15
13
  }
@@ -16,30 +16,32 @@ const logger_1 = require("../../../common/logger");
16
16
  const transform_utils_1 = require("../../../common/utils/transform.utils");
17
17
  const platform_service_1 = require("../../../modules/platform/services/platform.service");
18
18
  const provider_model_1 = require("../../../modules/remote-access/models/provider.model");
19
+ const remote_access_status_service_1 = require("../../../modules/remote-access/services/remote-access-status.service");
19
20
  const api_documentation_decorator_1 = require("../../../modules/swagger/decorators/api-documentation.decorator");
20
21
  const roles_guard_1 = require("../../../modules/users/guards/roles.guard");
21
22
  const users_constants_1 = require("../../../modules/users/users.constants");
22
23
  const status_model_1 = require("../models/status.model");
23
24
  const remote_access_cloudflare_tunnel_constants_1 = require("../remote-access-cloudflare-tunnel.constants");
24
- const cloudflare_tunnel_managed_service_1 = require("../services/cloudflare-tunnel-managed.service");
25
- const cloudflare_tunnel_provider_service_1 = require("../services/cloudflare-tunnel-provider.service");
26
25
  const cloudflare_tunnel_setup_service_1 = require("../services/cloudflare-tunnel-setup.service");
27
26
  let StatusController = class StatusController {
28
- constructor(providerService, tunnelManagedService, setupService, platformService) {
29
- this.providerService = providerService;
30
- this.tunnelManagedService = tunnelManagedService;
27
+ constructor(statusService, setupService, platformService) {
28
+ this.statusService = statusService;
31
29
  this.setupService = setupService;
32
30
  this.platformService = platformService;
33
31
  this.logger = (0, logger_1.createExtensionLogger)(remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_NAME, 'StatusController');
34
32
  }
35
33
  async getStatus() {
36
34
  this.logger.debug('Fetching Cloudflare Tunnel status');
37
- const [status, requirements, privilegedWorkerSupport] = await Promise.all([
38
- this.providerService.getStatus(),
39
- this.tunnelManagedService.refreshRequirements(),
35
+ const [observed, privilegedWorkerSupport] = await Promise.all([
36
+ this.statusService.getProviderSnapshot(remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_NAME, { fresh: true }),
40
37
  this.platformService.getPrivilegedWorkerSupport(),
41
38
  ]);
39
+ const snapshot = this.statusService.getCachedProviderSnapshot(remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_NAME) ?? observed;
40
+ const { status, metadata } = snapshot;
41
+ const requirements = metadata?.requirements ?? [];
42
42
  const data = new status_model_1.RemoteAccessCloudflareTunnelPluginStatusModel();
43
+ data.epoch = status.epoch;
44
+ data.revision = status.revision;
43
45
  data.type = status.type;
44
46
  data.state = status.state;
45
47
  data.endpoints = (0, transform_utils_1.toInstance)(provider_model_1.RemoteAccessEndpointModel, status.endpoints);
@@ -90,8 +92,7 @@ exports.StatusController = StatusController = __decorate([
90
92
  (0, swagger_1.ApiTags)(remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_API_TAG_NAME),
91
93
  (0, common_1.Controller)(),
92
94
  (0, roles_guard_1.Roles)(users_constants_1.UserRole.ADMIN, users_constants_1.UserRole.OWNER),
93
- __metadata("design:paramtypes", [cloudflare_tunnel_provider_service_1.CloudflareTunnelProviderService,
94
- cloudflare_tunnel_managed_service_1.CloudflareTunnelManagedService,
95
+ __metadata("design:paramtypes", [remote_access_status_service_1.RemoteAccessStatusService,
95
96
  cloudflare_tunnel_setup_service_1.CloudflareTunnelSetupService,
96
97
  platform_service_1.PlatformService])
97
98
  ], StatusController);
@@ -1 +1 @@
1
- {"version":3,"file":"status.controller.js","sourceRoot":"","sources":["../../../../src/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.controller.js","sourceRoot":"","sources":["../../../../src/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,8 @@ export declare class RemoteAccessCloudflareTunnelPluginPrivilegedSetupModel {
25
25
  reason: string | null;
26
26
  }
27
27
  export declare class RemoteAccessCloudflareTunnelPluginStatusModel {
28
+ epoch: string;
29
+ revision: number;
28
30
  type: string;
29
31
  state: RemoteAccessProviderState;
30
32
  endpoints: RemoteAccessEndpointModel[];
@@ -206,6 +206,23 @@ exports.RemoteAccessCloudflareTunnelPluginPrivilegedSetupModel = RemoteAccessClo
206
206
  let RemoteAccessCloudflareTunnelPluginStatusModel = class RemoteAccessCloudflareTunnelPluginStatusModel {
207
207
  };
208
208
  exports.RemoteAccessCloudflareTunnelPluginStatusModel = RemoteAccessCloudflareTunnelPluginStatusModel;
209
+ __decorate([
210
+ (0, swagger_1.ApiProperty)({ description: 'Process epoch; changes after backend restart', type: 'string' }),
211
+ (0, class_transformer_1.Expose)(),
212
+ (0, class_validator_1.IsString)(),
213
+ __metadata("design:type", String)
214
+ ], RemoteAccessCloudflareTunnelPluginStatusModel.prototype, "epoch", void 0);
215
+ __decorate([
216
+ (0, swagger_1.ApiProperty)({
217
+ description: 'Monotonic accepted publication revision within this epoch',
218
+ type: 'integer',
219
+ minimum: 0,
220
+ }),
221
+ (0, class_transformer_1.Expose)(),
222
+ (0, class_validator_1.IsInt)(),
223
+ (0, class_validator_1.Min)(0),
224
+ __metadata("design:type", Number)
225
+ ], RemoteAccessCloudflareTunnelPluginStatusModel.prototype, "revision", void 0);
209
226
  __decorate([
210
227
  (0, swagger_1.ApiProperty)({
211
228
  description: 'Provider plugin type identifier',
@@ -1 +1 @@
1
- {"version":3,"file":"status.model.js","sourceRoot":"","sources":["../../../../src/plugins/remote-access-cloudflare-tunnel/models/status.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yDAAiD;AACjD,qDAAmG;AAEnG,6CAA6F;AAE7F,uFAA0F;AAC1F,yFAG8D;AAG9D,4GAA2G;AAG3G,MAAM,6BAA6B,GAAgC;IAClE,aAAa;IACb,eAAe;IACf,gBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,WAAW;IACX,cAAc;IACd,OAAO;CACP,CAAC;AAEF,MAAM,mCAAmC,GAAsC;IAC9E,oBAAoB;IACpB,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;CAClB,CAAC;AAEF,MAAM,kCAAkC,GAAmC,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAQjH,IAAM,wDAAwD,GAA9D,MAAM,wDAAwD;CAsBpE,CAAA;AAtBY,4HAAwD;AAUpE;IATC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,6EAA6E;QAC1F,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,OAAO,EAAE,CAAC,qCAAqC,CAAC;KAChD,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,yBAAO,GAAE;IACT,IAAA,0BAAQ,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;0FACN;AAWnB;IATC,IAAA,6BAAmB,EAAC;QACpB,WAAW,EAAE,yFAAyF;QACtG,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;KACb,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;sFACS;mEArBR,wDAAwD;IADpE,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,yDAAyD,EAAE,CAAC;GAClE,wDAAwD,CAsBpE;AAQM,IAAM,kDAAkD,GAAxD,MAAM,kDAAkD;CAsC9D,CAAA;AAtCY,gHAAkD;AAQ9D;IAPC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,mCAAmC;QACzC,OAAO,EAAE,kBAAkB;KAC3B,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,wBAAM,EAAC,mCAAmC,CAAC;;gFACN;AAStC;IAPC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,iDAAiD;QAC9D,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;KACb,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,2BAAS,GAAE;;qFACO;AASnB;IAPC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,4BAA4B;QACzC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,oCAAoC;KAC7C,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,0BAAQ,GAAE;;mFACK;AAWhB;IATC,IAAA,6BAAmB,EAAC;QACpB,WAAW,EAAE,iFAAiF;QAC9F,IAAI,EAAE,GAAG,EAAE,CAAC,wDAAwD;QACpE,QAAQ,EAAE,IAAI;KACd,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,wDAAwD,CAAC;8BAC7D,wDAAwD;kFAAQ;6DArC5D,kDAAkD;IAD9D,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,mDAAmD,EAAE,CAAC;GAC5D,kDAAkD,CAsC9D;AAQM,IAAM,+CAA+C,GAArD,MAAM,+CAA+C;CAoD3D,CAAA;AApDY,0GAA+C;AAS3D;IARC,IAAA,qBAAW,EAAC;QACZ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6DAA6D;QAC1E,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,sCAAsC;KAC/C,CAAC;IACD,IAAA,0BAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC1B,IAAA,0BAAQ,GAAE;;8EACG;AASd;IAPC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,kCAAkC;QACxC,OAAO,EAAE,SAAS;KAClB,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,wBAAM,EAAC,kCAAkC,CAAC;;8EACP;AAWpC;IATC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,oFAAoF;QACjG,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,SAAS;KAClB,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;6EACS;AAWpB;IATC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,oFAAoF;QACjG,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;KACb,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;gFACY;AAWvB;IATC,IAAA,qBAAW,EAAC;QACZ,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,yDAAyD;QACtE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,sBAAsB;KAC/B,CAAC;IACD,IAAA,0BAAM,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAC9B,IAAA,0BAAQ,GAAE;;kFACO;0DAnDN,+CAA+C;IAD3D,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,gDAAgD,EAAE,CAAC;GACzD,+CAA+C,CAoD3D;AAQM,IAAM,sDAAsD,GAA5D,MAAM,sDAAsD;CAoBlE,CAAA;AApBY,wHAAsD;AAQlE;IAPC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,uEAAuE;QACpF,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;KACb,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,2BAAS,GAAE;;yFACO;AAWnB;IATC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,gEAAgE;QAC7E,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;KACb,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;sFACW;iEAnBV,sDAAsD;IADlE,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,uDAAuD,EAAE,CAAC;GAChE,sDAAsD,CAoBlE;AAOM,IAAM,6CAA6C,GAAnD,MAAM,6CAA6C;CAmHzD,CAAA;AAnHY,sGAA6C;AAQzD;IAPC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,iCAAiC;QAC9C,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,uFAA2C;KACpD,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,0BAAQ,GAAE;;2EACE;AASb;IAPC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,wBAAwB;QACrC,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,WAAW;KACpB,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,wBAAM,EAAC,6BAA6B,CAAC;;4EACL;AAWjC;IATC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,2CAA2C;QACxD,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,EAAE,IAAI,EAAE,IAAA,uBAAa,EAAC,0CAAyB,CAAC,EAAE;KACzD,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,yBAAO,GAAE;IACT,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,0CAAyB,CAAC;;gFACC;AAWvC;IATC,IAAA,6BAAmB,EAAC;QACpB,WAAW,EAAE,yDAAyD;QACtE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;KACb,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;8EACa;AASxB;IAPC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,oDAAoD;QACjE,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,IAAI;QAC1B,OAAO,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE;KAC5G,CAAC;IACD,IAAA,0BAAM,GAAE;;8EACiD;AAY1D;IAVC,IAAA,qBAAW,EAAC;QACZ,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,4DAA4D;QACzE,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,OAAO,EAAE,EAAE;KACX,CAAC;IACD,IAAA,0BAAM,EAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;IACnC,IAAA,yBAAO,GAAE;IACT,IAAA,0BAAQ,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;qFACA;AAWzB;IATC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,oCAAoC;QACjD,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,EAAE,IAAI,EAAE,IAAA,uBAAa,EAAC,0CAAyB,CAAC,EAAE;KACzD,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,yBAAO,GAAE;IACT,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,0CAAyB,CAAC;;iFACE;AAWxC;IATC,IAAA,qBAAW,EAAC;QACZ,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,qDAAqD;QAClE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,sBAAsB;KAC/B,CAAC;IACD,IAAA,0BAAM,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAC9B,IAAA,0BAAQ,GAAE;;gFACO;AAWlB;IATC,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,wEAAwE;QACrF,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,EAAE,IAAI,EAAE,IAAA,uBAAa,EAAC,kDAAkD,CAAC,EAAE;KAClF,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,yBAAO,GAAE;IACT,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,kDAAkD,CAAC;;mFACI;AAWnE;IATC,IAAA,6BAAmB,EAAC;QACpB,WAAW,EAAE,oFAAoF;QACjG,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,GAAG,EAAE,CAAC,+CAA+C;KAC3D,CAAC;IACD,IAAA,0BAAM,GAAE;IACR,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,+CAA+C,CAAC;8BACrD,+CAA+C;4EAAQ;AAU9D;IARC,IAAA,qBAAW,EAAC;QACZ,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,uEAAuE;QACpF,IAAI,EAAE,GAAG,EAAE,CAAC,sDAAsD;KAClE,CAAC;IACD,IAAA,0BAAM,EAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;IACpC,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,sDAAsD,CAAC;8BAClD,sDAAsD;sFAAC;wDAlH5D,6CAA6C;IADzD,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,8CAA8C,EAAE,CAAC;GACvD,6CAA6C,CAmHzD;AAMM,IAAM,qDAAqD,GAA3D,MAAM,qDAAsD,SAAQ,6CAAuE;CAOjJ,CAAA;AAPY,sHAAqD;AAMzD;IALP,IAAA,qBAAW,EAAC;QACZ,WAAW,EAAE,6CAA6C;QAC1D,IAAI,EAAE,GAAG,EAAE,CAAC,6CAA6C;KACzD,CAAC;IACD,IAAA,0BAAM,GAAE;8BACK,6CAA6C;mFAAC;gEANhD,qDAAqD;IADjE,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,6CAA6C,EAAE,CAAC;GACtD,qDAAqD,CAOjE"}
1
+ {"version":3,"file":"status.model.js","sourceRoot":"","sources":["../../../../src/plugins/remote-access-cloudflare-tunnel/models/status.model.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,9 @@ import { RemoteAccessCloudflareTunnelPluginConfigModel } from '../models/config.
9
9
  import { CloudflaredCliService } from './cloudflared-cli.service';
10
10
  import { CloudflaredMetricsService } from './cloudflared-metrics.service';
11
11
  import { CloudflaredProcessService } from './cloudflared-process.service';
12
+ export interface CloudflareTunnelObservationMetadata {
13
+ requirements: CloudflareTunnelRequirement[];
14
+ }
12
15
  export type CloudflareTunnelRequirementCode = 'platform-supported' | 'binary-installed' | 'version-supported' | 'token-configured';
13
16
  export interface CloudflareTunnelRequirementRemedy {
14
17
  commands: string[];
@@ -36,6 +39,9 @@ export declare class CloudflareTunnelManagedService extends BaseManagedExtension
36
39
  };
37
40
  readonly serviceId = "tunnel";
38
41
  readonly activationPolicy: "owner-enabled";
42
+ private generation;
43
+ private readonly observations;
44
+ private readonly requirementObservations;
39
45
  private pollTimer;
40
46
  private lastStatus;
41
47
  private lastError;
@@ -53,7 +59,7 @@ export declare class CloudflareTunnelManagedService extends BaseManagedExtension
53
59
  reason?: string;
54
60
  }>;
55
61
  getRequirements(): CloudflareTunnelRequirement[];
56
- refreshRequirements(): Promise<CloudflareTunnelRequirement[]>;
62
+ refreshRequirements(signal?: AbortSignal): Promise<CloudflareTunnelRequirement[]>;
57
63
  private requirementsSatisfied;
58
64
  private evaluateRequirementsLive;
59
65
  private unevaluatedRequirement;
@@ -67,7 +73,19 @@ export declare class CloudflareTunnelManagedService extends BaseManagedExtension
67
73
  private evaluateTokenConfigured;
68
74
  private firstBlockingRequirement;
69
75
  private stateForRequirementCode;
70
- computeStatus(): Promise<RemoteAccessProviderStatus>;
76
+ computeStatus(options?: {
77
+ signal?: AbortSignal;
78
+ fresh?: boolean;
79
+ }): Promise<RemoteAccessProviderStatus>;
80
+ awaitObservationIdle(): Promise<void>;
81
+ getStatusSnapshot(options?: {
82
+ signal?: AbortSignal;
83
+ fresh?: boolean;
84
+ }): Promise<{
85
+ status: RemoteAccessProviderStatus;
86
+ metadata: CloudflareTunnelObservationMetadata;
87
+ }>;
88
+ private collectStatus;
71
89
  private isPollable;
72
90
  private schedulePoll;
73
91
  private clearPoll;
@@ -11,13 +11,14 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.CloudflareTunnelManagedService = void 0;
13
13
  exports.compareCloudflaredVersions = compareCloudflaredVersions;
14
- const node_child_process_1 = require("node:child_process");
15
14
  const path_1 = require("path");
16
15
  const common_1 = require("@nestjs/common");
17
16
  const config_1 = require("@nestjs/config");
18
17
  const event_emitter_1 = require("@nestjs/event-emitter");
19
18
  const logger_1 = require("../../../common/logger");
19
+ const cancellable_exec_utils_1 = require("../../../common/utils/cancellable-exec.utils");
20
20
  const config_utils_1 = require("../../../common/utils/config.utils");
21
+ const remote_access_observation_utils_1 = require("../../../common/utils/remote-access-observation.utils");
21
22
  const config_service_1 = require("../../../modules/config/services/config.service");
22
23
  const base_managed_extension_service_1 = require("../../../modules/extensions/services/base-managed-extension.service");
23
24
  const platform_constants_1 = require("../../../modules/platform/platform.constants");
@@ -62,6 +63,9 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
62
63
  this.owner = { kind: 'plugin', type: remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_NAME };
63
64
  this.serviceId = 'tunnel';
64
65
  this.activationPolicy = 'owner-enabled';
66
+ this.generation = 0;
67
+ this.observations = new remote_access_observation_utils_1.RemoteAccessObservation();
68
+ this.requirementObservations = new remote_access_observation_utils_1.RemoteAccessObservation();
65
69
  this.pollTimer = null;
66
70
  this.lastStatus = null;
67
71
  this.lastError = null;
@@ -74,12 +78,18 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
74
78
  if (this.state === 'started') {
75
79
  return;
76
80
  }
81
+ const generation = ++this.generation;
82
+ this.observations.invalidate();
83
+ this.requirementObservations.invalidate();
77
84
  this.state = 'starting';
78
85
  this.pluginConfig = null;
79
86
  const config = this.getPluginConfig();
80
87
  this.logger.log('Starting Cloudflare Tunnel service');
81
88
  try {
82
89
  const requirements = await this.refreshRequirements();
90
+ if (generation !== this.generation) {
91
+ return;
92
+ }
83
93
  if (this.requirementsSatisfied(requirements)) {
84
94
  this.processService.start({
85
95
  token: config.tunnelToken ?? '',
@@ -99,6 +109,10 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
99
109
  });
100
110
  }
101
111
  async stop() {
112
+ this.generation++;
113
+ this.observations.invalidate();
114
+ this.requirementObservations.invalidate();
115
+ this.clearPoll();
102
116
  await this.withLock(async () => {
103
117
  if (this.state === 'stopped') {
104
118
  return;
@@ -122,11 +136,24 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
122
136
  });
123
137
  }
124
138
  async emitStatus() {
125
- const status = await this.computeStatus();
139
+ const generation = this.generation;
140
+ const snapshot = this.state === 'stopped' || this.state === 'stopping' || this.state === 'error'
141
+ ? {
142
+ status: this.buildStatus(this.state === 'error' ? 'error' : 'disconnected', this.lastError ?? 'The tunnel service is stopped.'),
143
+ metadata: { requirements: this.getRequirements() },
144
+ }
145
+ : await this.getStatusSnapshot();
146
+ if (generation !== this.generation) {
147
+ return;
148
+ }
149
+ const status = snapshot.status;
126
150
  this.lastStatus = status;
127
- this.eventEmitter.emit(remote_access_constants_1.EventType.PROVIDER_STATUS, status);
151
+ this.eventEmitter.emit(remote_access_constants_1.EventType.PROVIDER_OBSERVATION, snapshot);
128
152
  }
129
153
  async onConfigChanged() {
154
+ this.generation++;
155
+ this.observations.invalidate();
156
+ this.requirementObservations.invalidate();
130
157
  const previous = this.pluginConfig;
131
158
  this.pluginConfig = null;
132
159
  const next = this.getPluginConfig();
@@ -144,11 +171,7 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
144
171
  return { restartRequired: false };
145
172
  }
146
173
  async isHealthy() {
147
- if (!this.processService.isRunning()) {
148
- return false;
149
- }
150
- const ready = await this.metricsService.fetchReady(this.getMetricsAddress());
151
- return ready !== null;
174
+ return (await this.computeStatus()).state === 'connected';
152
175
  }
153
176
  async factoryReset() {
154
177
  try {
@@ -162,35 +185,40 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
162
185
  getRequirements() {
163
186
  return this.requirementsCache ?? [];
164
187
  }
165
- async refreshRequirements() {
166
- const requirements = await this.evaluateRequirementsLive();
167
- this.requirementsCache = requirements;
188
+ async refreshRequirements(signal) {
189
+ const generation = this.generation;
190
+ const requirements = await this.requirementObservations.run((readSignal) => this.evaluateRequirementsLive(readSignal), signal);
191
+ signal?.throwIfAborted();
192
+ if (generation === this.generation) {
193
+ this.requirementsCache = requirements;
194
+ }
168
195
  return requirements;
169
196
  }
170
197
  requirementsSatisfied(requirements) {
171
198
  return requirements.length > 0 && requirements.every((requirement) => requirement.satisfied);
172
199
  }
173
- async evaluateRequirementsLive() {
200
+ async evaluateRequirementsLive(signal) {
174
201
  const platform = await this.evaluatePlatformSupported();
202
+ signal?.throwIfAborted();
175
203
  if (!platform.satisfied) {
176
204
  return this.attachRemedies([
177
205
  platform,
178
206
  this.unevaluatedRequirement('binary-installed'),
179
207
  this.unevaluatedRequirement('version-supported'),
180
208
  this.unevaluatedRequirement('token-configured'),
181
- ]);
209
+ ], signal);
182
210
  }
183
- const { binary, version } = await this.evaluateBinaryAndVersion();
211
+ const { binary, version } = await this.evaluateBinaryAndVersion(signal);
184
212
  const token = this.evaluateTokenConfigured();
185
- return this.attachRemedies([platform, binary, version, token]);
213
+ return this.attachRemedies([platform, binary, version, token], signal);
186
214
  }
187
215
  unevaluatedRequirement(code) {
188
216
  return { code, satisfied: false, message: UNEVALUATED_MESSAGE };
189
217
  }
190
- async attachRemedies(requirements) {
218
+ async attachRemedies(requirements, signal) {
191
219
  let installRemedyPromise = null;
192
220
  const getInstallRemedy = () => {
193
- installRemedyPromise ??= this.buildInstallRemedy();
221
+ installRemedyPromise ??= this.buildInstallRemedy(signal);
194
222
  return installRemedyPromise;
195
223
  };
196
224
  return Promise.all(requirements.map((requirement) => this.finalizeRequirement(requirement, getInstallRemedy)));
@@ -213,9 +241,9 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
213
241
  return { commands: [], note: remote_access_cloudflare_tunnel_constants_1.CLOUDFLARE_TUNNEL_DOCUMENTATION_URL };
214
242
  }
215
243
  }
216
- async buildInstallRemedy() {
244
+ async buildInstallRemedy(signal) {
217
245
  try {
218
- const stdout = await this.runSetupScriptPrintPlan();
246
+ const stdout = await this.runSetupScriptPrintPlan(signal);
219
247
  const lines = stdout
220
248
  .split('\n')
221
249
  .map((line) => line.trim())
@@ -235,17 +263,9 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
235
263
  return { commands: [], note: remote_access_cloudflare_tunnel_constants_1.CLOUDFLARE_TUNNEL_VENDOR_DOWNLOAD_URL };
236
264
  }
237
265
  }
238
- runSetupScriptPrintPlan() {
266
+ async runSetupScriptPrintPlan(signal) {
239
267
  const script = (0, path_1.join)(__dirname, '..', 'scripts', 'cloudflared-setup.sh');
240
- return new Promise((resolve, reject) => {
241
- (0, node_child_process_1.execFile)('bash', [script, '--print-plan'], { timeout: remote_access_cloudflare_tunnel_constants_1.CLOUDFLARE_TUNNEL_PRINT_PLAN_TIMEOUT_MS }, (error, stdout) => {
242
- if (error) {
243
- reject(error);
244
- return;
245
- }
246
- resolve(stdout ?? '');
247
- });
248
- });
268
+ return (await (0, cancellable_exec_utils_1.cancellableExecFile)('bash', [script, '--print-plan'], signal, remote_access_cloudflare_tunnel_constants_1.CLOUDFLARE_TUNNEL_PRINT_PLAN_TIMEOUT_MS)).stdout;
249
269
  }
250
270
  async evaluatePlatformSupported() {
251
271
  const platformType = await this.platformService.getPlatformTypeAsync();
@@ -258,9 +278,10 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
258
278
  message: `Cloudflare Tunnel is not supported on the '${platformType}' platform.`,
259
279
  };
260
280
  }
261
- async evaluateBinaryAndVersion() {
281
+ async evaluateBinaryAndVersion(signal) {
262
282
  try {
263
- const info = await this.cliService.getVersion();
283
+ const info = await this.cliService.getVersion(signal);
284
+ signal?.throwIfAborted();
264
285
  this.lastKnownVersion = info.version;
265
286
  const supported = compareCloudflaredVersions(info.version, remote_access_cloudflare_tunnel_constants_1.CLOUDFLARED_MIN_VERSION) >= 0;
266
287
  return {
@@ -324,14 +345,45 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
324
345
  return 'not-installed';
325
346
  }
326
347
  }
327
- async computeStatus() {
348
+ async computeStatus(options) {
349
+ return (await this.getStatusSnapshot(options)).status;
350
+ }
351
+ async awaitObservationIdle() {
352
+ await Promise.all([this.observations.awaitIdle(), this.requirementObservations.awaitIdle()]);
353
+ }
354
+ async getStatusSnapshot(options) {
355
+ const generation = this.generation;
356
+ try {
357
+ const snapshot = await this.observations.run(async (signal) => {
358
+ const requirements = await this.refreshRequirements(signal);
359
+ const status = await this.collectStatus(requirements, signal);
360
+ signal.throwIfAborted();
361
+ return { status, metadata: { requirements } };
362
+ }, options?.signal);
363
+ if (generation === this.generation) {
364
+ return snapshot;
365
+ }
366
+ }
367
+ catch (error) {
368
+ if (generation === this.generation && this.isPollable()) {
369
+ return {
370
+ status: this.buildStatus('error', error instanceof Error ? error.message : 'The status observation failed.'),
371
+ metadata: { requirements: this.getRequirements() },
372
+ };
373
+ }
374
+ }
375
+ return {
376
+ status: this.buildStatus(this.state === 'error' ? 'error' : 'disconnected', this.lastError ?? 'The observation was superseded by a lifecycle action.'),
377
+ metadata: { requirements: this.getRequirements() },
378
+ };
379
+ }
380
+ async collectStatus(requirements, signal) {
328
381
  if (this.state === 'stopped' || this.state === 'stopping') {
329
382
  return this.buildStatus('disconnected', 'The tunnel service is stopped.');
330
383
  }
331
384
  if (this.state === 'error') {
332
385
  return this.buildStatus('error', this.lastError ?? 'The Cloudflare Tunnel service failed.');
333
386
  }
334
- const requirements = await this.refreshRequirements();
335
387
  const blocking = this.firstBlockingRequirement(requirements);
336
388
  if (blocking) {
337
389
  return this.buildStatus(this.stateForRequirementCode(blocking.code), blocking.message);
@@ -345,7 +397,7 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
345
397
  : 'cloudflared is not running.');
346
398
  return this.buildStatus('error', message);
347
399
  }
348
- const ready = await this.metricsService.fetchReady(this.getMetricsAddress());
400
+ const ready = await this.metricsService.fetchReady(this.getMetricsAddress(), signal);
349
401
  if (ready) {
350
402
  return this.buildStatus('connected', undefined, ready);
351
403
  }
@@ -377,32 +429,37 @@ let CloudflareTunnelManagedService = class CloudflareTunnelManagedService extend
377
429
  }
378
430
  }
379
431
  async pollTick() {
432
+ const generation = this.generation;
380
433
  try {
381
- if (this.state === 'started' && !this.processService.isRunning()) {
382
- const requirements = await this.refreshRequirements();
383
- if (this.requirementsSatisfied(requirements) && this.isPollable()) {
384
- const config = this.getPluginConfig();
385
- this.processService.start({
386
- token: config.tunnelToken ?? '',
387
- protocol: config.protocol,
388
- metricsAddress: this.getMetricsAddress(),
389
- });
390
- }
434
+ let snapshot = await this.getStatusSnapshot();
435
+ if (!this.isPollable() || generation !== this.generation) {
436
+ return;
437
+ }
438
+ if (this.state === 'started' &&
439
+ !this.processService.isRunning() &&
440
+ this.requirementsSatisfied(snapshot.metadata.requirements)) {
441
+ const config = this.getPluginConfig();
442
+ this.processService.start({
443
+ token: config.tunnelToken ?? '',
444
+ protocol: config.protocol,
445
+ metricsAddress: this.getMetricsAddress(),
446
+ });
447
+ snapshot = await this.getStatusSnapshot({ fresh: true });
391
448
  }
392
- const status = await this.computeStatus();
393
- if (!this.isPollable()) {
449
+ if (!this.isPollable() || generation !== this.generation) {
394
450
  return;
395
451
  }
452
+ const status = snapshot.status;
396
453
  if (this.hasStatusChanged(this.lastStatus, status)) {
397
454
  this.lastStatus = status;
398
- this.eventEmitter.emit(remote_access_constants_1.EventType.PROVIDER_STATUS, status);
455
+ this.eventEmitter.emit(remote_access_constants_1.EventType.PROVIDER_OBSERVATION, snapshot);
399
456
  }
400
457
  this.schedulePoll(status.state === 'connecting'
401
458
  ? remote_access_cloudflare_tunnel_constants_1.CLOUDFLARED_POLL_INTERVAL_TRANSITIONING_MS
402
459
  : remote_access_cloudflare_tunnel_constants_1.CLOUDFLARED_POLL_INTERVAL_STABLE_MS);
403
460
  }
404
461
  catch (error) {
405
- if (!this.isPollable()) {
462
+ if (!this.isPollable() || generation !== this.generation) {
406
463
  return;
407
464
  }
408
465
  this.logger.error('Cloudflare Tunnel status poll failed', {