@camstack/addon-provider-tuya 0.2.66 → 0.2.68

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/addon.js CHANGED
@@ -21561,6 +21561,14 @@ var AgentPipelineSettingsSchema = object({
21561
21561
  /** Node is eligible to be the ingest / source-owner (serve the restream). */
21562
21562
  ingest: boolean().optional(),
21563
21563
  /**
21564
+ * This node's decode RAM budget, MB. Wins over the cluster
21565
+ * `nodeDecodeBudgetMb`; absent, the runner derives a share of the node's
21566
+ * own RAM unless the operator moved the cluster value (D365).
21567
+ */
21568
+ decodeBudgetMb: number().int().min(1024).max(65536).optional(),
21569
+ /** This node's live decode-worker cap. Wins over the cluster `maxLiveDecodeWorkers`. */
21570
+ maxLiveDecodeWorkers: number().int().min(1).max(32).optional(),
21571
+ /**
21564
21572
  * Operator override for the LAN host a cross-node decoder dials to reach
21565
21573
  * THIS node's restream (Cluster UI). Absent → auto-detect: a remote runner
21566
21574
  * falls back to its `CAMSTACK_HUB_URL`-derived host (the Moleculer address
@@ -22022,6 +22030,13 @@ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
22022
22030
  }), object({ success: literal(true) }), {
22023
22031
  kind: "mutation",
22024
22032
  auth: "admin"
22033
+ }), method(object({
22034
+ agentNodeId: string(),
22035
+ decodeBudgetMb: number().int().min(1024).max(65536).nullable().optional(),
22036
+ maxLiveDecodeWorkers: number().int().min(1).max(32).nullable().optional()
22037
+ }), object({ success: literal(true) }), {
22038
+ kind: "mutation",
22039
+ auth: "admin"
22025
22040
  }), method(object({
22026
22041
  agentNodeId: string(),
22027
22042
  reachableHost: string().nullable()
@@ -33948,7 +33963,15 @@ var BaseDeviceProvider = class extends BaseAddon {
33948
33963
  if (!Class) throw new Error(`no device class registered for type "${saved.type}"`);
33949
33964
  if (saved.parentDeviceId !== null && !restored.has(saved.parentDeviceId)) throw new Error(`parent device ${saved.parentDeviceId} not restored`);
33950
33965
  await this.healSavedConfig(saved, savedDevices);
33951
- await this.ctx.kernel.devices.create(saved.stableId, Class, {}, saved.parentDeviceId);
33966
+ try {
33967
+ await this.ctx.kernel.devices.create(saved.stableId, Class, {}, saved.parentDeviceId);
33968
+ } catch (err) {
33969
+ if (!(await this.ctx.kernel.devices.getAll()).some((device) => device.stableId === saved.stableId)) throw err;
33970
+ this.ctx.logger.debug("Restore row came to life during its own dial — kept", { tags: {
33971
+ deviceId: saved.id,
33972
+ stableId: saved.stableId
33973
+ } });
33974
+ }
33952
33975
  restored.add(saved.id);
33953
33976
  };
33954
33977
  const topLevel = savedDevices.filter((saved) => saved.parentDeviceId === null);
@@ -37981,6 +38004,12 @@ Object.freeze({
37981
38004
  addonId: null,
37982
38005
  access: "create"
37983
38006
  },
38007
+ "pipelineOrchestrator.setAgentDecodeLimits": {
38008
+ capName: "pipeline-orchestrator",
38009
+ capScope: "system",
38010
+ addonId: null,
38011
+ access: "create"
38012
+ },
37984
38013
  "pipelineOrchestrator.setAgentDetectWeight": {
37985
38014
  capName: "pipeline-orchestrator",
37986
38015
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -21560,6 +21560,14 @@ var AgentPipelineSettingsSchema = object({
21560
21560
  /** Node is eligible to be the ingest / source-owner (serve the restream). */
21561
21561
  ingest: boolean().optional(),
21562
21562
  /**
21563
+ * This node's decode RAM budget, MB. Wins over the cluster
21564
+ * `nodeDecodeBudgetMb`; absent, the runner derives a share of the node's
21565
+ * own RAM unless the operator moved the cluster value (D365).
21566
+ */
21567
+ decodeBudgetMb: number().int().min(1024).max(65536).optional(),
21568
+ /** This node's live decode-worker cap. Wins over the cluster `maxLiveDecodeWorkers`. */
21569
+ maxLiveDecodeWorkers: number().int().min(1).max(32).optional(),
21570
+ /**
21563
21571
  * Operator override for the LAN host a cross-node decoder dials to reach
21564
21572
  * THIS node's restream (Cluster UI). Absent → auto-detect: a remote runner
21565
21573
  * falls back to its `CAMSTACK_HUB_URL`-derived host (the Moleculer address
@@ -22021,6 +22029,13 @@ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
22021
22029
  }), object({ success: literal(true) }), {
22022
22030
  kind: "mutation",
22023
22031
  auth: "admin"
22032
+ }), method(object({
22033
+ agentNodeId: string(),
22034
+ decodeBudgetMb: number().int().min(1024).max(65536).nullable().optional(),
22035
+ maxLiveDecodeWorkers: number().int().min(1).max(32).nullable().optional()
22036
+ }), object({ success: literal(true) }), {
22037
+ kind: "mutation",
22038
+ auth: "admin"
22024
22039
  }), method(object({
22025
22040
  agentNodeId: string(),
22026
22041
  reachableHost: string().nullable()
@@ -33947,7 +33962,15 @@ var BaseDeviceProvider = class extends BaseAddon {
33947
33962
  if (!Class) throw new Error(`no device class registered for type "${saved.type}"`);
33948
33963
  if (saved.parentDeviceId !== null && !restored.has(saved.parentDeviceId)) throw new Error(`parent device ${saved.parentDeviceId} not restored`);
33949
33964
  await this.healSavedConfig(saved, savedDevices);
33950
- await this.ctx.kernel.devices.create(saved.stableId, Class, {}, saved.parentDeviceId);
33965
+ try {
33966
+ await this.ctx.kernel.devices.create(saved.stableId, Class, {}, saved.parentDeviceId);
33967
+ } catch (err) {
33968
+ if (!(await this.ctx.kernel.devices.getAll()).some((device) => device.stableId === saved.stableId)) throw err;
33969
+ this.ctx.logger.debug("Restore row came to life during its own dial — kept", { tags: {
33970
+ deviceId: saved.id,
33971
+ stableId: saved.stableId
33972
+ } });
33973
+ }
33951
33974
  restored.add(saved.id);
33952
33975
  };
33953
33976
  const topLevel = savedDevices.filter((saved) => saved.parentDeviceId === null);
@@ -37980,6 +38003,12 @@ Object.freeze({
37980
38003
  addonId: null,
37981
38004
  access: "create"
37982
38005
  },
38006
+ "pipelineOrchestrator.setAgentDecodeLimits": {
38007
+ capName: "pipeline-orchestrator",
38008
+ capScope: "system",
38009
+ addonId: null,
38010
+ access: "create"
38011
+ },
37983
38012
  "pipelineOrchestrator.setAgentDetectWeight": {
37984
38013
  capName: "pipeline-orchestrator",
37985
38014
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-tuya",
3
- "version": "0.2.66",
3
+ "version": "0.2.68",
4
4
  "description": "Tuya / Smart Life device-provider addon for CamStack — account-onboarded (Tuya IoT cloud fetch of device localKeys) + LOCAL DP control via the @apocaliss92/nodetuya encrypted-LAN client, exposing switch / water-heater-family kettle entities",
5
5
  "keywords": [
6
6
  "camstack",