@fastybird/smart-panel-backend 1.1.0-alpha.2 → 1.1.0-alpha.20
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 +8 -0
- package/dist/app.module.js.map +1 -1
- package/dist/common/filters/conflict-exception.filter.d.ts +6 -0
- package/dist/common/filters/conflict-exception.filter.js +59 -0
- package/dist/common/filters/conflict-exception.filter.js.map +1 -0
- package/dist/common/filters/global-error.filter.js +1 -4
- package/dist/common/filters/global-error.filter.js.map +1 -1
- package/dist/common/filters/global-filters.d.ts +3 -0
- package/dist/common/filters/global-filters.js +22 -0
- package/dist/common/filters/global-filters.js.map +1 -0
- package/dist/common/filters/unprocessable-entity-exception.filter.d.ts +1 -0
- package/dist/common/filters/unprocessable-entity-exception.filter.js +15 -3
- package/dist/common/filters/unprocessable-entity-exception.filter.js.map +1 -1
- package/dist/common/utils/transform.utils.js +3 -0
- package/dist/common/utils/transform.utils.js.map +1 -1
- package/dist/dataSource.js +1 -0
- package/dist/dataSource.js.map +1 -1
- package/dist/main.js +2 -7
- package/dist/main.js.map +1 -1
- package/dist/migrations/1000000000026-AddHardwareInputCategories.d.ts +7 -0
- package/dist/migrations/1000000000026-AddHardwareInputCategories.js +364 -0
- package/dist/migrations/1000000000026-AddHardwareInputCategories.js.map +1 -0
- package/dist/modules/devices/controllers/channels.controller.d.ts +5 -1
- package/dist/modules/devices/controllers/channels.controller.js +34 -2
- package/dist/modules/devices/controllers/channels.controller.js.map +1 -1
- package/dist/modules/devices/controllers/channels.properties.controller.js +21 -4
- package/dist/modules/devices/controllers/channels.properties.controller.js.map +1 -1
- package/dist/modules/devices/controllers/devices.channels.controller.d.ts +5 -1
- package/dist/modules/devices/controllers/devices.channels.controller.js +38 -2
- package/dist/modules/devices/controllers/devices.channels.controller.js.map +1 -1
- package/dist/modules/devices/controllers/devices.channels.properties.controller.js +21 -4
- package/dist/modules/devices/controllers/devices.channels.properties.controller.js.map +1 -1
- package/dist/modules/devices/devices.constants.d.ts +6 -0
- package/dist/modules/devices/devices.constants.js +6 -0
- package/dist/modules/devices/devices.constants.js.map +1 -1
- package/dist/modules/devices/devices.module.js +18 -0
- package/dist/modules/devices/devices.module.js.map +1 -1
- package/dist/modules/devices/devices.openapi.d.ts +3 -1
- package/dist/modules/devices/devices.openapi.js +7 -0
- package/dist/modules/devices/devices.openapi.js.map +1 -1
- package/dist/modules/devices/dto/channel-input-occurrence.dto.d.ts +10 -0
- package/dist/modules/devices/dto/channel-input-occurrence.dto.js +99 -0
- package/dist/modules/devices/dto/channel-input-occurrence.dto.js.map +1 -0
- package/dist/modules/devices/models/channel-input-capabilities.model.d.ts +20 -0
- package/dist/modules/devices/models/channel-input-capabilities.model.js +111 -0
- package/dist/modules/devices/models/channel-input-capabilities.model.js.map +1 -0
- package/dist/modules/devices/models/channel-input-occurrence.model.d.ts +22 -0
- package/dist/modules/devices/models/channel-input-occurrence.model.js +154 -0
- package/dist/modules/devices/models/channel-input-occurrence.model.js.map +1 -0
- package/dist/modules/devices/services/channel-input-deduplication.service.d.ts +17 -0
- package/dist/modules/devices/services/channel-input-deduplication.service.js +88 -0
- package/dist/modules/devices/services/channel-input-deduplication.service.js.map +1 -0
- package/dist/modules/devices/services/channel-input-occurrences.service.d.ts +21 -0
- package/dist/modules/devices/services/channel-input-occurrences.service.js +163 -0
- package/dist/modules/devices/services/channel-input-occurrences.service.js.map +1 -0
- package/dist/modules/devices/services/channels.properties.service.d.ts +27 -3
- package/dist/modules/devices/services/channels.properties.service.js +304 -28
- package/dist/modules/devices/services/channels.properties.service.js.map +1 -1
- package/dist/modules/devices/services/channels.service.js +42 -38
- package/dist/modules/devices/services/channels.service.js.map +1 -1
- package/dist/modules/devices/services/command-latency-trace-collector.service.d.ts +101 -0
- package/dist/modules/devices/services/command-latency-trace-collector.service.js +451 -0
- package/dist/modules/devices/services/command-latency-trace-collector.service.js.map +1 -0
- package/dist/modules/devices/services/device-structure-lock.service.d.ts +10 -2
- package/dist/modules/devices/services/device-structure-lock.service.js +86 -7
- package/dist/modules/devices/services/device-structure-lock.service.js.map +1 -1
- package/dist/modules/devices/services/devices.service.js +37 -33
- package/dist/modules/devices/services/devices.service.js.map +1 -1
- package/dist/modules/devices/services/module-reset.service.d.ts +3 -1
- package/dist/modules/devices/services/module-reset.service.js +21 -16
- package/dist/modules/devices/services/module-reset.service.js.map +1 -1
- package/dist/modules/devices/services/property-command-dispatch.service.d.ts +45 -0
- package/dist/modules/devices/services/property-command-dispatch.service.js +227 -0
- package/dist/modules/devices/services/property-command-dispatch.service.js.map +1 -0
- package/dist/modules/devices/services/property-command-window.service.d.ts +71 -0
- package/dist/modules/devices/services/property-command-window.service.js +204 -0
- package/dist/modules/devices/services/property-command-window.service.js.map +1 -0
- package/dist/modules/devices/services/property-command.service.d.ts +20 -3
- package/dist/modules/devices/services/property-command.service.js +56 -10
- package/dist/modules/devices/services/property-command.service.js.map +1 -1
- package/dist/modules/devices/services/property-state-coordinator.service.d.ts +4 -0
- package/dist/modules/devices/services/property-state-coordinator.service.js +35 -0
- package/dist/modules/devices/services/property-state-coordinator.service.js.map +1 -0
- package/dist/modules/devices/services/property-value.service.d.ts +1 -0
- package/dist/modules/devices/services/property-value.service.js +4 -0
- package/dist/modules/devices/services/property-value.service.js.map +1 -1
- package/dist/modules/devices/utils/schema.utils.js +1 -1
- package/dist/modules/devices/utils/schema.utils.js.map +1 -1
- package/dist/modules/platform/services/platform.service.d.ts +13 -4
- package/dist/modules/platform/services/platform.service.js +57 -35
- package/dist/modules/platform/services/platform.service.js.map +1 -1
- package/dist/modules/remote-access/dto/update-config.dto.js +5 -0
- package/dist/modules/remote-access/dto/update-config.dto.js.map +1 -1
- package/dist/modules/remote-access/validators/is-remote-access-url.validator.js +5 -2
- package/dist/modules/remote-access/validators/is-remote-access-url.validator.js.map +1 -1
- package/dist/modules/system/scripts/update-worker.sh +668 -59
- package/dist/modules/system/services/privileged-worker.service.d.ts +10 -0
- package/dist/modules/system/services/privileged-worker.service.js +137 -11
- package/dist/modules/system/services/privileged-worker.service.js.map +1 -1
- package/dist/modules/system/services/update-executor.service.d.ts +20 -2
- package/dist/modules/system/services/update-executor.service.js +256 -25
- package/dist/modules/system/services/update-executor.service.js.map +1 -1
- package/dist/modules/websocket/gateway/websocket.gateway.d.ts +4 -1
- package/dist/modules/websocket/gateway/websocket.gateway.js +28 -5
- package/dist/modules/websocket/gateway/websocket.gateway.js.map +1 -1
- package/dist/modules/websocket/services/command-acknowledgement-trace.service.d.ts +143 -0
- package/dist/modules/websocket/services/command-acknowledgement-trace.service.js +523 -0
- package/dist/modules/websocket/services/command-acknowledgement-trace.service.js.map +1 -0
- package/dist/modules/websocket/websocket.module.js +9 -1
- package/dist/modules/websocket/websocket.module.js.map +1 -1
- package/dist/plugins/devices-home-assistant/devices-home-assistant.openapi.d.ts +2 -2
- package/dist/plugins/devices-home-assistant/devices-home-assistant.plugin.d.ts +6 -1
- package/dist/plugins/devices-home-assistant/devices-home-assistant.plugin.js +16 -1
- package/dist/plugins/devices-home-assistant/devices-home-assistant.plugin.js.map +1 -1
- package/dist/plugins/devices-home-assistant/dto/mapping-preview.dto.d.ts +1 -0
- package/dist/plugins/devices-home-assistant/dto/mapping-preview.dto.js +11 -0
- package/dist/plugins/devices-home-assistant/dto/mapping-preview.dto.js.map +1 -1
- package/dist/plugins/devices-home-assistant/mappers/button.entity.mapper.service.d.ts +19 -0
- package/dist/plugins/devices-home-assistant/mappers/button.entity.mapper.service.js +51 -0
- package/dist/plugins/devices-home-assistant/mappers/button.entity.mapper.service.js.map +1 -0
- package/dist/plugins/devices-home-assistant/mappings/definitions/entity-mappings.yaml +56 -7
- package/dist/plugins/devices-home-assistant/models/mapping-preview.model.d.ts +1 -0
- package/dist/plugins/devices-home-assistant/models/mapping-preview.model.js +11 -0
- package/dist/plugins/devices-home-assistant/models/mapping-preview.model.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/device-adoption.service.js +17 -0
- package/dist/plugins/devices-home-assistant/services/device-adoption.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/home-assistant-raw-event.service.d.ts +27 -0
- package/dist/plugins/devices-home-assistant/services/home-assistant-raw-event.service.js +271 -0
- package/dist/plugins/devices-home-assistant/services/home-assistant-raw-event.service.js.map +1 -0
- package/dist/plugins/devices-home-assistant/services/home-assistant.ws.service.d.ts +2 -2
- package/dist/plugins/devices-home-assistant/services/home-assistant.ws.service.js +33 -14
- package/dist/plugins/devices-home-assistant/services/home-assistant.ws.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/mapping-preview.service.js +24 -4
- package/dist/plugins/devices-home-assistant/services/mapping-preview.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/state-changed.event.service.d.ts +4 -1
- package/dist/plugins/devices-home-assistant/services/state-changed.event.service.js +84 -5
- package/dist/plugins/devices-home-assistant/services/state-changed.event.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/wizard.service.js +1 -0
- package/dist/plugins/devices-home-assistant/services/wizard.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/utils/ha-event.utils.d.ts +2 -0
- package/dist/plugins/devices-home-assistant/utils/ha-event.utils.js +50 -0
- package/dist/plugins/devices-home-assistant/utils/ha-event.utils.js.map +1 -0
- package/dist/plugins/devices-homekit/listeners/homekit-event.listener.d.ts +2 -0
- package/dist/plugins/devices-homekit/listeners/homekit-event.listener.js +28 -1
- package/dist/plugins/devices-homekit/listeners/homekit-event.listener.js.map +1 -1
- package/dist/plugins/devices-homekit/mappers/base.mapper.js +27 -4
- package/dist/plugins/devices-homekit/mappers/base.mapper.js.map +1 -1
- package/dist/plugins/devices-homekit/mappers/button.mapper.d.ts +15 -0
- package/dist/plugins/devices-homekit/mappers/button.mapper.js +143 -0
- package/dist/plugins/devices-homekit/mappers/button.mapper.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/homekit-mapper.interface.d.ts +16 -0
- package/dist/plugins/devices-homekit/mappers/thermostat-coordinator.d.ts +7 -0
- package/dist/plugins/devices-homekit/mappers/thermostat-coordinator.js +84 -73
- package/dist/plugins/devices-homekit/mappers/thermostat-coordinator.js.map +1 -1
- package/dist/plugins/devices-homekit/services/homekit-mapper-registry.service.d.ts +5 -1
- package/dist/plugins/devices-homekit/services/homekit-mapper-registry.service.js +42 -0
- package/dist/plugins/devices-homekit/services/homekit-mapper-registry.service.js.map +1 -1
- package/dist/plugins/devices-homey/mappings/definitions/channels.yaml +50 -0
- package/dist/plugins/devices-homey/mappings/definitions/devices.yaml +18 -0
- package/dist/plugins/devices-homey/mappings/definitions/properties.yaml +55 -0
- package/dist/plugins/devices-homey/mappings/device-support.js +10 -0
- package/dist/plugins/devices-homey/mappings/device-support.js.map +1 -1
- package/dist/plugins/devices-homey/mappings/mapping-loader.service.d.ts +1 -0
- package/dist/plugins/devices-homey/mappings/mapping-loader.service.js +66 -8
- package/dist/plugins/devices-homey/mappings/mapping-loader.service.js.map +1 -1
- package/dist/plugins/devices-homey/models/inventory.model.d.ts +2 -1
- package/dist/plugins/devices-homey/models/inventory.model.js +1 -0
- package/dist/plugins/devices-homey/models/inventory.model.js.map +1 -1
- package/dist/plugins/devices-homey/models/mapping-preview.model.d.ts +1 -0
- package/dist/plugins/devices-homey/models/mapping-preview.model.js +1 -0
- package/dist/plugins/devices-homey/models/mapping-preview.model.js.map +1 -1
- package/dist/plugins/devices-homey/services/homey-mapping-preview.service.js +7 -0
- package/dist/plugins/devices-homey/services/homey-mapping-preview.service.js.map +1 -1
- package/dist/plugins/devices-homey/services/homey-synchronizer.service.d.ts +3 -1
- package/dist/plugins/devices-homey/services/homey-synchronizer.service.js +37 -6
- package/dist/plugins/devices-homey/services/homey-synchronizer.service.js.map +1 -1
- package/dist/plugins/devices-reterminal/services/reterminal-button.service.d.ts +7 -3
- package/dist/plugins/devices-reterminal/services/reterminal-button.service.js +63 -17
- package/dist/plugins/devices-reterminal/services/reterminal-button.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.d.ts +38 -3
- package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.js +840 -134
- package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/delegates/shelly-device.delegate.d.ts +15 -1
- package/dist/plugins/devices-shelly-ng/delegates/shelly-device.delegate.js +117 -10
- package/dist/plugins/devices-shelly-ng/delegates/shelly-device.delegate.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.constants.js +11 -13
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.constants.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.plugin.js +2 -0
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.plugin.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/mappings/definitions/inputs.yaml +80 -0
- package/dist/plugins/devices-shelly-ng/mappings/mapping-loader.service.js +11 -1
- package/dist/plugins/devices-shelly-ng/mappings/mapping-loader.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/mappings/mapping.types.d.ts +6 -3
- package/dist/plugins/devices-shelly-ng/mappings/schema/mapping-schema.json +5 -0
- package/dist/plugins/devices-shelly-ng/services/device-manager.service.js +130 -7
- package/dist/plugins/devices-shelly-ng/services/device-manager.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/poll-placement-diagnostics.service.d.ts +48 -0
- package/dist/plugins/devices-shelly-ng/services/poll-placement-diagnostics.service.js +457 -0
- package/dist/plugins/devices-shelly-ng/services/poll-placement-diagnostics.service.js.map +1 -0
- package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.d.ts +12 -2
- package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.js +86 -28
- package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-rpc-client.service.js +3 -0
- package/dist/plugins/devices-shelly-ng/services/shelly-rpc-client.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-ws-server.service.d.ts +1 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-ws-server.service.js +18 -13
- package/dist/plugins/devices-shelly-ng/services/shelly-ws-server.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/utils/transform.utils.d.ts +2 -0
- package/dist/plugins/devices-shelly-ng/utils/transform.utils.js +14 -1
- package/dist/plugins/devices-shelly-ng/utils/transform.utils.js.map +1 -1
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.constants.d.ts +2 -0
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.constants.js +66 -4
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.constants.js.map +1 -1
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.plugin.js +2 -0
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.plugin.js.map +1 -1
- package/dist/plugins/devices-shelly-v1/platforms/shelly-v1.device.platform.js +7 -0
- package/dist/plugins/devices-shelly-v1/platforms/shelly-v1.device.platform.js.map +1 -1
- package/dist/plugins/devices-shelly-v1/services/device-mapper.service.d.ts +3 -1
- package/dist/plugins/devices-shelly-v1/services/device-mapper.service.js +20 -2
- package/dist/plugins/devices-shelly-v1/services/device-mapper.service.js.map +1 -1
- package/dist/plugins/devices-shelly-v1/services/shelly-v1-input-tracker.service.d.ts +16 -0
- package/dist/plugins/devices-shelly-v1/services/shelly-v1-input-tracker.service.js +107 -0
- package/dist/plugins/devices-shelly-v1/services/shelly-v1-input-tracker.service.js.map +1 -0
- package/dist/plugins/devices-shelly-v1/services/shelly-v1.service.d.ts +7 -1
- package/dist/plugins/devices-shelly-v1/services/shelly-v1.service.js +98 -3
- package/dist/plugins/devices-shelly-v1/services/shelly-v1.service.js.map +1 -1
- package/dist/plugins/devices-third-party/controllers/third-party-inputs.controller.d.ts +17 -0
- package/dist/plugins/devices-third-party/controllers/third-party-inputs.controller.js +205 -0
- package/dist/plugins/devices-third-party/controllers/third-party-inputs.controller.js.map +1 -0
- package/dist/plugins/devices-third-party/devices-third-party.openapi.d.ts +1 -1
- package/dist/plugins/devices-third-party/devices-third-party.plugin.js +2 -1
- package/dist/plugins/devices-third-party/devices-third-party.plugin.js.map +1 -1
- package/dist/plugins/devices-third-party/dto/report-input-occurrence-response.dto.d.ts +5 -0
- package/dist/plugins/devices-third-party/dto/report-input-occurrence-response.dto.js +50 -0
- package/dist/plugins/devices-third-party/dto/report-input-occurrence-response.dto.js.map +1 -0
- package/dist/plugins/devices-third-party/dto/report-input-occurrence.dto.d.ts +8 -0
- package/dist/plugins/devices-third-party/dto/report-input-occurrence.dto.js +81 -0
- package/dist/plugins/devices-third-party/dto/report-input-occurrence.dto.js.map +1 -0
- package/dist/plugins/devices-third-party/platforms/third-party-device.platform.js +19 -4
- package/dist/plugins/devices-third-party/platforms/third-party-device.platform.js.map +1 -1
- package/dist/plugins/devices-virtual/listeners/virtual-projection.listener.d.ts +2 -0
- package/dist/plugins/devices-virtual/listeners/virtual-projection.listener.js +57 -0
- package/dist/plugins/devices-virtual/listeners/virtual-projection.listener.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.constants.d.ts +3 -0
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.constants.js +41 -5
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.constants.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/interfaces/zigbee2mqtt.interface.d.ts +7 -1
- package/dist/plugins/devices-zigbee2mqtt/mappings/config-driven.converter.js +16 -15
- package/dist/plugins/devices-zigbee2mqtt/mappings/config-driven.converter.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/mappings/definitions/remotes.yaml +505 -74
- package/dist/plugins/devices-zigbee2mqtt/mappings/schema/mapping-schema.json +3 -3
- package/dist/plugins/devices-zigbee2mqtt/mappings/transformers/transformer.types.d.ts +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/base-client-adapter.d.ts +8 -2
- package/dist/plugins/devices-zigbee2mqtt/services/base-client-adapter.js +6 -5
- package/dist/plugins/devices-zigbee2mqtt/services/base-client-adapter.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/device-adoption.service.js +18 -11
- package/dist/plugins/devices-zigbee2mqtt/services/device-adoption.service.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/device-mapper.service.d.ts +9 -3
- package/dist/plugins/devices-zigbee2mqtt/services/device-mapper.service.js +166 -3
- package/dist/plugins/devices-zigbee2mqtt/services/device-mapper.service.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/mqtt-client-adapter.service.js +5 -2
- package/dist/plugins/devices-zigbee2mqtt/services/mqtt-client-adapter.service.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt.service.d.ts +1 -0
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt.service.js +44 -4
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt.service.js.map +1 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.d.ts +17 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.js +147 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.d.ts +15 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.js +98 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/dto/update-config.dto.d.ts +9 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/dto/update-config.dto.js +94 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/dto/update-config.dto.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/config.model.d.ts +9 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/config.model.js +92 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/config.model.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/install.model.d.ts +7 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/install.model.js +48 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/install.model.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.d.ts +42 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.js +352 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.constants.d.ts +24 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.constants.js +27 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.constants.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.exceptions.d.ts +8 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.exceptions.js +19 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.exceptions.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.openapi.d.ts +4 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.openapi.js +20 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.openapi.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.plugin.d.ts +21 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.plugin.js +135 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.plugin.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/scripts/cloudflared-setup.sh +185 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.d.ts +82 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.js +507 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.d.ts +10 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.js +37 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-setup.service.d.ts +38 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-setup.service.js +147 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-setup.service.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.d.ts +15 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.js +67 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.d.ts +8 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.js +46 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-process.service.d.ts +27 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-process.service.js +139 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-process.service.js.map +1 -0
- package/dist/plugins/remote-access-tailscale/controllers/setup.controller.d.ts +1 -0
- package/dist/plugins/remote-access-tailscale/controllers/setup.controller.js +26 -10
- package/dist/plugins/remote-access-tailscale/controllers/setup.controller.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/controllers/status.controller.d.ts +6 -1
- package/dist/plugins/remote-access-tailscale/controllers/status.controller.js +28 -3
- package/dist/plugins/remote-access-tailscale/controllers/status.controller.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/models/status.model.d.ts +19 -0
- package/dist/plugins/remote-access-tailscale/models/status.model.js +158 -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 +3 -0
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.constants.js +4 -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 +13 -0
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.exceptions.js +27 -0
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.exceptions.js.map +1 -0
- 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 +2 -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 +1 -1
- package/dist/plugins/remote-access-tailscale/scripts/tailscale-setup.sh +61 -0
- package/dist/plugins/remote-access-tailscale/services/tailscale-cli.service.d.ts +9 -0
- package/dist/plugins/remote-access-tailscale/services/tailscale-cli.service.js +12 -0
- 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 +1 -0
- package/dist/plugins/remote-access-tailscale/services/tailscale-login.service.js +27 -2
- 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 +31 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-node-managed.service.js +316 -30
- package/dist/plugins/remote-access-tailscale/services/tailscale-node-managed.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-serve.service.d.ts +8 -3
- package/dist/plugins/remote-access-tailscale/services/tailscale-serve.service.js +39 -12
- 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 +14 -5
- package/dist/plugins/remote-access-tailscale/services/tailscale-setup.service.js +51 -16
- package/dist/plugins/remote-access-tailscale/services/tailscale-setup.service.js.map +1 -1
- package/dist/plugins/scenes-local/platforms/local-scene.platform.d.ts +3 -1
- package/dist/plugins/scenes-local/platforms/local-scene.platform.js +12 -7
- package/dist/plugins/scenes-local/platforms/local-scene.platform.js.map +1 -1
- package/dist/plugins/simulator/controllers/simulator.controller.d.ts +8 -2
- package/dist/plugins/simulator/controllers/simulator.controller.js +102 -2
- package/dist/plugins/simulator/controllers/simulator.controller.js.map +1 -1
- package/dist/plugins/simulator/dto/simulate-occurrence.dto.d.ts +12 -0
- package/dist/plugins/simulator/dto/simulate-occurrence.dto.js +122 -0
- package/dist/plugins/simulator/dto/simulate-occurrence.dto.js.map +1 -0
- package/dist/plugins/simulator/models/simulator-response.model.d.ts +12 -0
- package/dist/plugins/simulator/models/simulator-response.model.js +84 -1
- package/dist/plugins/simulator/models/simulator-response.model.js.map +1 -1
- package/dist/plugins/simulator/scenarios/definitions/small-apartment.yaml +78 -0
- package/dist/plugins/simulator/services/scenario-executor.service.js +3 -1
- package/dist/plugins/simulator/services/scenario-executor.service.js.map +1 -1
- package/dist/plugins/simulator/services/simulation.service.js +10 -1
- package/dist/plugins/simulator/services/simulation.service.js.map +1 -1
- package/dist/plugins/simulator/simulator.openapi.d.ts +3 -2
- package/dist/plugins/simulator/simulator.openapi.js +5 -0
- package/dist/plugins/simulator/simulator.openapi.js.map +1 -1
- package/dist/plugins/simulator/simulators/device-simulator.interface.d.ts +2 -0
- package/dist/plugins/simulator/simulators/device-simulator.interface.js +83 -0
- package/dist/plugins/simulator/simulators/device-simulator.interface.js.map +1 -1
- package/dist/plugins/simulator/simulators/index.d.ts +1 -0
- package/dist/plugins/simulator/simulators/index.js +1 -0
- package/dist/plugins/simulator/simulators/index.js.map +1 -1
- package/dist/plugins/simulator/simulators/input-controller.simulator.d.ts +10 -0
- package/dist/plugins/simulator/simulators/input-controller.simulator.js +57 -0
- package/dist/plugins/simulator/simulators/input-controller.simulator.js.map +1 -0
- package/dist/plugins/simulator/simulators/lighting.simulator.js +1 -0
- package/dist/plugins/simulator/simulators/lighting.simulator.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/climate-intent.service.d.ts +3 -1
- package/dist/plugins/spaces-home-control/services/climate-intent.service.js +6 -3
- package/dist/plugins/spaces-home-control/services/climate-intent.service.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/covers-intent.service.d.ts +3 -1
- package/dist/plugins/spaces-home-control/services/covers-intent.service.js +6 -3
- package/dist/plugins/spaces-home-control/services/covers-intent.service.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/lighting-intent.service.d.ts +3 -1
- package/dist/plugins/spaces-home-control/services/lighting-intent.service.js +7 -4
- package/dist/plugins/spaces-home-control/services/lighting-intent.service.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/space-media-activity.service.d.ts +3 -1
- package/dist/plugins/spaces-home-control/services/space-media-activity.service.js +11 -5
- package/dist/plugins/spaces-home-control/services/space-media-activity.service.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/space-undo-history.service.d.ts +3 -1
- package/dist/plugins/spaces-home-control/services/space-undo-history.service.js +8 -5
- package/dist/plugins/spaces-home-control/services/space-undo-history.service.js.map +1 -1
- package/dist/spec/channels.d.ts +51 -1
- package/dist/spec/channels.js +64 -1
- package/dist/spec/channels.js.map +1 -1
- package/dist/spec/devices.d.ts +155 -2
- package/dist/spec/devices.js +161 -2
- package/dist/spec/devices.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.plugin.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RemoteAccessCloudflareTunnelPlugin = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const config_1 = require("@nestjs/config");
|
|
15
|
+
const plugins_type_mapper_service_1 = require("../../modules/config/services/plugins-type-mapper.service");
|
|
16
|
+
const extensions_service_1 = require("../../modules/extensions/services/extensions.service");
|
|
17
|
+
const managed_service_manager_service_1 = require("../../modules/extensions/services/managed-service-manager.service");
|
|
18
|
+
const platform_module_1 = require("../../modules/platform/platform.module");
|
|
19
|
+
const remote_access_module_1 = require("../../modules/remote-access/remote-access.module");
|
|
20
|
+
const remote_access_provider_registry_service_1 = require("../../modules/remote-access/services/remote-access-provider-registry.service");
|
|
21
|
+
const api_tag_decorator_1 = require("../../modules/swagger/decorators/api-tag.decorator");
|
|
22
|
+
const swagger_models_registry_service_1 = require("../../modules/swagger/services/swagger-models-registry.service");
|
|
23
|
+
const factory_reset_registry_service_1 = require("../../modules/system/services/factory-reset-registry.service");
|
|
24
|
+
const setup_controller_1 = require("./controllers/setup.controller");
|
|
25
|
+
const status_controller_1 = require("./controllers/status.controller");
|
|
26
|
+
const update_config_dto_1 = require("./dto/update-config.dto");
|
|
27
|
+
const config_model_1 = require("./models/config.model");
|
|
28
|
+
const remote_access_cloudflare_tunnel_constants_1 = require("./remote-access-cloudflare-tunnel.constants");
|
|
29
|
+
const remote_access_cloudflare_tunnel_openapi_1 = require("./remote-access-cloudflare-tunnel.openapi");
|
|
30
|
+
const cloudflare_tunnel_managed_service_1 = require("./services/cloudflare-tunnel-managed.service");
|
|
31
|
+
const cloudflare_tunnel_provider_service_1 = require("./services/cloudflare-tunnel-provider.service");
|
|
32
|
+
const cloudflare_tunnel_setup_service_1 = require("./services/cloudflare-tunnel-setup.service");
|
|
33
|
+
const cloudflared_cli_service_1 = require("./services/cloudflared-cli.service");
|
|
34
|
+
const cloudflared_metrics_service_1 = require("./services/cloudflared-metrics.service");
|
|
35
|
+
const cloudflared_process_service_1 = require("./services/cloudflared-process.service");
|
|
36
|
+
let RemoteAccessCloudflareTunnelPlugin = class RemoteAccessCloudflareTunnelPlugin {
|
|
37
|
+
constructor(pluginsMapperService, swaggerRegistry, extensionsService, managedServiceManager, providerRegistry, factoryResetRegistry, tunnelManagedService, providerService) {
|
|
38
|
+
this.pluginsMapperService = pluginsMapperService;
|
|
39
|
+
this.swaggerRegistry = swaggerRegistry;
|
|
40
|
+
this.extensionsService = extensionsService;
|
|
41
|
+
this.managedServiceManager = managedServiceManager;
|
|
42
|
+
this.providerRegistry = providerRegistry;
|
|
43
|
+
this.factoryResetRegistry = factoryResetRegistry;
|
|
44
|
+
this.tunnelManagedService = tunnelManagedService;
|
|
45
|
+
this.providerService = providerService;
|
|
46
|
+
}
|
|
47
|
+
onModuleInit() {
|
|
48
|
+
this.pluginsMapperService.registerMapping({
|
|
49
|
+
type: remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_NAME,
|
|
50
|
+
class: config_model_1.RemoteAccessCloudflareTunnelPluginConfigModel,
|
|
51
|
+
configDto: update_config_dto_1.UpdateRemoteAccessCloudflareTunnelPluginConfigDto,
|
|
52
|
+
secretFields: [
|
|
53
|
+
{
|
|
54
|
+
path: 'tunnel_token',
|
|
55
|
+
configuredPath: 'tunnel_token_configured',
|
|
56
|
+
inputPaths: ['tunnelToken'],
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
});
|
|
60
|
+
for (const model of remote_access_cloudflare_tunnel_openapi_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_SWAGGER_EXTRA_MODELS) {
|
|
61
|
+
this.swaggerRegistry.register(model);
|
|
62
|
+
}
|
|
63
|
+
this.extensionsService.registerPluginMetadata({
|
|
64
|
+
type: remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_NAME,
|
|
65
|
+
name: 'Cloudflare Tunnel',
|
|
66
|
+
description: 'Publish this installation to the internet through a Cloudflare Tunnel, without opening a port.',
|
|
67
|
+
author: 'FastyBird',
|
|
68
|
+
defaultEnabled: false,
|
|
69
|
+
readme: `# Cloudflare Tunnel
|
|
70
|
+
|
|
71
|
+
> Plugin · by FastyBird · platform: remote-access
|
|
72
|
+
|
|
73
|
+
Publishes this installation to the public internet through a Cloudflare Tunnel: an outbound-only, encrypted connection from this device to the Cloudflare edge. Once a tunnel token is configured, the admin UI is reachable at your own hostname over HTTPS — no port forwarding, no public IP address, and no inbound firewall rule required.
|
|
74
|
+
|
|
75
|
+
## What you get
|
|
76
|
+
|
|
77
|
+
- A public HTTPS hostname of your choosing (e.g. \`panel.example.com\`), backed by Cloudflare's own TLS certificate
|
|
78
|
+
- The tunnel connector managed entirely from the Smart Panel admin UI — install, connect, disconnect and remove, all without a terminal
|
|
79
|
+
- The option to protect the published hostname further with Cloudflare Access, layering an identity check in front of the Smart Panel login
|
|
80
|
+
|
|
81
|
+
## Requirements
|
|
82
|
+
|
|
83
|
+
- \`raspberry\` or \`generic\` platform with systemd and the existing sudoers allowlist (Docker and the Home Assistant add-on are not supported — see the docs for alternatives)
|
|
84
|
+
- A tunnel already created in the Cloudflare Zero Trust dashboard, and its token pasted into the setup wizard here
|
|
85
|
+
|
|
86
|
+
## Security
|
|
87
|
+
|
|
88
|
+
Once connected, this installation is reachable from the public internet through the published hostname; only the Smart Panel login protects it unless you also configure Cloudflare Access. Review who else has access to the account before publishing sensitive installations.
|
|
89
|
+
|
|
90
|
+
## Configuration
|
|
91
|
+
|
|
92
|
+
| Option | Description | Default |
|
|
93
|
+
|--------|-------------|---------|
|
|
94
|
+
| \`public_hostname\` | Public hostname the tunnel publishes, e.g. \`panel.example.com\` | — |
|
|
95
|
+
| \`protocol\` | Protocol cloudflared uses to connect to the Cloudflare edge | \`auto\` |
|
|
96
|
+
| \`tunnel_token\` | Tunnel token from the Cloudflare Zero Trust dashboard | — |`,
|
|
97
|
+
links: {
|
|
98
|
+
documentation: 'https://smart-panel.fastybird.com/docs',
|
|
99
|
+
repository: 'https://github.com/FastyBird/smart-panel',
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
this.providerRegistry.register(this.providerService);
|
|
103
|
+
this.managedServiceManager.register(this.tunnelManagedService);
|
|
104
|
+
this.factoryResetRegistry.register(remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_NAME, () => this.tunnelManagedService.factoryReset(), 90);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
exports.RemoteAccessCloudflareTunnelPlugin = RemoteAccessCloudflareTunnelPlugin;
|
|
108
|
+
exports.RemoteAccessCloudflareTunnelPlugin = RemoteAccessCloudflareTunnelPlugin = __decorate([
|
|
109
|
+
(0, api_tag_decorator_1.ApiTag)({
|
|
110
|
+
tagName: remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_NAME,
|
|
111
|
+
displayName: remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_API_TAG_NAME,
|
|
112
|
+
description: remote_access_cloudflare_tunnel_constants_1.REMOTE_ACCESS_CLOUDFLARE_TUNNEL_PLUGIN_API_TAG_DESCRIPTION,
|
|
113
|
+
}),
|
|
114
|
+
(0, common_1.Module)({
|
|
115
|
+
imports: [remote_access_module_1.RemoteAccessModule, platform_module_1.PlatformModule, config_1.ConfigModule],
|
|
116
|
+
controllers: [status_controller_1.StatusController, setup_controller_1.SetupController],
|
|
117
|
+
providers: [
|
|
118
|
+
cloudflared_cli_service_1.CloudflaredCliService,
|
|
119
|
+
cloudflared_process_service_1.CloudflaredProcessService,
|
|
120
|
+
cloudflared_metrics_service_1.CloudflaredMetricsService,
|
|
121
|
+
cloudflare_tunnel_managed_service_1.CloudflareTunnelManagedService,
|
|
122
|
+
cloudflare_tunnel_provider_service_1.CloudflareTunnelProviderService,
|
|
123
|
+
cloudflare_tunnel_setup_service_1.CloudflareTunnelSetupService,
|
|
124
|
+
],
|
|
125
|
+
}),
|
|
126
|
+
__metadata("design:paramtypes", [plugins_type_mapper_service_1.PluginsTypeMapperService,
|
|
127
|
+
swagger_models_registry_service_1.SwaggerModelsRegistryService,
|
|
128
|
+
extensions_service_1.ExtensionsService,
|
|
129
|
+
managed_service_manager_service_1.ManagedServiceManagerService,
|
|
130
|
+
remote_access_provider_registry_service_1.RemoteAccessProviderRegistryService,
|
|
131
|
+
factory_reset_registry_service_1.FactoryResetRegistryService,
|
|
132
|
+
cloudflare_tunnel_managed_service_1.CloudflareTunnelManagedService,
|
|
133
|
+
cloudflare_tunnel_provider_service_1.CloudflareTunnelProviderService])
|
|
134
|
+
], RemoteAccessCloudflareTunnelPlugin);
|
|
135
|
+
//# sourceMappingURL=remote-access-cloudflare-tunnel.plugin.js.map
|
package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.plugin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-access-cloudflare-tunnel.plugin.js","sourceRoot":"","sources":["../../../src/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAsD;AACtD,2CAAkE;AAElE,2GAAqG;AACrG,6FAAyF;AACzF,uHAAiH;AACjH,4EAAwE;AACxE,2FAAsF;AACtF,0IAAmI;AACnI,0FAA4E;AAC5E,oHAA8G;AAC9G,iHAA2G;AAE3G,qEAAiE;AACjE,uEAAmE;AACnE,+DAA4F;AAC5F,wDAAsF;AACtF,2GAIqD;AACrD,uGAAwH;AACxH,oGAA8F;AAC9F,sGAAgG;AAChG,gGAA0F;AAC1F,gFAA2E;AAC3E,wFAAmF;AACnF,wFAAmF;AAmB5E,IAAM,kCAAkC,GAAxC,MAAM,kCAAkC;IAC9C,YACkB,oBAA8C,EAC9C,eAA6C,EAC7C,iBAAoC,EACpC,qBAAmD,EACnD,gBAAqD,EACrD,oBAAiD,EACjD,oBAAoD,EACpD,eAAgD;QAPhD,yBAAoB,GAApB,oBAAoB,CAA0B;QAC9C,oBAAe,GAAf,eAAe,CAA8B;QAC7C,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,0BAAqB,GAArB,qBAAqB,CAA8B;QACnD,qBAAgB,GAAhB,gBAAgB,CAAqC;QACrD,yBAAoB,GAApB,oBAAoB,CAA6B;QACjD,yBAAoB,GAApB,oBAAoB,CAAgC;QACpD,oBAAe,GAAf,eAAe,CAAiC;IAC/D,CAAC;IAEJ,YAAY;QACX,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAGvC;YACD,IAAI,EAAE,uFAA2C;YACjD,KAAK,EAAE,4DAA6C;YACpD,SAAS,EAAE,qEAAiD;YAC5D,YAAY,EAAE;gBACb;oBACC,IAAI,EAAE,cAAc;oBACpB,cAAc,EAAE,yBAAyB;oBACzC,UAAU,EAAE,CAAC,aAAa,CAAC;iBAC3B;aACD;SACD,CAAC,CAAC;QAEH,KAAK,MAAM,KAAK,IAAI,qGAA2D,EAAE,CAAC;YACjF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC;YAC7C,IAAI,EAAE,uFAA2C;YACjD,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,gGAAgG;YAC7G,MAAM,EAAE,WAAW;YACnB,cAAc,EAAE,KAAK;YACrB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;iFA2BsE;YAC9E,KAAK,EAAE;gBACN,aAAa,EAAE,wCAAwC;gBACvD,UAAU,EAAE,0CAA0C;aACtD;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAErD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAE/D,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CACjC,uFAA2C,EAC3C,GAAmD,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,EAC9F,EAAE,CACF,CAAC;IACH,CAAC;CACD,CAAA;AAnFY,gFAAkC;6CAAlC,kCAAkC;IAjB9C,IAAA,0BAAM,EAAC;QACP,OAAO,EAAE,uFAA2C;QACpD,WAAW,EAAE,+FAAmD;QAChE,WAAW,EAAE,sGAA0D;KACvE,CAAC;IACD,IAAA,eAAM,EAAC;QACP,OAAO,EAAE,CAAC,yCAAkB,EAAE,gCAAc,EAAE,qBAAgB,CAAC;QAC/D,WAAW,EAAE,CAAC,oCAAgB,EAAE,kCAAe,CAAC;QAChD,SAAS,EAAE;YACV,+CAAqB;YACrB,uDAAyB;YACzB,uDAAyB;YACzB,kEAA8B;YAC9B,oEAA+B;YAC/B,8DAA4B;SAC5B;KACD,CAAC;qCAGuC,sDAAwB;QAC7B,8DAA4B;QAC1B,sCAAiB;QACb,8DAA4B;QACjC,6EAAmC;QAC/B,4DAA2B;QAC3B,kEAA8B;QACnC,oEAA+B;GATtD,kCAAkC,CAmF9C"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Privileged Cloudflare Tunnel setup job, run by PrivilegedWorkerService as
|
|
3
|
+
# `sudo -n systemd-run --scope --unit=smart-panel-remote-access-cloudflare
|
|
4
|
+
# bash cloudflared-setup.sh` (see CloudflareTunnelSetupService.install()).
|
|
5
|
+
# Idempotent: re-running is harmless once the package is already installed.
|
|
6
|
+
#
|
|
7
|
+
# Unlike tailscale-setup.sh, this script has exactly one step: install the
|
|
8
|
+
# `cloudflared` package from the signed vendor apt repository — never a
|
|
9
|
+
# downloaded script piped into a shell. Enabling a daemon and granting an
|
|
10
|
+
# operator are Tailscale-specific: the Cloudflare Tunnel connector itself
|
|
11
|
+
# runs unprivileged as a child process of the backend (D9), never through
|
|
12
|
+
# systemd, so there is nothing else for this privileged job to do.
|
|
13
|
+
#
|
|
14
|
+
# --dry-run prints the commands each step would run instead of running them
|
|
15
|
+
# and always finishes at "complete" with exit 0, regardless of the host OS —
|
|
16
|
+
# it previews the real branching logic without requiring root, apt or a
|
|
17
|
+
# Debian-family host, so it can run from a Jest spec on any platform.
|
|
18
|
+
#
|
|
19
|
+
# --print-plan is a separate, read-only mode for CloudflareTunnelManagedService's
|
|
20
|
+
# D12 remedy builder: it prints one command per line for the detected
|
|
21
|
+
# ID/VERSION_CODENAME from /etc/os-release and executes nothing at all — no
|
|
22
|
+
# status file, no trap. This is what keeps the admin-facing "run this
|
|
23
|
+
# yourself" remedy list from ever drifting out of sync with what the
|
|
24
|
+
# privileged install step above actually runs. An unsupported (non-Debian-family)
|
|
25
|
+
# distribution prints nothing on stdout — the caller's own signal to fall
|
|
26
|
+
# back to a vendor link instead of a command list.
|
|
27
|
+
set -e
|
|
28
|
+
# Without this, `curl ... | tee ...` reports tee's exit status, not curl's —
|
|
29
|
+
# a failed download would be silently treated as success by the `|| { ... }`
|
|
30
|
+
# guards below.
|
|
31
|
+
set -o pipefail
|
|
32
|
+
|
|
33
|
+
STATUS_FILE="${STATUS_FILE:-/var/lib/smart-panel/remote-access-cloudflare-tunnel/cloudflare-tunnel-setup-status.json}"
|
|
34
|
+
|
|
35
|
+
KEYRING_URL="https://pkg.cloudflare.com/cloudflare-main.gpg"
|
|
36
|
+
KEYRING_PATH="/usr/share/keyrings/cloudflare-main.gpg"
|
|
37
|
+
LIST_PATH="/etc/apt/sources.list.d/cloudflared.list"
|
|
38
|
+
LIST_LINE="deb [signed-by=${KEYRING_PATH}] https://pkg.cloudflare.com/cloudflared any main"
|
|
39
|
+
|
|
40
|
+
DRY_RUN=0
|
|
41
|
+
PRINT_PLAN=0
|
|
42
|
+
for arg in "$@"; do
|
|
43
|
+
case "$arg" in
|
|
44
|
+
--dry-run) DRY_RUN=1 ;;
|
|
45
|
+
--print-plan) PRINT_PLAN=1 ;;
|
|
46
|
+
esac
|
|
47
|
+
done
|
|
48
|
+
|
|
49
|
+
# Read-only, side-effect-free: print the plan and exit before this script
|
|
50
|
+
# ever touches STATUS_FILE or registers the cleanup trap below.
|
|
51
|
+
if [ "$PRINT_PLAN" -eq 1 ]; then
|
|
52
|
+
OS_ID=""
|
|
53
|
+
|
|
54
|
+
if [ -f /etc/os-release ]; then
|
|
55
|
+
# shellcheck source=/dev/null
|
|
56
|
+
. /etc/os-release
|
|
57
|
+
OS_ID="${ID:-}"
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
case "$OS_ID" in
|
|
61
|
+
raspbian | debian | ubuntu)
|
|
62
|
+
# `sudo` sits on the `tee` side, not the whole pipeline - prefixing the
|
|
63
|
+
# entire line would only elevate `curl`/`echo` and leave `tee` unable to
|
|
64
|
+
# write these root-owned paths. The caller (CloudflareTunnelManagedService)
|
|
65
|
+
# only blind-prefixes `sudo` onto lines that do not already contain a pipe.
|
|
66
|
+
echo "curl -fsSL ${KEYRING_URL} | sudo tee ${KEYRING_PATH} >/dev/null"
|
|
67
|
+
echo "echo '${LIST_LINE}' | sudo tee ${LIST_PATH} >/dev/null"
|
|
68
|
+
echo "apt-get update -qq"
|
|
69
|
+
echo "apt-get install -y -qq --no-install-recommends cloudflared"
|
|
70
|
+
;;
|
|
71
|
+
*)
|
|
72
|
+
# Unsupported distribution: intentionally prints nothing on stdout — the
|
|
73
|
+
# caller's signal to fall back to a vendor link instead of a command
|
|
74
|
+
# list. A note on stderr only, for a human running this script directly.
|
|
75
|
+
echo "unsupported distribution (ID=${OS_ID:-unknown}); install manually: https://pkg.cloudflare.com/index.html" >&2
|
|
76
|
+
;;
|
|
77
|
+
esac
|
|
78
|
+
|
|
79
|
+
exit 0
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# Writes the canonical `{ state, step, message }` status PrivilegedWorkerService
|
|
83
|
+
# expects, via a temp file + rename so a concurrent read never sees a
|
|
84
|
+
# half-written file. printf %s (never direct interpolation into the format
|
|
85
|
+
# string) and the sed escape below keep an unexpected value out of the JSON
|
|
86
|
+
# structure.
|
|
87
|
+
write_status() {
|
|
88
|
+
local state="$1"
|
|
89
|
+
local step="$2"
|
|
90
|
+
local message="${3:-}"
|
|
91
|
+
local tmp_file="${STATUS_FILE}.tmp"
|
|
92
|
+
local safe_message=""
|
|
93
|
+
|
|
94
|
+
if [ -n "$message" ]; then
|
|
95
|
+
safe_message=$(printf '%s' "$message" | tr -d '\000-\037' | sed 's/\\/\\\\/g; s/"/\\"/g')
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
mkdir -p "$(dirname "$STATUS_FILE")"
|
|
99
|
+
|
|
100
|
+
printf '{\n\t"state": "%s",\n\t"step": "%s",\n\t"message": "%s"\n}\n' \
|
|
101
|
+
"$state" "$step" "$safe_message" >"$tmp_file"
|
|
102
|
+
|
|
103
|
+
mv "$tmp_file" "$STATUS_FILE"
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
# Only fires on an exit this script did not already report itself (a crash,
|
|
107
|
+
# an unset-variable error, an unhandled command failure) — a step that
|
|
108
|
+
# already wrote "failed" leaves that status alone.
|
|
109
|
+
cleanup() {
|
|
110
|
+
local exit_code=$?
|
|
111
|
+
|
|
112
|
+
if [ "$exit_code" -ne 0 ]; then
|
|
113
|
+
if [ -f "$STATUS_FILE" ] && grep -q '"state": "failed"' "$STATUS_FILE" 2>/dev/null; then
|
|
114
|
+
return
|
|
115
|
+
fi
|
|
116
|
+
|
|
117
|
+
write_status "failed" "unknown" "Setup exited unexpectedly with code $exit_code"
|
|
118
|
+
fi
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
trap cleanup EXIT
|
|
122
|
+
|
|
123
|
+
# ──────────────────────────────────────────────────────────────
|
|
124
|
+
# Install the cloudflared package if missing
|
|
125
|
+
# ──────────────────────────────────────────────────────────────
|
|
126
|
+
if command -v cloudflared >/dev/null 2>&1; then
|
|
127
|
+
write_status "running" "install" "cloudflared is already installed"
|
|
128
|
+
else
|
|
129
|
+
write_status "running" "install" "Installing the cloudflared package"
|
|
130
|
+
|
|
131
|
+
OS_ID=""
|
|
132
|
+
|
|
133
|
+
if [ -f /etc/os-release ]; then
|
|
134
|
+
# shellcheck source=/dev/null
|
|
135
|
+
. /etc/os-release
|
|
136
|
+
OS_ID="${ID:-}"
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
case "$OS_ID" in
|
|
140
|
+
raspbian | debian | ubuntu)
|
|
141
|
+
if [ "$DRY_RUN" -eq 1 ]; then
|
|
142
|
+
echo "[dry-run] curl -fsSL $KEYRING_URL | tee $KEYRING_PATH"
|
|
143
|
+
echo "[dry-run] echo '$LIST_LINE' | tee $LIST_PATH"
|
|
144
|
+
echo "[dry-run] apt-get update -qq"
|
|
145
|
+
echo "[dry-run] apt-get install -y -qq --no-install-recommends cloudflared"
|
|
146
|
+
else
|
|
147
|
+
# Only the signed keyring and the apt source list are downloaded —
|
|
148
|
+
# never a script. apt-get itself verifies every package against
|
|
149
|
+
# this keyring before installing it.
|
|
150
|
+
curl -fsSL "$KEYRING_URL" | tee "$KEYRING_PATH" >/dev/null || {
|
|
151
|
+
write_status "failed" "install" "Failed to download the Cloudflare apt keyring"
|
|
152
|
+
exit 1
|
|
153
|
+
}
|
|
154
|
+
echo "$LIST_LINE" | tee "$LIST_PATH" >/dev/null || {
|
|
155
|
+
write_status "failed" "install" "Failed to write the Cloudflare apt source list"
|
|
156
|
+
exit 1
|
|
157
|
+
}
|
|
158
|
+
apt-get update -qq || {
|
|
159
|
+
write_status "failed" "install" "apt-get update failed"
|
|
160
|
+
exit 1
|
|
161
|
+
}
|
|
162
|
+
apt-get install -y -qq --no-install-recommends cloudflared || {
|
|
163
|
+
write_status "failed" "install" "apt-get install cloudflared failed"
|
|
164
|
+
exit 1
|
|
165
|
+
}
|
|
166
|
+
fi
|
|
167
|
+
;;
|
|
168
|
+
*)
|
|
169
|
+
if [ "$DRY_RUN" -eq 1 ]; then
|
|
170
|
+
echo "[dry-run] unsupported OS (ID=${OS_ID:-unknown}) — a real run would stop here and report failed/install"
|
|
171
|
+
else
|
|
172
|
+
write_status "failed" "install" "cloudflared must be installed manually: https://pkg.cloudflare.com/index.html"
|
|
173
|
+
exit 1
|
|
174
|
+
fi
|
|
175
|
+
;;
|
|
176
|
+
esac
|
|
177
|
+
fi
|
|
178
|
+
|
|
179
|
+
# ──────────────────────────────────────────────────────────────
|
|
180
|
+
# Done
|
|
181
|
+
# ──────────────────────────────────────────────────────────────
|
|
182
|
+
write_status "complete" "complete" "Cloudflare Tunnel setup completed"
|
|
183
|
+
|
|
184
|
+
trap - EXIT
|
|
185
|
+
exit 0
|
package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.d.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { ConfigService as NestConfigService } from '@nestjs/config';
|
|
2
|
+
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
3
|
+
import { ConfigService } from '../../../modules/config/services/config.service';
|
|
4
|
+
import { BaseManagedExtensionService } from '../../../modules/extensions/services/base-managed-extension.service';
|
|
5
|
+
import { ConfigChangeResult } from '../../../modules/extensions/services/managed-extension-service.interface';
|
|
6
|
+
import { PlatformService } from '../../../modules/platform/services/platform.service';
|
|
7
|
+
import { RemoteAccessProviderStatus } from '../../../modules/remote-access/platforms/remote-access-provider.platform';
|
|
8
|
+
import { RemoteAccessCloudflareTunnelPluginConfigModel } from '../models/config.model';
|
|
9
|
+
import { CloudflaredCliService } from './cloudflared-cli.service';
|
|
10
|
+
import { CloudflaredMetricsService } from './cloudflared-metrics.service';
|
|
11
|
+
import { CloudflaredProcessService } from './cloudflared-process.service';
|
|
12
|
+
export type CloudflareTunnelRequirementCode = 'platform-supported' | 'binary-installed' | 'version-supported' | 'token-configured';
|
|
13
|
+
export interface CloudflareTunnelRequirementRemedy {
|
|
14
|
+
commands: string[];
|
|
15
|
+
note: string | null;
|
|
16
|
+
}
|
|
17
|
+
export interface CloudflareTunnelRequirement {
|
|
18
|
+
code: CloudflareTunnelRequirementCode;
|
|
19
|
+
satisfied: boolean;
|
|
20
|
+
message: string;
|
|
21
|
+
remedy: CloudflareTunnelRequirementRemedy | null;
|
|
22
|
+
}
|
|
23
|
+
export declare function compareCloudflaredVersions(a: string, b: string): number;
|
|
24
|
+
export declare class CloudflareTunnelManagedService extends BaseManagedExtensionService {
|
|
25
|
+
private readonly cliService;
|
|
26
|
+
private readonly processService;
|
|
27
|
+
private readonly metricsService;
|
|
28
|
+
private readonly configService;
|
|
29
|
+
private readonly nestConfigService;
|
|
30
|
+
private readonly platformService;
|
|
31
|
+
private readonly eventEmitter;
|
|
32
|
+
private readonly logger;
|
|
33
|
+
readonly owner: {
|
|
34
|
+
readonly kind: "plugin";
|
|
35
|
+
readonly type: "remote-access-cloudflare-tunnel-plugin";
|
|
36
|
+
};
|
|
37
|
+
readonly serviceId = "tunnel";
|
|
38
|
+
readonly activationPolicy: "owner-enabled";
|
|
39
|
+
private pollTimer;
|
|
40
|
+
private lastStatus;
|
|
41
|
+
private lastError;
|
|
42
|
+
private pluginConfig;
|
|
43
|
+
private requirementsCache;
|
|
44
|
+
private lastKnownVersion;
|
|
45
|
+
constructor(cliService: CloudflaredCliService, processService: CloudflaredProcessService, metricsService: CloudflaredMetricsService, configService: ConfigService, nestConfigService: NestConfigService, platformService: PlatformService, eventEmitter: EventEmitter2);
|
|
46
|
+
start(): Promise<void>;
|
|
47
|
+
stop(): Promise<void>;
|
|
48
|
+
private emitStatus;
|
|
49
|
+
onConfigChanged(): Promise<ConfigChangeResult>;
|
|
50
|
+
isHealthy(): Promise<boolean>;
|
|
51
|
+
factoryReset(): Promise<{
|
|
52
|
+
success: boolean;
|
|
53
|
+
reason?: string;
|
|
54
|
+
}>;
|
|
55
|
+
getRequirements(): CloudflareTunnelRequirement[];
|
|
56
|
+
refreshRequirements(): Promise<CloudflareTunnelRequirement[]>;
|
|
57
|
+
private requirementsSatisfied;
|
|
58
|
+
private evaluateRequirementsLive;
|
|
59
|
+
private unevaluatedRequirement;
|
|
60
|
+
private attachRemedies;
|
|
61
|
+
private finalizeRequirement;
|
|
62
|
+
private buildFixedRemedy;
|
|
63
|
+
private buildInstallRemedy;
|
|
64
|
+
private runSetupScriptPrintPlan;
|
|
65
|
+
private evaluatePlatformSupported;
|
|
66
|
+
private evaluateBinaryAndVersion;
|
|
67
|
+
private evaluateTokenConfigured;
|
|
68
|
+
private firstBlockingRequirement;
|
|
69
|
+
private stateForRequirementCode;
|
|
70
|
+
computeStatus(): Promise<RemoteAccessProviderStatus>;
|
|
71
|
+
private isPollable;
|
|
72
|
+
private schedulePoll;
|
|
73
|
+
private clearPoll;
|
|
74
|
+
private pollTick;
|
|
75
|
+
private hasStatusChanged;
|
|
76
|
+
private buildStatus;
|
|
77
|
+
private buildEndpoints;
|
|
78
|
+
private buildDetails;
|
|
79
|
+
private buildAdvisories;
|
|
80
|
+
private getMetricsAddress;
|
|
81
|
+
getPluginConfig(): RemoteAccessCloudflareTunnelPluginConfigModel;
|
|
82
|
+
}
|