@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.
- package/dist/app.module.js +1 -1
- package/dist/app.module.js.map +1 -1
- package/dist/common/utils/cancellable-exec.utils.d.ts +5 -0
- package/dist/common/utils/cancellable-exec.utils.js +34 -0
- package/dist/common/utils/cancellable-exec.utils.js.map +1 -0
- package/dist/common/utils/remote-access-observation.utils.d.ts +11 -0
- package/dist/common/utils/remote-access-observation.utils.js +89 -0
- package/dist/common/utils/remote-access-observation.utils.js.map +1 -0
- package/dist/modules/remote-access/controllers/remote-access.controller.js +9 -5
- package/dist/modules/remote-access/controllers/remote-access.controller.js.map +1 -1
- package/dist/modules/remote-access/models/provider.model.d.ts +3 -0
- package/dist/modules/remote-access/models/provider.model.js +23 -0
- package/dist/modules/remote-access/models/provider.model.js.map +1 -1
- package/dist/modules/remote-access/models/status.model.d.ts +2 -0
- package/dist/modules/remote-access/models/status.model.js +18 -1
- package/dist/modules/remote-access/models/status.model.js.map +1 -1
- package/dist/modules/remote-access/models/urls.model.d.ts +2 -0
- package/dist/modules/remote-access/models/urls.model.js +17 -0
- package/dist/modules/remote-access/models/urls.model.js.map +1 -1
- package/dist/modules/remote-access/platforms/remote-access-provider.platform.d.ts +18 -1
- package/dist/modules/remote-access/remote-access.constants.d.ts +2 -1
- package/dist/modules/remote-access/remote-access.constants.js +2 -1
- package/dist/modules/remote-access/remote-access.constants.js.map +1 -1
- package/dist/modules/remote-access/services/remote-access-proxy-contribution.service.d.ts +1 -0
- package/dist/modules/remote-access/services/remote-access-proxy-contribution.service.js +4 -1
- package/dist/modules/remote-access/services/remote-access-proxy-contribution.service.js.map +1 -1
- package/dist/modules/remote-access/services/remote-access-status.service.d.ts +40 -8
- package/dist/modules/remote-access/services/remote-access-status.service.js +314 -65
- package/dist/modules/remote-access/services/remote-access-status.service.js.map +1 -1
- package/dist/modules/remote-access/services/remote-access-url.service.d.ts +2 -2
- package/dist/modules/remote-access/services/remote-access-url.service.js +4 -2
- package/dist/modules/remote-access/services/remote-access-url.service.js.map +1 -1
- package/dist/modules/websocket/gateway/websocket.gateway.js +1 -0
- package/dist/modules/websocket/gateway/websocket.gateway.js.map +1 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.d.ts +5 -3
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.js +20 -8
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.js.map +1 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.d.ts +3 -5
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.js +11 -10
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.js.map +1 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.d.ts +2 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.js +17 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.js.map +1 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.d.ts +20 -2
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.js +105 -48
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.js.map +1 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.d.ts +13 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.js +8 -2
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.js.map +1 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.d.ts +1 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.js +12 -24
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.js.map +1 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.d.ts +1 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.js +5 -2
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/controllers/setup.controller.d.ts +10 -5
- package/dist/plugins/remote-access-tailscale/controllers/setup.controller.js +105 -15
- package/dist/plugins/remote-access-tailscale/controllers/setup.controller.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/controllers/status.controller.d.ts +5 -4
- package/dist/plugins/remote-access-tailscale/controllers/status.controller.js +19 -9
- package/dist/plugins/remote-access-tailscale/controllers/status.controller.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/models/status.model.d.ts +16 -0
- package/dist/plugins/remote-access-tailscale/models/status.model.js +100 -1
- package/dist/plugins/remote-access-tailscale/models/status.model.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.constants.d.ts +2 -0
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.constants.js +3 -1
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.constants.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.exceptions.d.ts +17 -1
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.exceptions.js +33 -1
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.exceptions.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.openapi.d.ts +2 -2
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.openapi.js +1 -0
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.openapi.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.plugin.js +2 -0
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.plugin.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-cli.service.d.ts +8 -4
- package/dist/plugins/remote-access-tailscale/services/tailscale-cli.service.js +58 -14
- package/dist/plugins/remote-access-tailscale/services/tailscale-cli.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-login.service.d.ts +8 -3
- package/dist/plugins/remote-access-tailscale/services/tailscale-login.service.js +175 -151
- package/dist/plugins/remote-access-tailscale/services/tailscale-login.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-node-managed.service.d.ts +51 -7
- package/dist/plugins/remote-access-tailscale/services/tailscale-node-managed.service.js +481 -101
- package/dist/plugins/remote-access-tailscale/services/tailscale-node-managed.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-operation-coordinator.service.d.ts +33 -0
- package/dist/plugins/remote-access-tailscale/services/tailscale-operation-coordinator.service.js +167 -0
- package/dist/plugins/remote-access-tailscale/services/tailscale-operation-coordinator.service.js.map +1 -0
- package/dist/plugins/remote-access-tailscale/services/tailscale-provider.service.d.ts +13 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-provider.service.js +8 -2
- package/dist/plugins/remote-access-tailscale/services/tailscale-provider.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-serve.service.d.ts +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-serve.service.js +7 -6
- package/dist/plugins/remote-access-tailscale/services/tailscale-serve.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-setup.service.d.ts +1 -3
- package/dist/plugins/remote-access-tailscale/services/tailscale-setup.service.js +9 -11
- package/dist/plugins/remote-access-tailscale/services/tailscale-setup.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/utils/tailscale-control.utils.d.ts +5 -0
- package/dist/plugins/remote-access-tailscale/utils/tailscale-control.utils.js +36 -0
- package/dist/plugins/remote-access-tailscale/utils/tailscale-control.utils.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- 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
|
|
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,
|
|
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,
|
|
32
|
+
constructor(setupService, statusService, tunnelManagedService, configService, platformService) {
|
|
32
33
|
this.setupService = setupService;
|
|
33
|
-
this.
|
|
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 [
|
|
90
|
-
this.
|
|
91
|
-
this.
|
|
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
|
-
|
|
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":";;;;;;;;;;;;AAAA,2CAQwB;AACxB,6CAAwD;AAExD,mDAA+D;AAC/D,2EAAmE;AACnE,oFAAgF;AAChF,yFAG8D;AAC9D,iHAGyE;AACzE,iFAAiG;AACjG,2EAAkE;AAClE,4EAAkE;AAClE,gEAA6F;AAC7F,2DAGiC;AACjC,
|
|
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
|
|
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(
|
|
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(
|
|
29
|
-
this.
|
|
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 [
|
|
38
|
-
this.
|
|
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", [
|
|
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":";;;;;;;;;;;;AAAA,2CAAiD;AACjD,6CAAwD;AAExD,mDAA+D;AAC/D,2EAAmE;AACnE,0FAAsF;AACtF,yFAG8D;AAC9D,iHAAqG;AACrG,2EAAkE;AAClE,4EAAkE;AAClE,yDAMgC;AAChC,4GAGsD;
|
|
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,
|
|
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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"}
|
package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.d.ts
CHANGED
|
@@ -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(
|
|
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;
|
package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.js
CHANGED
|
@@ -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
|
|
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.
|
|
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
|
-
|
|
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
|
|
167
|
-
this.
|
|
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
|
|
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
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
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
|
-
|
|
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.
|
|
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', {
|