@camstack/addon-provider-rtsp 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
@@ -4996,6 +4996,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
4996
4996
  */
4997
4997
  EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
4998
4998
  /**
4999
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
5000
+ * the detection-pipeline provider on every state change of its lazy
5001
+ * engine-provisioning machine (idle → installing → verifying → ready,
5002
+ * or → failed with a `nextRetryAt`). Payload is the
5003
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
5004
+ * node. The Pipeline page subscribes to drive a live "installing
5005
+ * OpenVINO… / ready" indicator per node without polling
5006
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
5007
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
5008
+ */
5009
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
5010
+ /**
4999
5011
  * Cluster topology snapshot. Carries the same payload returned by
5000
5012
  * `nodes.topology` (every reachable node + addons + processes).
5001
5013
  * Emitted by the hub on any agent / addon lifecycle change
@@ -10391,6 +10403,24 @@ var DetectorOutputSchema = object({
10391
10403
  inferenceMs: number(),
10392
10404
  modelId: string()
10393
10405
  });
10406
+ var EngineProvisioningSchema = object({
10407
+ runtimeId: _enum([
10408
+ "onnx",
10409
+ "openvino",
10410
+ "coreml"
10411
+ ]).nullable(),
10412
+ device: string().nullable(),
10413
+ state: _enum([
10414
+ "idle",
10415
+ "installing",
10416
+ "verifying",
10417
+ "ready",
10418
+ "failed"
10419
+ ]),
10420
+ progress: number().optional(),
10421
+ error: string().optional(),
10422
+ nextRetryAt: number().optional()
10423
+ });
10394
10424
  var PipelineStepInputSchema = lazy(() => object({
10395
10425
  addonId: string(),
10396
10426
  modelId: string(),
@@ -10459,7 +10489,7 @@ var PipelineRunResultBridge = custom();
10459
10489
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
10460
10490
  kind: "mutation",
10461
10491
  auth: "admin"
10462
- }), method(_void(), record(string(), object({
10492
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
10463
10493
  modelId: string(),
10464
10494
  settings: record(string(), unknown()).readonly()
10465
10495
  }))), method(object({ steps: record(string(), object({
@@ -15615,7 +15645,10 @@ var AgentAddonConfigSchema = object({
15615
15645
  modelId: string(),
15616
15646
  settings: record(string(), unknown()).readonly()
15617
15647
  });
15618
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
15648
+ var AgentPipelineSettingsSchema = object({
15649
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
15650
+ maxCameras: number().int().nonnegative().nullable().default(null)
15651
+ });
15619
15652
  var CameraPipelineForAgentSchema = object({
15620
15653
  steps: array(PipelineStepInputSchema).readonly(),
15621
15654
  audio: object({
@@ -15717,6 +15750,133 @@ var GlobalMetricsSchema = object({
15717
15750
  * capability providers.
15718
15751
  */
15719
15752
  var CapabilityBindingsSchema = record(string(), string());
15753
+ /** Source block — always present; derives from the stream catalog. */
15754
+ var CameraSourceStatusSchema = object({ streams: array(object({
15755
+ camStreamId: string(),
15756
+ codec: string(),
15757
+ width: number(),
15758
+ height: number(),
15759
+ fps: number(),
15760
+ kind: string()
15761
+ })).readonly() });
15762
+ /** Assignment block — always present (orchestrator-local, no remote call). */
15763
+ var CameraAssignmentStatusSchema = object({
15764
+ detectionNodeId: string().nullable(),
15765
+ decoderNodeId: string().nullable(),
15766
+ audioNodeId: string().nullable(),
15767
+ pinned: object({
15768
+ detection: boolean(),
15769
+ decoder: boolean(),
15770
+ audio: boolean()
15771
+ }),
15772
+ reasons: object({
15773
+ detection: string().optional(),
15774
+ decoder: string().optional(),
15775
+ audio: string().optional()
15776
+ })
15777
+ });
15778
+ /** Broker block — null when the broker stage is unreachable or inactive. */
15779
+ var CameraBrokerStatusSchema = object({
15780
+ profiles: array(object({
15781
+ profile: string(),
15782
+ status: string(),
15783
+ codec: string(),
15784
+ width: number(),
15785
+ height: number(),
15786
+ subscribers: number(),
15787
+ inFps: number(),
15788
+ outFps: number()
15789
+ })).readonly(),
15790
+ webrtcSessions: number(),
15791
+ rtspRestream: boolean()
15792
+ });
15793
+ /** Shared-memory ring statistics within the decoder block. */
15794
+ var CameraDecoderShmSchema = object({
15795
+ framesWritten: number(),
15796
+ getFrameHits: number(),
15797
+ getFrameMisses: number(),
15798
+ budgetMb: number()
15799
+ });
15800
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
15801
+ var CameraDecoderStatusSchema = object({
15802
+ nodeId: string(),
15803
+ formats: array(string()).readonly(),
15804
+ sessionCount: number(),
15805
+ shm: CameraDecoderShmSchema
15806
+ });
15807
+ /** Motion block — null when motion detection is not active for this device. */
15808
+ var CameraMotionStatusSchema = object({
15809
+ enabled: boolean(),
15810
+ fps: number()
15811
+ });
15812
+ /** Detection provisioning sub-block. */
15813
+ var CameraDetectionProvisioningSchema = object({
15814
+ state: _enum([
15815
+ "idle",
15816
+ "installing",
15817
+ "verifying",
15818
+ "ready",
15819
+ "failed"
15820
+ ]),
15821
+ error: string().optional()
15822
+ });
15823
+ /** Detection phase — derived from the runner's engine phase. */
15824
+ var CameraDetectionPhaseSchema = _enum([
15825
+ "idle",
15826
+ "watching",
15827
+ "active"
15828
+ ]);
15829
+ /** Detection block — null when no detection node is assigned or reachable. */
15830
+ var CameraDetectionStatusSchema = object({
15831
+ nodeId: string(),
15832
+ engine: object({
15833
+ backend: string(),
15834
+ device: string()
15835
+ }),
15836
+ phase: CameraDetectionPhaseSchema,
15837
+ configuredFps: number(),
15838
+ actualFps: number(),
15839
+ queueDepth: number(),
15840
+ avgInferenceMs: number(),
15841
+ provisioning: CameraDetectionProvisioningSchema
15842
+ });
15843
+ /** Audio block — null when no audio node is assigned or reachable. */
15844
+ var CameraAudioStatusSchema = object({
15845
+ nodeId: string(),
15846
+ enabled: boolean()
15847
+ });
15848
+ /** Recording block — null when no recording cap is active for this device. */
15849
+ var CameraRecordingStatusSchema = object({
15850
+ mode: _enum([
15851
+ "off",
15852
+ "continuous",
15853
+ "events"
15854
+ ]),
15855
+ active: boolean(),
15856
+ storageBytes: number()
15857
+ });
15858
+ /**
15859
+ * Aggregated per-camera pipeline status — server-composed, single call.
15860
+ *
15861
+ * The `assignment` and `source` blocks are always present.
15862
+ * Every other block is `null` when the stage is inactive or unreachable
15863
+ * during the bounded parallel fan-out in the orchestrator implementation.
15864
+ *
15865
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
15866
+ */
15867
+ var CameraStatusSchema = object({
15868
+ deviceId: number(),
15869
+ assignment: CameraAssignmentStatusSchema,
15870
+ source: CameraSourceStatusSchema,
15871
+ broker: CameraBrokerStatusSchema.nullable(),
15872
+ decoder: CameraDecoderStatusSchema.nullable(),
15873
+ motion: CameraMotionStatusSchema.nullable(),
15874
+ detection: CameraDetectionStatusSchema.nullable(),
15875
+ audio: CameraAudioStatusSchema.nullable(),
15876
+ recording: CameraRecordingStatusSchema.nullable(),
15877
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
15878
+ fetchedAt: number()
15879
+ });
15720
15880
  method(object({
15721
15881
  deviceId: number(),
15722
15882
  agentNodeId: string()
@@ -15784,6 +15944,12 @@ method(object({
15784
15944
  }), {
15785
15945
  kind: "mutation",
15786
15946
  auth: "admin"
15947
+ }), method(object({
15948
+ agentNodeId: string(),
15949
+ maxCameras: number().int().nonnegative().nullable()
15950
+ }), object({ success: literal(true) }), {
15951
+ kind: "mutation",
15952
+ auth: "admin"
15787
15953
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
15788
15954
  deviceId: number(),
15789
15955
  addonId: string(),
@@ -15809,7 +15975,7 @@ method(object({
15809
15975
  }), method(object({
15810
15976
  deviceId: number(),
15811
15977
  agentNodeId: string().optional()
15812
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
15978
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
15813
15979
  name: string(),
15814
15980
  description: string().optional(),
15815
15981
  config: CameraPipelineConfigSchema
@@ -21657,6 +21823,12 @@ Object.freeze({
21657
21823
  addonId: null,
21658
21824
  access: "view"
21659
21825
  },
21826
+ "pipelineExecutor.getEngineProvisioning": {
21827
+ capName: "pipeline-executor",
21828
+ capScope: "system",
21829
+ addonId: null,
21830
+ access: "view"
21831
+ },
21660
21832
  "pipelineExecutor.getGlobalPipelineConfig": {
21661
21833
  capName: "pipeline-executor",
21662
21834
  capScope: "system",
@@ -21861,6 +22033,18 @@ Object.freeze({
21861
22033
  addonId: null,
21862
22034
  access: "view"
21863
22035
  },
22036
+ "pipelineOrchestrator.getCameraStatus": {
22037
+ capName: "pipeline-orchestrator",
22038
+ capScope: "system",
22039
+ addonId: null,
22040
+ access: "view"
22041
+ },
22042
+ "pipelineOrchestrator.getCameraStatuses": {
22043
+ capName: "pipeline-orchestrator",
22044
+ capScope: "system",
22045
+ addonId: null,
22046
+ access: "view"
22047
+ },
21864
22048
  "pipelineOrchestrator.getCameraStepOverrides": {
21865
22049
  capName: "pipeline-orchestrator",
21866
22050
  capScope: "system",
@@ -21945,6 +22129,12 @@ Object.freeze({
21945
22129
  addonId: null,
21946
22130
  access: "create"
21947
22131
  },
22132
+ "pipelineOrchestrator.setAgentMaxCameras": {
22133
+ capName: "pipeline-orchestrator",
22134
+ capScope: "system",
22135
+ addonId: null,
22136
+ access: "create"
22137
+ },
21948
22138
  "pipelineOrchestrator.setCameraPipelineForAgent": {
21949
22139
  capName: "pipeline-orchestrator",
21950
22140
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -4995,6 +4995,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
4995
4995
  */
4996
4996
  EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
4997
4997
  /**
4998
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
4999
+ * the detection-pipeline provider on every state change of its lazy
5000
+ * engine-provisioning machine (idle → installing → verifying → ready,
5001
+ * or → failed with a `nextRetryAt`). Payload is the
5002
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
5003
+ * node. The Pipeline page subscribes to drive a live "installing
5004
+ * OpenVINO… / ready" indicator per node without polling
5005
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
5006
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
5007
+ */
5008
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
5009
+ /**
4998
5010
  * Cluster topology snapshot. Carries the same payload returned by
4999
5011
  * `nodes.topology` (every reachable node + addons + processes).
5000
5012
  * Emitted by the hub on any agent / addon lifecycle change
@@ -10390,6 +10402,24 @@ var DetectorOutputSchema = object({
10390
10402
  inferenceMs: number(),
10391
10403
  modelId: string()
10392
10404
  });
10405
+ var EngineProvisioningSchema = object({
10406
+ runtimeId: _enum([
10407
+ "onnx",
10408
+ "openvino",
10409
+ "coreml"
10410
+ ]).nullable(),
10411
+ device: string().nullable(),
10412
+ state: _enum([
10413
+ "idle",
10414
+ "installing",
10415
+ "verifying",
10416
+ "ready",
10417
+ "failed"
10418
+ ]),
10419
+ progress: number().optional(),
10420
+ error: string().optional(),
10421
+ nextRetryAt: number().optional()
10422
+ });
10393
10423
  var PipelineStepInputSchema = lazy(() => object({
10394
10424
  addonId: string(),
10395
10425
  modelId: string(),
@@ -10458,7 +10488,7 @@ var PipelineRunResultBridge = custom();
10458
10488
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
10459
10489
  kind: "mutation",
10460
10490
  auth: "admin"
10461
- }), method(_void(), record(string(), object({
10491
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
10462
10492
  modelId: string(),
10463
10493
  settings: record(string(), unknown()).readonly()
10464
10494
  }))), method(object({ steps: record(string(), object({
@@ -15614,7 +15644,10 @@ var AgentAddonConfigSchema = object({
15614
15644
  modelId: string(),
15615
15645
  settings: record(string(), unknown()).readonly()
15616
15646
  });
15617
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
15647
+ var AgentPipelineSettingsSchema = object({
15648
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
15649
+ maxCameras: number().int().nonnegative().nullable().default(null)
15650
+ });
15618
15651
  var CameraPipelineForAgentSchema = object({
15619
15652
  steps: array(PipelineStepInputSchema).readonly(),
15620
15653
  audio: object({
@@ -15716,6 +15749,133 @@ var GlobalMetricsSchema = object({
15716
15749
  * capability providers.
15717
15750
  */
15718
15751
  var CapabilityBindingsSchema = record(string(), string());
15752
+ /** Source block — always present; derives from the stream catalog. */
15753
+ var CameraSourceStatusSchema = object({ streams: array(object({
15754
+ camStreamId: string(),
15755
+ codec: string(),
15756
+ width: number(),
15757
+ height: number(),
15758
+ fps: number(),
15759
+ kind: string()
15760
+ })).readonly() });
15761
+ /** Assignment block — always present (orchestrator-local, no remote call). */
15762
+ var CameraAssignmentStatusSchema = object({
15763
+ detectionNodeId: string().nullable(),
15764
+ decoderNodeId: string().nullable(),
15765
+ audioNodeId: string().nullable(),
15766
+ pinned: object({
15767
+ detection: boolean(),
15768
+ decoder: boolean(),
15769
+ audio: boolean()
15770
+ }),
15771
+ reasons: object({
15772
+ detection: string().optional(),
15773
+ decoder: string().optional(),
15774
+ audio: string().optional()
15775
+ })
15776
+ });
15777
+ /** Broker block — null when the broker stage is unreachable or inactive. */
15778
+ var CameraBrokerStatusSchema = object({
15779
+ profiles: array(object({
15780
+ profile: string(),
15781
+ status: string(),
15782
+ codec: string(),
15783
+ width: number(),
15784
+ height: number(),
15785
+ subscribers: number(),
15786
+ inFps: number(),
15787
+ outFps: number()
15788
+ })).readonly(),
15789
+ webrtcSessions: number(),
15790
+ rtspRestream: boolean()
15791
+ });
15792
+ /** Shared-memory ring statistics within the decoder block. */
15793
+ var CameraDecoderShmSchema = object({
15794
+ framesWritten: number(),
15795
+ getFrameHits: number(),
15796
+ getFrameMisses: number(),
15797
+ budgetMb: number()
15798
+ });
15799
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
15800
+ var CameraDecoderStatusSchema = object({
15801
+ nodeId: string(),
15802
+ formats: array(string()).readonly(),
15803
+ sessionCount: number(),
15804
+ shm: CameraDecoderShmSchema
15805
+ });
15806
+ /** Motion block — null when motion detection is not active for this device. */
15807
+ var CameraMotionStatusSchema = object({
15808
+ enabled: boolean(),
15809
+ fps: number()
15810
+ });
15811
+ /** Detection provisioning sub-block. */
15812
+ var CameraDetectionProvisioningSchema = object({
15813
+ state: _enum([
15814
+ "idle",
15815
+ "installing",
15816
+ "verifying",
15817
+ "ready",
15818
+ "failed"
15819
+ ]),
15820
+ error: string().optional()
15821
+ });
15822
+ /** Detection phase — derived from the runner's engine phase. */
15823
+ var CameraDetectionPhaseSchema = _enum([
15824
+ "idle",
15825
+ "watching",
15826
+ "active"
15827
+ ]);
15828
+ /** Detection block — null when no detection node is assigned or reachable. */
15829
+ var CameraDetectionStatusSchema = object({
15830
+ nodeId: string(),
15831
+ engine: object({
15832
+ backend: string(),
15833
+ device: string()
15834
+ }),
15835
+ phase: CameraDetectionPhaseSchema,
15836
+ configuredFps: number(),
15837
+ actualFps: number(),
15838
+ queueDepth: number(),
15839
+ avgInferenceMs: number(),
15840
+ provisioning: CameraDetectionProvisioningSchema
15841
+ });
15842
+ /** Audio block — null when no audio node is assigned or reachable. */
15843
+ var CameraAudioStatusSchema = object({
15844
+ nodeId: string(),
15845
+ enabled: boolean()
15846
+ });
15847
+ /** Recording block — null when no recording cap is active for this device. */
15848
+ var CameraRecordingStatusSchema = object({
15849
+ mode: _enum([
15850
+ "off",
15851
+ "continuous",
15852
+ "events"
15853
+ ]),
15854
+ active: boolean(),
15855
+ storageBytes: number()
15856
+ });
15857
+ /**
15858
+ * Aggregated per-camera pipeline status — server-composed, single call.
15859
+ *
15860
+ * The `assignment` and `source` blocks are always present.
15861
+ * Every other block is `null` when the stage is inactive or unreachable
15862
+ * during the bounded parallel fan-out in the orchestrator implementation.
15863
+ *
15864
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
15865
+ */
15866
+ var CameraStatusSchema = object({
15867
+ deviceId: number(),
15868
+ assignment: CameraAssignmentStatusSchema,
15869
+ source: CameraSourceStatusSchema,
15870
+ broker: CameraBrokerStatusSchema.nullable(),
15871
+ decoder: CameraDecoderStatusSchema.nullable(),
15872
+ motion: CameraMotionStatusSchema.nullable(),
15873
+ detection: CameraDetectionStatusSchema.nullable(),
15874
+ audio: CameraAudioStatusSchema.nullable(),
15875
+ recording: CameraRecordingStatusSchema.nullable(),
15876
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
15877
+ fetchedAt: number()
15878
+ });
15719
15879
  method(object({
15720
15880
  deviceId: number(),
15721
15881
  agentNodeId: string()
@@ -15783,6 +15943,12 @@ method(object({
15783
15943
  }), {
15784
15944
  kind: "mutation",
15785
15945
  auth: "admin"
15946
+ }), method(object({
15947
+ agentNodeId: string(),
15948
+ maxCameras: number().int().nonnegative().nullable()
15949
+ }), object({ success: literal(true) }), {
15950
+ kind: "mutation",
15951
+ auth: "admin"
15786
15952
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
15787
15953
  deviceId: number(),
15788
15954
  addonId: string(),
@@ -15808,7 +15974,7 @@ method(object({
15808
15974
  }), method(object({
15809
15975
  deviceId: number(),
15810
15976
  agentNodeId: string().optional()
15811
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
15977
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
15812
15978
  name: string(),
15813
15979
  description: string().optional(),
15814
15980
  config: CameraPipelineConfigSchema
@@ -21656,6 +21822,12 @@ Object.freeze({
21656
21822
  addonId: null,
21657
21823
  access: "view"
21658
21824
  },
21825
+ "pipelineExecutor.getEngineProvisioning": {
21826
+ capName: "pipeline-executor",
21827
+ capScope: "system",
21828
+ addonId: null,
21829
+ access: "view"
21830
+ },
21659
21831
  "pipelineExecutor.getGlobalPipelineConfig": {
21660
21832
  capName: "pipeline-executor",
21661
21833
  capScope: "system",
@@ -21860,6 +22032,18 @@ Object.freeze({
21860
22032
  addonId: null,
21861
22033
  access: "view"
21862
22034
  },
22035
+ "pipelineOrchestrator.getCameraStatus": {
22036
+ capName: "pipeline-orchestrator",
22037
+ capScope: "system",
22038
+ addonId: null,
22039
+ access: "view"
22040
+ },
22041
+ "pipelineOrchestrator.getCameraStatuses": {
22042
+ capName: "pipeline-orchestrator",
22043
+ capScope: "system",
22044
+ addonId: null,
22045
+ access: "view"
22046
+ },
21863
22047
  "pipelineOrchestrator.getCameraStepOverrides": {
21864
22048
  capName: "pipeline-orchestrator",
21865
22049
  capScope: "system",
@@ -21944,6 +22128,12 @@ Object.freeze({
21944
22128
  addonId: null,
21945
22129
  access: "create"
21946
22130
  },
22131
+ "pipelineOrchestrator.setAgentMaxCameras": {
22132
+ capName: "pipeline-orchestrator",
22133
+ capScope: "system",
22134
+ addonId: null,
22135
+ access: "create"
22136
+ },
21947
22137
  "pipelineOrchestrator.setCameraPipelineForAgent": {
21948
22138
  capName: "pipeline-orchestrator",
21949
22139
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-rtsp",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Generic RTSP camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",