@camstack/addon-provider-hikvision 1.0.4 → 1.0.5

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
@@ -4985,6 +4985,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
4985
4985
  */
4986
4986
  EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
4987
4987
  /**
4988
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
4989
+ * the detection-pipeline provider on every state change of its lazy
4990
+ * engine-provisioning machine (idle → installing → verifying → ready,
4991
+ * or → failed with a `nextRetryAt`). Payload is the
4992
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
4993
+ * node. The Pipeline page subscribes to drive a live "installing
4994
+ * OpenVINO… / ready" indicator per node without polling
4995
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
4996
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
4997
+ */
4998
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
4999
+ /**
4988
5000
  * Cluster topology snapshot. Carries the same payload returned by
4989
5001
  * `nodes.topology` (every reachable node + addons + processes).
4990
5002
  * Emitted by the hub on any agent / addon lifecycle change
@@ -10562,6 +10574,24 @@ var DetectorOutputSchema = object({
10562
10574
  inferenceMs: number(),
10563
10575
  modelId: string()
10564
10576
  });
10577
+ var EngineProvisioningSchema = object({
10578
+ runtimeId: _enum([
10579
+ "onnx",
10580
+ "openvino",
10581
+ "coreml"
10582
+ ]).nullable(),
10583
+ device: string().nullable(),
10584
+ state: _enum([
10585
+ "idle",
10586
+ "installing",
10587
+ "verifying",
10588
+ "ready",
10589
+ "failed"
10590
+ ]),
10591
+ progress: number().optional(),
10592
+ error: string().optional(),
10593
+ nextRetryAt: number().optional()
10594
+ });
10565
10595
  var PipelineStepInputSchema = lazy(() => object({
10566
10596
  addonId: string(),
10567
10597
  modelId: string(),
@@ -10630,7 +10660,7 @@ var PipelineRunResultBridge = custom();
10630
10660
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
10631
10661
  kind: "mutation",
10632
10662
  auth: "admin"
10633
- }), method(_void(), record(string(), object({
10663
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
10634
10664
  modelId: string(),
10635
10665
  settings: record(string(), unknown()).readonly()
10636
10666
  }))), method(object({ steps: record(string(), object({
@@ -15798,7 +15828,10 @@ var AgentAddonConfigSchema = object({
15798
15828
  modelId: string(),
15799
15829
  settings: record(string(), unknown()).readonly()
15800
15830
  });
15801
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
15831
+ var AgentPipelineSettingsSchema = object({
15832
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
15833
+ maxCameras: number().int().nonnegative().nullable().default(null)
15834
+ });
15802
15835
  var CameraPipelineForAgentSchema = object({
15803
15836
  steps: array(PipelineStepInputSchema).readonly(),
15804
15837
  audio: object({
@@ -15900,6 +15933,133 @@ var GlobalMetricsSchema = object({
15900
15933
  * capability providers.
15901
15934
  */
15902
15935
  var CapabilityBindingsSchema = record(string(), string());
15936
+ /** Source block — always present; derives from the stream catalog. */
15937
+ var CameraSourceStatusSchema = object({ streams: array(object({
15938
+ camStreamId: string(),
15939
+ codec: string(),
15940
+ width: number(),
15941
+ height: number(),
15942
+ fps: number(),
15943
+ kind: string()
15944
+ })).readonly() });
15945
+ /** Assignment block — always present (orchestrator-local, no remote call). */
15946
+ var CameraAssignmentStatusSchema = object({
15947
+ detectionNodeId: string().nullable(),
15948
+ decoderNodeId: string().nullable(),
15949
+ audioNodeId: string().nullable(),
15950
+ pinned: object({
15951
+ detection: boolean(),
15952
+ decoder: boolean(),
15953
+ audio: boolean()
15954
+ }),
15955
+ reasons: object({
15956
+ detection: string().optional(),
15957
+ decoder: string().optional(),
15958
+ audio: string().optional()
15959
+ })
15960
+ });
15961
+ /** Broker block — null when the broker stage is unreachable or inactive. */
15962
+ var CameraBrokerStatusSchema = object({
15963
+ profiles: array(object({
15964
+ profile: string(),
15965
+ status: string(),
15966
+ codec: string(),
15967
+ width: number(),
15968
+ height: number(),
15969
+ subscribers: number(),
15970
+ inFps: number(),
15971
+ outFps: number()
15972
+ })).readonly(),
15973
+ webrtcSessions: number(),
15974
+ rtspRestream: boolean()
15975
+ });
15976
+ /** Shared-memory ring statistics within the decoder block. */
15977
+ var CameraDecoderShmSchema = object({
15978
+ framesWritten: number(),
15979
+ getFrameHits: number(),
15980
+ getFrameMisses: number(),
15981
+ budgetMb: number()
15982
+ });
15983
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
15984
+ var CameraDecoderStatusSchema = object({
15985
+ nodeId: string(),
15986
+ formats: array(string()).readonly(),
15987
+ sessionCount: number(),
15988
+ shm: CameraDecoderShmSchema
15989
+ });
15990
+ /** Motion block — null when motion detection is not active for this device. */
15991
+ var CameraMotionStatusSchema = object({
15992
+ enabled: boolean(),
15993
+ fps: number()
15994
+ });
15995
+ /** Detection provisioning sub-block. */
15996
+ var CameraDetectionProvisioningSchema = object({
15997
+ state: _enum([
15998
+ "idle",
15999
+ "installing",
16000
+ "verifying",
16001
+ "ready",
16002
+ "failed"
16003
+ ]),
16004
+ error: string().optional()
16005
+ });
16006
+ /** Detection phase — derived from the runner's engine phase. */
16007
+ var CameraDetectionPhaseSchema = _enum([
16008
+ "idle",
16009
+ "watching",
16010
+ "active"
16011
+ ]);
16012
+ /** Detection block — null when no detection node is assigned or reachable. */
16013
+ var CameraDetectionStatusSchema = object({
16014
+ nodeId: string(),
16015
+ engine: object({
16016
+ backend: string(),
16017
+ device: string()
16018
+ }),
16019
+ phase: CameraDetectionPhaseSchema,
16020
+ configuredFps: number(),
16021
+ actualFps: number(),
16022
+ queueDepth: number(),
16023
+ avgInferenceMs: number(),
16024
+ provisioning: CameraDetectionProvisioningSchema
16025
+ });
16026
+ /** Audio block — null when no audio node is assigned or reachable. */
16027
+ var CameraAudioStatusSchema = object({
16028
+ nodeId: string(),
16029
+ enabled: boolean()
16030
+ });
16031
+ /** Recording block — null when no recording cap is active for this device. */
16032
+ var CameraRecordingStatusSchema = object({
16033
+ mode: _enum([
16034
+ "off",
16035
+ "continuous",
16036
+ "events"
16037
+ ]),
16038
+ active: boolean(),
16039
+ storageBytes: number()
16040
+ });
16041
+ /**
16042
+ * Aggregated per-camera pipeline status — server-composed, single call.
16043
+ *
16044
+ * The `assignment` and `source` blocks are always present.
16045
+ * Every other block is `null` when the stage is inactive or unreachable
16046
+ * during the bounded parallel fan-out in the orchestrator implementation.
16047
+ *
16048
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
16049
+ */
16050
+ var CameraStatusSchema = object({
16051
+ deviceId: number(),
16052
+ assignment: CameraAssignmentStatusSchema,
16053
+ source: CameraSourceStatusSchema,
16054
+ broker: CameraBrokerStatusSchema.nullable(),
16055
+ decoder: CameraDecoderStatusSchema.nullable(),
16056
+ motion: CameraMotionStatusSchema.nullable(),
16057
+ detection: CameraDetectionStatusSchema.nullable(),
16058
+ audio: CameraAudioStatusSchema.nullable(),
16059
+ recording: CameraRecordingStatusSchema.nullable(),
16060
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
16061
+ fetchedAt: number()
16062
+ });
15903
16063
  method(object({
15904
16064
  deviceId: number(),
15905
16065
  agentNodeId: string()
@@ -15967,6 +16127,12 @@ method(object({
15967
16127
  }), {
15968
16128
  kind: "mutation",
15969
16129
  auth: "admin"
16130
+ }), method(object({
16131
+ agentNodeId: string(),
16132
+ maxCameras: number().int().nonnegative().nullable()
16133
+ }), object({ success: literal(true) }), {
16134
+ kind: "mutation",
16135
+ auth: "admin"
15970
16136
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
15971
16137
  deviceId: number(),
15972
16138
  addonId: string(),
@@ -15992,7 +16158,7 @@ method(object({
15992
16158
  }), method(object({
15993
16159
  deviceId: number(),
15994
16160
  agentNodeId: string().optional()
15995
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
16161
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
15996
16162
  name: string(),
15997
16163
  description: string().optional(),
15998
16164
  config: CameraPipelineConfigSchema
@@ -22202,6 +22368,12 @@ Object.freeze({
22202
22368
  addonId: null,
22203
22369
  access: "view"
22204
22370
  },
22371
+ "pipelineExecutor.getEngineProvisioning": {
22372
+ capName: "pipeline-executor",
22373
+ capScope: "system",
22374
+ addonId: null,
22375
+ access: "view"
22376
+ },
22205
22377
  "pipelineExecutor.getGlobalPipelineConfig": {
22206
22378
  capName: "pipeline-executor",
22207
22379
  capScope: "system",
@@ -22406,6 +22578,18 @@ Object.freeze({
22406
22578
  addonId: null,
22407
22579
  access: "view"
22408
22580
  },
22581
+ "pipelineOrchestrator.getCameraStatus": {
22582
+ capName: "pipeline-orchestrator",
22583
+ capScope: "system",
22584
+ addonId: null,
22585
+ access: "view"
22586
+ },
22587
+ "pipelineOrchestrator.getCameraStatuses": {
22588
+ capName: "pipeline-orchestrator",
22589
+ capScope: "system",
22590
+ addonId: null,
22591
+ access: "view"
22592
+ },
22409
22593
  "pipelineOrchestrator.getCameraStepOverrides": {
22410
22594
  capName: "pipeline-orchestrator",
22411
22595
  capScope: "system",
@@ -22490,6 +22674,12 @@ Object.freeze({
22490
22674
  addonId: null,
22491
22675
  access: "create"
22492
22676
  },
22677
+ "pipelineOrchestrator.setAgentMaxCameras": {
22678
+ capName: "pipeline-orchestrator",
22679
+ capScope: "system",
22680
+ addonId: null,
22681
+ access: "create"
22682
+ },
22493
22683
  "pipelineOrchestrator.setCameraPipelineForAgent": {
22494
22684
  capName: "pipeline-orchestrator",
22495
22685
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -4984,6 +4984,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
4984
4984
  */
4985
4985
  EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
4986
4986
  /**
4987
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
4988
+ * the detection-pipeline provider on every state change of its lazy
4989
+ * engine-provisioning machine (idle → installing → verifying → ready,
4990
+ * or → failed with a `nextRetryAt`). Payload is the
4991
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
4992
+ * node. The Pipeline page subscribes to drive a live "installing
4993
+ * OpenVINO… / ready" indicator per node without polling
4994
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
4995
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
4996
+ */
4997
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
4998
+ /**
4987
4999
  * Cluster topology snapshot. Carries the same payload returned by
4988
5000
  * `nodes.topology` (every reachable node + addons + processes).
4989
5001
  * Emitted by the hub on any agent / addon lifecycle change
@@ -10561,6 +10573,24 @@ var DetectorOutputSchema = object({
10561
10573
  inferenceMs: number(),
10562
10574
  modelId: string()
10563
10575
  });
10576
+ var EngineProvisioningSchema = object({
10577
+ runtimeId: _enum([
10578
+ "onnx",
10579
+ "openvino",
10580
+ "coreml"
10581
+ ]).nullable(),
10582
+ device: string().nullable(),
10583
+ state: _enum([
10584
+ "idle",
10585
+ "installing",
10586
+ "verifying",
10587
+ "ready",
10588
+ "failed"
10589
+ ]),
10590
+ progress: number().optional(),
10591
+ error: string().optional(),
10592
+ nextRetryAt: number().optional()
10593
+ });
10564
10594
  var PipelineStepInputSchema = lazy(() => object({
10565
10595
  addonId: string(),
10566
10596
  modelId: string(),
@@ -10629,7 +10659,7 @@ var PipelineRunResultBridge = custom();
10629
10659
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
10630
10660
  kind: "mutation",
10631
10661
  auth: "admin"
10632
- }), method(_void(), record(string(), object({
10662
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
10633
10663
  modelId: string(),
10634
10664
  settings: record(string(), unknown()).readonly()
10635
10665
  }))), method(object({ steps: record(string(), object({
@@ -15797,7 +15827,10 @@ var AgentAddonConfigSchema = object({
15797
15827
  modelId: string(),
15798
15828
  settings: record(string(), unknown()).readonly()
15799
15829
  });
15800
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
15830
+ var AgentPipelineSettingsSchema = object({
15831
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
15832
+ maxCameras: number().int().nonnegative().nullable().default(null)
15833
+ });
15801
15834
  var CameraPipelineForAgentSchema = object({
15802
15835
  steps: array(PipelineStepInputSchema).readonly(),
15803
15836
  audio: object({
@@ -15899,6 +15932,133 @@ var GlobalMetricsSchema = object({
15899
15932
  * capability providers.
15900
15933
  */
15901
15934
  var CapabilityBindingsSchema = record(string(), string());
15935
+ /** Source block — always present; derives from the stream catalog. */
15936
+ var CameraSourceStatusSchema = object({ streams: array(object({
15937
+ camStreamId: string(),
15938
+ codec: string(),
15939
+ width: number(),
15940
+ height: number(),
15941
+ fps: number(),
15942
+ kind: string()
15943
+ })).readonly() });
15944
+ /** Assignment block — always present (orchestrator-local, no remote call). */
15945
+ var CameraAssignmentStatusSchema = object({
15946
+ detectionNodeId: string().nullable(),
15947
+ decoderNodeId: string().nullable(),
15948
+ audioNodeId: string().nullable(),
15949
+ pinned: object({
15950
+ detection: boolean(),
15951
+ decoder: boolean(),
15952
+ audio: boolean()
15953
+ }),
15954
+ reasons: object({
15955
+ detection: string().optional(),
15956
+ decoder: string().optional(),
15957
+ audio: string().optional()
15958
+ })
15959
+ });
15960
+ /** Broker block — null when the broker stage is unreachable or inactive. */
15961
+ var CameraBrokerStatusSchema = object({
15962
+ profiles: array(object({
15963
+ profile: string(),
15964
+ status: string(),
15965
+ codec: string(),
15966
+ width: number(),
15967
+ height: number(),
15968
+ subscribers: number(),
15969
+ inFps: number(),
15970
+ outFps: number()
15971
+ })).readonly(),
15972
+ webrtcSessions: number(),
15973
+ rtspRestream: boolean()
15974
+ });
15975
+ /** Shared-memory ring statistics within the decoder block. */
15976
+ var CameraDecoderShmSchema = object({
15977
+ framesWritten: number(),
15978
+ getFrameHits: number(),
15979
+ getFrameMisses: number(),
15980
+ budgetMb: number()
15981
+ });
15982
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
15983
+ var CameraDecoderStatusSchema = object({
15984
+ nodeId: string(),
15985
+ formats: array(string()).readonly(),
15986
+ sessionCount: number(),
15987
+ shm: CameraDecoderShmSchema
15988
+ });
15989
+ /** Motion block — null when motion detection is not active for this device. */
15990
+ var CameraMotionStatusSchema = object({
15991
+ enabled: boolean(),
15992
+ fps: number()
15993
+ });
15994
+ /** Detection provisioning sub-block. */
15995
+ var CameraDetectionProvisioningSchema = object({
15996
+ state: _enum([
15997
+ "idle",
15998
+ "installing",
15999
+ "verifying",
16000
+ "ready",
16001
+ "failed"
16002
+ ]),
16003
+ error: string().optional()
16004
+ });
16005
+ /** Detection phase — derived from the runner's engine phase. */
16006
+ var CameraDetectionPhaseSchema = _enum([
16007
+ "idle",
16008
+ "watching",
16009
+ "active"
16010
+ ]);
16011
+ /** Detection block — null when no detection node is assigned or reachable. */
16012
+ var CameraDetectionStatusSchema = object({
16013
+ nodeId: string(),
16014
+ engine: object({
16015
+ backend: string(),
16016
+ device: string()
16017
+ }),
16018
+ phase: CameraDetectionPhaseSchema,
16019
+ configuredFps: number(),
16020
+ actualFps: number(),
16021
+ queueDepth: number(),
16022
+ avgInferenceMs: number(),
16023
+ provisioning: CameraDetectionProvisioningSchema
16024
+ });
16025
+ /** Audio block — null when no audio node is assigned or reachable. */
16026
+ var CameraAudioStatusSchema = object({
16027
+ nodeId: string(),
16028
+ enabled: boolean()
16029
+ });
16030
+ /** Recording block — null when no recording cap is active for this device. */
16031
+ var CameraRecordingStatusSchema = object({
16032
+ mode: _enum([
16033
+ "off",
16034
+ "continuous",
16035
+ "events"
16036
+ ]),
16037
+ active: boolean(),
16038
+ storageBytes: number()
16039
+ });
16040
+ /**
16041
+ * Aggregated per-camera pipeline status — server-composed, single call.
16042
+ *
16043
+ * The `assignment` and `source` blocks are always present.
16044
+ * Every other block is `null` when the stage is inactive or unreachable
16045
+ * during the bounded parallel fan-out in the orchestrator implementation.
16046
+ *
16047
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
16048
+ */
16049
+ var CameraStatusSchema = object({
16050
+ deviceId: number(),
16051
+ assignment: CameraAssignmentStatusSchema,
16052
+ source: CameraSourceStatusSchema,
16053
+ broker: CameraBrokerStatusSchema.nullable(),
16054
+ decoder: CameraDecoderStatusSchema.nullable(),
16055
+ motion: CameraMotionStatusSchema.nullable(),
16056
+ detection: CameraDetectionStatusSchema.nullable(),
16057
+ audio: CameraAudioStatusSchema.nullable(),
16058
+ recording: CameraRecordingStatusSchema.nullable(),
16059
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
16060
+ fetchedAt: number()
16061
+ });
15902
16062
  method(object({
15903
16063
  deviceId: number(),
15904
16064
  agentNodeId: string()
@@ -15966,6 +16126,12 @@ method(object({
15966
16126
  }), {
15967
16127
  kind: "mutation",
15968
16128
  auth: "admin"
16129
+ }), method(object({
16130
+ agentNodeId: string(),
16131
+ maxCameras: number().int().nonnegative().nullable()
16132
+ }), object({ success: literal(true) }), {
16133
+ kind: "mutation",
16134
+ auth: "admin"
15969
16135
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
15970
16136
  deviceId: number(),
15971
16137
  addonId: string(),
@@ -15991,7 +16157,7 @@ method(object({
15991
16157
  }), method(object({
15992
16158
  deviceId: number(),
15993
16159
  agentNodeId: string().optional()
15994
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
16160
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
15995
16161
  name: string(),
15996
16162
  description: string().optional(),
15997
16163
  config: CameraPipelineConfigSchema
@@ -22201,6 +22367,12 @@ Object.freeze({
22201
22367
  addonId: null,
22202
22368
  access: "view"
22203
22369
  },
22370
+ "pipelineExecutor.getEngineProvisioning": {
22371
+ capName: "pipeline-executor",
22372
+ capScope: "system",
22373
+ addonId: null,
22374
+ access: "view"
22375
+ },
22204
22376
  "pipelineExecutor.getGlobalPipelineConfig": {
22205
22377
  capName: "pipeline-executor",
22206
22378
  capScope: "system",
@@ -22405,6 +22577,18 @@ Object.freeze({
22405
22577
  addonId: null,
22406
22578
  access: "view"
22407
22579
  },
22580
+ "pipelineOrchestrator.getCameraStatus": {
22581
+ capName: "pipeline-orchestrator",
22582
+ capScope: "system",
22583
+ addonId: null,
22584
+ access: "view"
22585
+ },
22586
+ "pipelineOrchestrator.getCameraStatuses": {
22587
+ capName: "pipeline-orchestrator",
22588
+ capScope: "system",
22589
+ addonId: null,
22590
+ access: "view"
22591
+ },
22408
22592
  "pipelineOrchestrator.getCameraStepOverrides": {
22409
22593
  capName: "pipeline-orchestrator",
22410
22594
  capScope: "system",
@@ -22489,6 +22673,12 @@ Object.freeze({
22489
22673
  addonId: null,
22490
22674
  access: "create"
22491
22675
  },
22676
+ "pipelineOrchestrator.setAgentMaxCameras": {
22677
+ capName: "pipeline-orchestrator",
22678
+ capScope: "system",
22679
+ addonId: null,
22680
+ access: "create"
22681
+ },
22492
22682
  "pipelineOrchestrator.setCameraPipelineForAgent": {
22493
22683
  capName: "pipeline-orchestrator",
22494
22684
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-hikvision",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
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",