@camstack/addon-provider-onvif 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
@@ -9263,6 +9275,24 @@ var DetectorOutputSchema = object({
9263
9275
  inferenceMs: number(),
9264
9276
  modelId: string()
9265
9277
  });
9278
+ var EngineProvisioningSchema = object({
9279
+ runtimeId: _enum([
9280
+ "onnx",
9281
+ "openvino",
9282
+ "coreml"
9283
+ ]).nullable(),
9284
+ device: string().nullable(),
9285
+ state: _enum([
9286
+ "idle",
9287
+ "installing",
9288
+ "verifying",
9289
+ "ready",
9290
+ "failed"
9291
+ ]),
9292
+ progress: number().optional(),
9293
+ error: string().optional(),
9294
+ nextRetryAt: number().optional()
9295
+ });
9266
9296
  var PipelineStepInputSchema = lazy(() => object({
9267
9297
  addonId: string(),
9268
9298
  modelId: string(),
@@ -9331,7 +9361,7 @@ var PipelineRunResultBridge = custom();
9331
9361
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
9332
9362
  kind: "mutation",
9333
9363
  auth: "admin"
9334
- }), method(_void(), record(string(), object({
9364
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
9335
9365
  modelId: string(),
9336
9366
  settings: record(string(), unknown()).readonly()
9337
9367
  }))), method(object({ steps: record(string(), object({
@@ -13178,7 +13208,10 @@ var AgentAddonConfigSchema = object({
13178
13208
  modelId: string(),
13179
13209
  settings: record(string(), unknown()).readonly()
13180
13210
  });
13181
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
13211
+ var AgentPipelineSettingsSchema = object({
13212
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
13213
+ maxCameras: number().int().nonnegative().nullable().default(null)
13214
+ });
13182
13215
  var CameraPipelineForAgentSchema = object({
13183
13216
  steps: array(PipelineStepInputSchema).readonly(),
13184
13217
  audio: object({
@@ -13280,6 +13313,133 @@ var GlobalMetricsSchema = object({
13280
13313
  * capability providers.
13281
13314
  */
13282
13315
  var CapabilityBindingsSchema = record(string(), string());
13316
+ /** Source block — always present; derives from the stream catalog. */
13317
+ var CameraSourceStatusSchema = object({ streams: array(object({
13318
+ camStreamId: string(),
13319
+ codec: string(),
13320
+ width: number(),
13321
+ height: number(),
13322
+ fps: number(),
13323
+ kind: string()
13324
+ })).readonly() });
13325
+ /** Assignment block — always present (orchestrator-local, no remote call). */
13326
+ var CameraAssignmentStatusSchema = object({
13327
+ detectionNodeId: string().nullable(),
13328
+ decoderNodeId: string().nullable(),
13329
+ audioNodeId: string().nullable(),
13330
+ pinned: object({
13331
+ detection: boolean(),
13332
+ decoder: boolean(),
13333
+ audio: boolean()
13334
+ }),
13335
+ reasons: object({
13336
+ detection: string().optional(),
13337
+ decoder: string().optional(),
13338
+ audio: string().optional()
13339
+ })
13340
+ });
13341
+ /** Broker block — null when the broker stage is unreachable or inactive. */
13342
+ var CameraBrokerStatusSchema = object({
13343
+ profiles: array(object({
13344
+ profile: string(),
13345
+ status: string(),
13346
+ codec: string(),
13347
+ width: number(),
13348
+ height: number(),
13349
+ subscribers: number(),
13350
+ inFps: number(),
13351
+ outFps: number()
13352
+ })).readonly(),
13353
+ webrtcSessions: number(),
13354
+ rtspRestream: boolean()
13355
+ });
13356
+ /** Shared-memory ring statistics within the decoder block. */
13357
+ var CameraDecoderShmSchema = object({
13358
+ framesWritten: number(),
13359
+ getFrameHits: number(),
13360
+ getFrameMisses: number(),
13361
+ budgetMb: number()
13362
+ });
13363
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
13364
+ var CameraDecoderStatusSchema = object({
13365
+ nodeId: string(),
13366
+ formats: array(string()).readonly(),
13367
+ sessionCount: number(),
13368
+ shm: CameraDecoderShmSchema
13369
+ });
13370
+ /** Motion block — null when motion detection is not active for this device. */
13371
+ var CameraMotionStatusSchema = object({
13372
+ enabled: boolean(),
13373
+ fps: number()
13374
+ });
13375
+ /** Detection provisioning sub-block. */
13376
+ var CameraDetectionProvisioningSchema = object({
13377
+ state: _enum([
13378
+ "idle",
13379
+ "installing",
13380
+ "verifying",
13381
+ "ready",
13382
+ "failed"
13383
+ ]),
13384
+ error: string().optional()
13385
+ });
13386
+ /** Detection phase — derived from the runner's engine phase. */
13387
+ var CameraDetectionPhaseSchema = _enum([
13388
+ "idle",
13389
+ "watching",
13390
+ "active"
13391
+ ]);
13392
+ /** Detection block — null when no detection node is assigned or reachable. */
13393
+ var CameraDetectionStatusSchema = object({
13394
+ nodeId: string(),
13395
+ engine: object({
13396
+ backend: string(),
13397
+ device: string()
13398
+ }),
13399
+ phase: CameraDetectionPhaseSchema,
13400
+ configuredFps: number(),
13401
+ actualFps: number(),
13402
+ queueDepth: number(),
13403
+ avgInferenceMs: number(),
13404
+ provisioning: CameraDetectionProvisioningSchema
13405
+ });
13406
+ /** Audio block — null when no audio node is assigned or reachable. */
13407
+ var CameraAudioStatusSchema = object({
13408
+ nodeId: string(),
13409
+ enabled: boolean()
13410
+ });
13411
+ /** Recording block — null when no recording cap is active for this device. */
13412
+ var CameraRecordingStatusSchema = object({
13413
+ mode: _enum([
13414
+ "off",
13415
+ "continuous",
13416
+ "events"
13417
+ ]),
13418
+ active: boolean(),
13419
+ storageBytes: number()
13420
+ });
13421
+ /**
13422
+ * Aggregated per-camera pipeline status — server-composed, single call.
13423
+ *
13424
+ * The `assignment` and `source` blocks are always present.
13425
+ * Every other block is `null` when the stage is inactive or unreachable
13426
+ * during the bounded parallel fan-out in the orchestrator implementation.
13427
+ *
13428
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
13429
+ */
13430
+ var CameraStatusSchema = object({
13431
+ deviceId: number(),
13432
+ assignment: CameraAssignmentStatusSchema,
13433
+ source: CameraSourceStatusSchema,
13434
+ broker: CameraBrokerStatusSchema.nullable(),
13435
+ decoder: CameraDecoderStatusSchema.nullable(),
13436
+ motion: CameraMotionStatusSchema.nullable(),
13437
+ detection: CameraDetectionStatusSchema.nullable(),
13438
+ audio: CameraAudioStatusSchema.nullable(),
13439
+ recording: CameraRecordingStatusSchema.nullable(),
13440
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
13441
+ fetchedAt: number()
13442
+ });
13283
13443
  method(object({
13284
13444
  deviceId: number(),
13285
13445
  agentNodeId: string()
@@ -13347,6 +13507,12 @@ method(object({
13347
13507
  }), {
13348
13508
  kind: "mutation",
13349
13509
  auth: "admin"
13510
+ }), method(object({
13511
+ agentNodeId: string(),
13512
+ maxCameras: number().int().nonnegative().nullable()
13513
+ }), object({ success: literal(true) }), {
13514
+ kind: "mutation",
13515
+ auth: "admin"
13350
13516
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
13351
13517
  deviceId: number(),
13352
13518
  addonId: string(),
@@ -13372,7 +13538,7 @@ method(object({
13372
13538
  }), method(object({
13373
13539
  deviceId: number(),
13374
13540
  agentNodeId: string().optional()
13375
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
13541
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
13376
13542
  name: string(),
13377
13543
  description: string().optional(),
13378
13544
  config: CameraPipelineConfigSchema
@@ -19249,6 +19415,12 @@ Object.freeze({
19249
19415
  addonId: null,
19250
19416
  access: "view"
19251
19417
  },
19418
+ "pipelineExecutor.getEngineProvisioning": {
19419
+ capName: "pipeline-executor",
19420
+ capScope: "system",
19421
+ addonId: null,
19422
+ access: "view"
19423
+ },
19252
19424
  "pipelineExecutor.getGlobalPipelineConfig": {
19253
19425
  capName: "pipeline-executor",
19254
19426
  capScope: "system",
@@ -19453,6 +19625,18 @@ Object.freeze({
19453
19625
  addonId: null,
19454
19626
  access: "view"
19455
19627
  },
19628
+ "pipelineOrchestrator.getCameraStatus": {
19629
+ capName: "pipeline-orchestrator",
19630
+ capScope: "system",
19631
+ addonId: null,
19632
+ access: "view"
19633
+ },
19634
+ "pipelineOrchestrator.getCameraStatuses": {
19635
+ capName: "pipeline-orchestrator",
19636
+ capScope: "system",
19637
+ addonId: null,
19638
+ access: "view"
19639
+ },
19456
19640
  "pipelineOrchestrator.getCameraStepOverrides": {
19457
19641
  capName: "pipeline-orchestrator",
19458
19642
  capScope: "system",
@@ -19537,6 +19721,12 @@ Object.freeze({
19537
19721
  addonId: null,
19538
19722
  access: "create"
19539
19723
  },
19724
+ "pipelineOrchestrator.setAgentMaxCameras": {
19725
+ capName: "pipeline-orchestrator",
19726
+ capScope: "system",
19727
+ addonId: null,
19728
+ access: "create"
19729
+ },
19540
19730
  "pipelineOrchestrator.setCameraPipelineForAgent": {
19541
19731
  capName: "pipeline-orchestrator",
19542
19732
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -4986,6 +4986,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
4986
4986
  */
4987
4987
  EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
4988
4988
  /**
4989
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
4990
+ * the detection-pipeline provider on every state change of its lazy
4991
+ * engine-provisioning machine (idle → installing → verifying → ready,
4992
+ * or → failed with a `nextRetryAt`). Payload is the
4993
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
4994
+ * node. The Pipeline page subscribes to drive a live "installing
4995
+ * OpenVINO… / ready" indicator per node without polling
4996
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
4997
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
4998
+ */
4999
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
5000
+ /**
4989
5001
  * Cluster topology snapshot. Carries the same payload returned by
4990
5002
  * `nodes.topology` (every reachable node + addons + processes).
4991
5003
  * Emitted by the hub on any agent / addon lifecycle change
@@ -9264,6 +9276,24 @@ var DetectorOutputSchema = object({
9264
9276
  inferenceMs: number(),
9265
9277
  modelId: string()
9266
9278
  });
9279
+ var EngineProvisioningSchema = object({
9280
+ runtimeId: _enum([
9281
+ "onnx",
9282
+ "openvino",
9283
+ "coreml"
9284
+ ]).nullable(),
9285
+ device: string().nullable(),
9286
+ state: _enum([
9287
+ "idle",
9288
+ "installing",
9289
+ "verifying",
9290
+ "ready",
9291
+ "failed"
9292
+ ]),
9293
+ progress: number().optional(),
9294
+ error: string().optional(),
9295
+ nextRetryAt: number().optional()
9296
+ });
9267
9297
  var PipelineStepInputSchema = lazy(() => object({
9268
9298
  addonId: string(),
9269
9299
  modelId: string(),
@@ -9332,7 +9362,7 @@ var PipelineRunResultBridge = custom();
9332
9362
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
9333
9363
  kind: "mutation",
9334
9364
  auth: "admin"
9335
- }), method(_void(), record(string(), object({
9365
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
9336
9366
  modelId: string(),
9337
9367
  settings: record(string(), unknown()).readonly()
9338
9368
  }))), method(object({ steps: record(string(), object({
@@ -13179,7 +13209,10 @@ var AgentAddonConfigSchema = object({
13179
13209
  modelId: string(),
13180
13210
  settings: record(string(), unknown()).readonly()
13181
13211
  });
13182
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
13212
+ var AgentPipelineSettingsSchema = object({
13213
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
13214
+ maxCameras: number().int().nonnegative().nullable().default(null)
13215
+ });
13183
13216
  var CameraPipelineForAgentSchema = object({
13184
13217
  steps: array(PipelineStepInputSchema).readonly(),
13185
13218
  audio: object({
@@ -13281,6 +13314,133 @@ var GlobalMetricsSchema = object({
13281
13314
  * capability providers.
13282
13315
  */
13283
13316
  var CapabilityBindingsSchema = record(string(), string());
13317
+ /** Source block — always present; derives from the stream catalog. */
13318
+ var CameraSourceStatusSchema = object({ streams: array(object({
13319
+ camStreamId: string(),
13320
+ codec: string(),
13321
+ width: number(),
13322
+ height: number(),
13323
+ fps: number(),
13324
+ kind: string()
13325
+ })).readonly() });
13326
+ /** Assignment block — always present (orchestrator-local, no remote call). */
13327
+ var CameraAssignmentStatusSchema = object({
13328
+ detectionNodeId: string().nullable(),
13329
+ decoderNodeId: string().nullable(),
13330
+ audioNodeId: string().nullable(),
13331
+ pinned: object({
13332
+ detection: boolean(),
13333
+ decoder: boolean(),
13334
+ audio: boolean()
13335
+ }),
13336
+ reasons: object({
13337
+ detection: string().optional(),
13338
+ decoder: string().optional(),
13339
+ audio: string().optional()
13340
+ })
13341
+ });
13342
+ /** Broker block — null when the broker stage is unreachable or inactive. */
13343
+ var CameraBrokerStatusSchema = object({
13344
+ profiles: array(object({
13345
+ profile: string(),
13346
+ status: string(),
13347
+ codec: string(),
13348
+ width: number(),
13349
+ height: number(),
13350
+ subscribers: number(),
13351
+ inFps: number(),
13352
+ outFps: number()
13353
+ })).readonly(),
13354
+ webrtcSessions: number(),
13355
+ rtspRestream: boolean()
13356
+ });
13357
+ /** Shared-memory ring statistics within the decoder block. */
13358
+ var CameraDecoderShmSchema = object({
13359
+ framesWritten: number(),
13360
+ getFrameHits: number(),
13361
+ getFrameMisses: number(),
13362
+ budgetMb: number()
13363
+ });
13364
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
13365
+ var CameraDecoderStatusSchema = object({
13366
+ nodeId: string(),
13367
+ formats: array(string()).readonly(),
13368
+ sessionCount: number(),
13369
+ shm: CameraDecoderShmSchema
13370
+ });
13371
+ /** Motion block — null when motion detection is not active for this device. */
13372
+ var CameraMotionStatusSchema = object({
13373
+ enabled: boolean(),
13374
+ fps: number()
13375
+ });
13376
+ /** Detection provisioning sub-block. */
13377
+ var CameraDetectionProvisioningSchema = object({
13378
+ state: _enum([
13379
+ "idle",
13380
+ "installing",
13381
+ "verifying",
13382
+ "ready",
13383
+ "failed"
13384
+ ]),
13385
+ error: string().optional()
13386
+ });
13387
+ /** Detection phase — derived from the runner's engine phase. */
13388
+ var CameraDetectionPhaseSchema = _enum([
13389
+ "idle",
13390
+ "watching",
13391
+ "active"
13392
+ ]);
13393
+ /** Detection block — null when no detection node is assigned or reachable. */
13394
+ var CameraDetectionStatusSchema = object({
13395
+ nodeId: string(),
13396
+ engine: object({
13397
+ backend: string(),
13398
+ device: string()
13399
+ }),
13400
+ phase: CameraDetectionPhaseSchema,
13401
+ configuredFps: number(),
13402
+ actualFps: number(),
13403
+ queueDepth: number(),
13404
+ avgInferenceMs: number(),
13405
+ provisioning: CameraDetectionProvisioningSchema
13406
+ });
13407
+ /** Audio block — null when no audio node is assigned or reachable. */
13408
+ var CameraAudioStatusSchema = object({
13409
+ nodeId: string(),
13410
+ enabled: boolean()
13411
+ });
13412
+ /** Recording block — null when no recording cap is active for this device. */
13413
+ var CameraRecordingStatusSchema = object({
13414
+ mode: _enum([
13415
+ "off",
13416
+ "continuous",
13417
+ "events"
13418
+ ]),
13419
+ active: boolean(),
13420
+ storageBytes: number()
13421
+ });
13422
+ /**
13423
+ * Aggregated per-camera pipeline status — server-composed, single call.
13424
+ *
13425
+ * The `assignment` and `source` blocks are always present.
13426
+ * Every other block is `null` when the stage is inactive or unreachable
13427
+ * during the bounded parallel fan-out in the orchestrator implementation.
13428
+ *
13429
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
13430
+ */
13431
+ var CameraStatusSchema = object({
13432
+ deviceId: number(),
13433
+ assignment: CameraAssignmentStatusSchema,
13434
+ source: CameraSourceStatusSchema,
13435
+ broker: CameraBrokerStatusSchema.nullable(),
13436
+ decoder: CameraDecoderStatusSchema.nullable(),
13437
+ motion: CameraMotionStatusSchema.nullable(),
13438
+ detection: CameraDetectionStatusSchema.nullable(),
13439
+ audio: CameraAudioStatusSchema.nullable(),
13440
+ recording: CameraRecordingStatusSchema.nullable(),
13441
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
13442
+ fetchedAt: number()
13443
+ });
13284
13444
  method(object({
13285
13445
  deviceId: number(),
13286
13446
  agentNodeId: string()
@@ -13348,6 +13508,12 @@ method(object({
13348
13508
  }), {
13349
13509
  kind: "mutation",
13350
13510
  auth: "admin"
13511
+ }), method(object({
13512
+ agentNodeId: string(),
13513
+ maxCameras: number().int().nonnegative().nullable()
13514
+ }), object({ success: literal(true) }), {
13515
+ kind: "mutation",
13516
+ auth: "admin"
13351
13517
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
13352
13518
  deviceId: number(),
13353
13519
  addonId: string(),
@@ -13373,7 +13539,7 @@ method(object({
13373
13539
  }), method(object({
13374
13540
  deviceId: number(),
13375
13541
  agentNodeId: string().optional()
13376
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
13542
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
13377
13543
  name: string(),
13378
13544
  description: string().optional(),
13379
13545
  config: CameraPipelineConfigSchema
@@ -19250,6 +19416,12 @@ Object.freeze({
19250
19416
  addonId: null,
19251
19417
  access: "view"
19252
19418
  },
19419
+ "pipelineExecutor.getEngineProvisioning": {
19420
+ capName: "pipeline-executor",
19421
+ capScope: "system",
19422
+ addonId: null,
19423
+ access: "view"
19424
+ },
19253
19425
  "pipelineExecutor.getGlobalPipelineConfig": {
19254
19426
  capName: "pipeline-executor",
19255
19427
  capScope: "system",
@@ -19454,6 +19626,18 @@ Object.freeze({
19454
19626
  addonId: null,
19455
19627
  access: "view"
19456
19628
  },
19629
+ "pipelineOrchestrator.getCameraStatus": {
19630
+ capName: "pipeline-orchestrator",
19631
+ capScope: "system",
19632
+ addonId: null,
19633
+ access: "view"
19634
+ },
19635
+ "pipelineOrchestrator.getCameraStatuses": {
19636
+ capName: "pipeline-orchestrator",
19637
+ capScope: "system",
19638
+ addonId: null,
19639
+ access: "view"
19640
+ },
19457
19641
  "pipelineOrchestrator.getCameraStepOverrides": {
19458
19642
  capName: "pipeline-orchestrator",
19459
19643
  capScope: "system",
@@ -19538,6 +19722,12 @@ Object.freeze({
19538
19722
  addonId: null,
19539
19723
  access: "create"
19540
19724
  },
19725
+ "pipelineOrchestrator.setAgentMaxCameras": {
19726
+ capName: "pipeline-orchestrator",
19727
+ capScope: "system",
19728
+ addonId: null,
19729
+ access: "create"
19730
+ },
19541
19731
  "pipelineOrchestrator.setCameraPipelineForAgent": {
19542
19732
  capName: "pipeline-orchestrator",
19543
19733
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-onvif",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "ONVIF camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",