@camstack/addon-provider-hikvision 1.2.74 → 1.2.76

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
@@ -21031,6 +21031,14 @@ var AgentPipelineSettingsSchema = object({
21031
21031
  /** Node is eligible to be the ingest / source-owner (serve the restream). */
21032
21032
  ingest: boolean().optional(),
21033
21033
  /**
21034
+ * This node's decode RAM budget, MB. Wins over the cluster
21035
+ * `nodeDecodeBudgetMb`; absent, the runner derives a share of the node's
21036
+ * own RAM unless the operator moved the cluster value (D365).
21037
+ */
21038
+ decodeBudgetMb: number().int().min(1024).max(65536).optional(),
21039
+ /** This node's live decode-worker cap. Wins over the cluster `maxLiveDecodeWorkers`. */
21040
+ maxLiveDecodeWorkers: number().int().min(1).max(32).optional(),
21041
+ /**
21034
21042
  * Operator override for the LAN host a cross-node decoder dials to reach
21035
21043
  * THIS node's restream (Cluster UI). Absent → auto-detect: a remote runner
21036
21044
  * falls back to its `CAMSTACK_HUB_URL`-derived host (the Moleculer address
@@ -21492,6 +21500,13 @@ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
21492
21500
  }), object({ success: literal(true) }), {
21493
21501
  kind: "mutation",
21494
21502
  auth: "admin"
21503
+ }), method(object({
21504
+ agentNodeId: string(),
21505
+ decodeBudgetMb: number().int().min(1024).max(65536).nullable().optional(),
21506
+ maxLiveDecodeWorkers: number().int().min(1).max(32).nullable().optional()
21507
+ }), object({ success: literal(true) }), {
21508
+ kind: "mutation",
21509
+ auth: "admin"
21495
21510
  }), method(object({
21496
21511
  agentNodeId: string(),
21497
21512
  reachableHost: string().nullable()
@@ -33860,7 +33875,15 @@ var BaseDeviceProvider = class extends BaseAddon {
33860
33875
  if (!Class) throw new Error(`no device class registered for type "${saved.type}"`);
33861
33876
  if (saved.parentDeviceId !== null && !restored.has(saved.parentDeviceId)) throw new Error(`parent device ${saved.parentDeviceId} not restored`);
33862
33877
  await this.healSavedConfig(saved, savedDevices);
33863
- await this.ctx.kernel.devices.create(saved.stableId, Class, {}, saved.parentDeviceId);
33878
+ try {
33879
+ await this.ctx.kernel.devices.create(saved.stableId, Class, {}, saved.parentDeviceId);
33880
+ } catch (err) {
33881
+ if (!(await this.ctx.kernel.devices.getAll()).some((device) => device.stableId === saved.stableId)) throw err;
33882
+ this.ctx.logger.debug("Restore row came to life during its own dial — kept", { tags: {
33883
+ deviceId: saved.id,
33884
+ stableId: saved.stableId
33885
+ } });
33886
+ }
33864
33887
  restored.add(saved.id);
33865
33888
  };
33866
33889
  const topLevel = savedDevices.filter((saved) => saved.parentDeviceId === null);
@@ -38111,6 +38134,12 @@ Object.freeze({
38111
38134
  addonId: null,
38112
38135
  access: "create"
38113
38136
  },
38137
+ "pipelineOrchestrator.setAgentDecodeLimits": {
38138
+ capName: "pipeline-orchestrator",
38139
+ capScope: "system",
38140
+ addonId: null,
38141
+ access: "create"
38142
+ },
38114
38143
  "pipelineOrchestrator.setAgentDetectWeight": {
38115
38144
  capName: "pipeline-orchestrator",
38116
38145
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -21032,6 +21032,14 @@ var AgentPipelineSettingsSchema = object({
21032
21032
  /** Node is eligible to be the ingest / source-owner (serve the restream). */
21033
21033
  ingest: boolean().optional(),
21034
21034
  /**
21035
+ * This node's decode RAM budget, MB. Wins over the cluster
21036
+ * `nodeDecodeBudgetMb`; absent, the runner derives a share of the node's
21037
+ * own RAM unless the operator moved the cluster value (D365).
21038
+ */
21039
+ decodeBudgetMb: number().int().min(1024).max(65536).optional(),
21040
+ /** This node's live decode-worker cap. Wins over the cluster `maxLiveDecodeWorkers`. */
21041
+ maxLiveDecodeWorkers: number().int().min(1).max(32).optional(),
21042
+ /**
21035
21043
  * Operator override for the LAN host a cross-node decoder dials to reach
21036
21044
  * THIS node's restream (Cluster UI). Absent → auto-detect: a remote runner
21037
21045
  * falls back to its `CAMSTACK_HUB_URL`-derived host (the Moleculer address
@@ -21493,6 +21501,13 @@ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
21493
21501
  }), object({ success: literal(true) }), {
21494
21502
  kind: "mutation",
21495
21503
  auth: "admin"
21504
+ }), method(object({
21505
+ agentNodeId: string(),
21506
+ decodeBudgetMb: number().int().min(1024).max(65536).nullable().optional(),
21507
+ maxLiveDecodeWorkers: number().int().min(1).max(32).nullable().optional()
21508
+ }), object({ success: literal(true) }), {
21509
+ kind: "mutation",
21510
+ auth: "admin"
21496
21511
  }), method(object({
21497
21512
  agentNodeId: string(),
21498
21513
  reachableHost: string().nullable()
@@ -33861,7 +33876,15 @@ var BaseDeviceProvider = class extends BaseAddon {
33861
33876
  if (!Class) throw new Error(`no device class registered for type "${saved.type}"`);
33862
33877
  if (saved.parentDeviceId !== null && !restored.has(saved.parentDeviceId)) throw new Error(`parent device ${saved.parentDeviceId} not restored`);
33863
33878
  await this.healSavedConfig(saved, savedDevices);
33864
- await this.ctx.kernel.devices.create(saved.stableId, Class, {}, saved.parentDeviceId);
33879
+ try {
33880
+ await this.ctx.kernel.devices.create(saved.stableId, Class, {}, saved.parentDeviceId);
33881
+ } catch (err) {
33882
+ if (!(await this.ctx.kernel.devices.getAll()).some((device) => device.stableId === saved.stableId)) throw err;
33883
+ this.ctx.logger.debug("Restore row came to life during its own dial — kept", { tags: {
33884
+ deviceId: saved.id,
33885
+ stableId: saved.stableId
33886
+ } });
33887
+ }
33865
33888
  restored.add(saved.id);
33866
33889
  };
33867
33890
  const topLevel = savedDevices.filter((saved) => saved.parentDeviceId === null);
@@ -38112,6 +38135,12 @@ Object.freeze({
38112
38135
  addonId: null,
38113
38136
  access: "create"
38114
38137
  },
38138
+ "pipelineOrchestrator.setAgentDecodeLimits": {
38139
+ capName: "pipeline-orchestrator",
38140
+ capScope: "system",
38141
+ addonId: null,
38142
+ access: "create"
38143
+ },
38115
38144
  "pipelineOrchestrator.setAgentDetectWeight": {
38116
38145
  capName: "pipeline-orchestrator",
38117
38146
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-hikvision",
3
- "version": "1.2.74",
3
+ "version": "1.2.76",
4
4
  "description": "Hikvision camera device provider addon for CamStack — ISAPI over HTTP(S) with digest auth (snapshot, alarm stream, RTSP discovery)",
5
5
  "keywords": [
6
6
  "camstack",