@camstack/addon-provider-wyze 0.2.25 → 0.2.27

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
@@ -13818,128 +13818,103 @@ var COCO_TO_MACRO = {
13818
13818
  var AUDIO_MACRO_LABELS = [
13819
13819
  {
13820
13820
  id: "speech",
13821
- name: "Speech",
13822
- icon: "🗣️"
13821
+ name: "Speech"
13823
13822
  },
13824
13823
  {
13825
13824
  id: "scream",
13826
- name: "Scream / Shout",
13827
- icon: "😱"
13825
+ name: "Scream / Shout"
13828
13826
  },
13829
13827
  {
13830
13828
  id: "crying",
13831
- name: "Crying / Baby",
13832
- icon: "😢"
13829
+ name: "Crying / Baby"
13833
13830
  },
13834
13831
  {
13835
13832
  id: "laughter",
13836
- name: "Laughter",
13837
- icon: "😂"
13833
+ name: "Laughter"
13838
13834
  },
13839
13835
  {
13840
13836
  id: "music",
13841
- name: "Music",
13842
- icon: "🎵"
13837
+ name: "Music"
13843
13838
  },
13844
13839
  {
13845
13840
  id: "dog",
13846
- name: "Dog",
13847
- icon: "🐕"
13841
+ name: "Dog"
13848
13842
  },
13849
13843
  {
13850
13844
  id: "cat",
13851
- name: "Cat",
13852
- icon: "🐈"
13845
+ name: "Cat"
13853
13846
  },
13854
13847
  {
13855
13848
  id: "bird",
13856
- name: "Bird",
13857
- icon: "🐦"
13849
+ name: "Bird"
13858
13850
  },
13859
13851
  {
13860
13852
  id: "animal",
13861
- name: "Animal (other)",
13862
- icon: "🐾"
13853
+ name: "Animal (other)"
13863
13854
  },
13864
13855
  {
13865
13856
  id: "alarm",
13866
- name: "Alarm / Siren",
13867
- icon: "🚨"
13857
+ name: "Alarm / Siren"
13868
13858
  },
13869
13859
  {
13870
13860
  id: "doorbell",
13871
- name: "Doorbell / Knock",
13872
- icon: "🔔"
13861
+ name: "Doorbell / Knock"
13873
13862
  },
13874
13863
  {
13875
13864
  id: "glass_breaking",
13876
- name: "Glass Breaking",
13877
- icon: "💥"
13865
+ name: "Glass Breaking"
13878
13866
  },
13879
13867
  {
13880
13868
  id: "gunshot",
13881
- name: "Gunshot / Explosion",
13882
- icon: "💣"
13869
+ name: "Gunshot / Explosion"
13883
13870
  },
13884
13871
  {
13885
13872
  id: "vehicle",
13886
- name: "Vehicle",
13887
- icon: "🚗"
13873
+ name: "Vehicle"
13888
13874
  },
13889
13875
  {
13890
13876
  id: "siren",
13891
- name: "Emergency Siren",
13892
- icon: "🚑"
13877
+ name: "Emergency Siren"
13893
13878
  },
13894
13879
  {
13895
13880
  id: "fire",
13896
- name: "Fire / Smoke",
13897
- icon: "🔥"
13881
+ name: "Fire / Smoke"
13898
13882
  },
13899
13883
  {
13900
13884
  id: "water",
13901
- name: "Water",
13902
- icon: "💧"
13885
+ name: "Water"
13903
13886
  },
13904
13887
  {
13905
13888
  id: "wind",
13906
- name: "Wind / Weather",
13907
- icon: "🌬️"
13889
+ name: "Wind / Weather"
13908
13890
  },
13909
13891
  {
13910
13892
  id: "door",
13911
- name: "Door",
13912
- icon: "🚪"
13893
+ name: "Door"
13913
13894
  },
13914
13895
  {
13915
13896
  id: "footsteps",
13916
- name: "Footsteps",
13917
- icon: "👣"
13897
+ name: "Footsteps"
13918
13898
  },
13919
13899
  {
13920
13900
  id: "crowd",
13921
- name: "Crowd / Chatter",
13922
- icon: "👥"
13901
+ name: "Crowd / Chatter"
13923
13902
  },
13924
13903
  {
13925
13904
  id: "telephone",
13926
- name: "Telephone",
13927
- icon: "📞"
13905
+ name: "Telephone"
13928
13906
  },
13929
13907
  {
13930
13908
  id: "engine",
13931
- name: "Engine / Motor",
13932
- icon: "⚙️"
13909
+ name: "Engine / Motor"
13933
13910
  },
13934
13911
  {
13935
13912
  id: "tools",
13936
- name: "Tools / Construction",
13937
- icon: "🔨"
13913
+ name: "Tools / Construction"
13938
13914
  },
13939
13915
  {
13940
13916
  id: "silence",
13941
- name: "Silence",
13942
- icon: "🤫"
13917
+ name: "Silence"
13943
13918
  }
13944
13919
  ];
13945
13920
  var YAMNET_TO_MACRO = {
@@ -18125,6 +18100,12 @@ var DetailResultSchema = object({
18125
18100
  /** FRAME-space bbox (already mapped back from crop space). */
18126
18101
  bbox: NativeCropBboxSchema.optional(),
18127
18102
  embedding: string().optional(),
18103
+ /**
18104
+ * L2 magnitude of the RAW pre-normalization embedding. Additive and optional
18105
+ * so an older runner that does not send it degrades to "unmeasurable", which
18106
+ * the consuming gate treats as accept — never as reject.
18107
+ */
18108
+ embeddingMagnitude: number().optional(),
18128
18109
  label: string().optional(),
18129
18110
  /**
18130
18111
  * The tier `label` occupies, copied VERBATIM from the producing step's
@@ -26413,9 +26394,21 @@ var RecordingLocationUsageSchema = object({
26413
26394
  * previously rendered as two identical "disks" with a nonsensical used
26414
26395
  * split — hydrate attribution across aliases is arbitrary by nature. */
26415
26396
  locationIds: array(string()).optional(),
26416
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
26397
+ /**
26398
+ * Filesystem root of the physical volume this row accounts — the only
26399
+ * operator-legible identity when a location has no `displayName` yet, and
26400
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
26401
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
26402
+ * it, and this schema must keep validating that older provider's payload.
26403
+ */
26404
+ root: string().optional(),
26405
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
26406
+ * the footage's SHARE of the volume, not how full the volume is — the disk
26407
+ * also holds everything that is not recordings. Volume fill is
26408
+ * `(totalBytes - availableBytes) / totalBytes`. */
26417
26409
  usedBytes: number(),
26418
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
26410
+ /** Free bytes on the location's volume; null when capacity is unknown
26411
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
26419
26412
  availableBytes: number().nullable(),
26420
26413
  /** Total bytes of the location's volume; null when unknown. */
26421
26414
  totalBytes: number().nullable()
@@ -26427,7 +26420,15 @@ var RecordingStorageUsageSchema = object({
26427
26420
  nodeId: string(),
26428
26421
  totalUsedBytes: number(),
26429
26422
  devices: array(RecordingDeviceUsageSchema),
26430
- locations: array(RecordingLocationUsageSchema)
26423
+ /**
26424
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
26425
+ * of the payload without it: the hub serves this method through a BAKED
26426
+ * router, so a hub whose framework train predates a change to this array
26427
+ * strips it out of an answer a newer recorder happily produced. A UI that
26428
+ * dereferences it unconditionally crashes the whole Storage page over a
26429
+ * missing disk bar.
26430
+ */
26431
+ locations: array(RecordingLocationUsageSchema).optional()
26431
26432
  });
26432
26433
  /**
26433
26434
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -37212,8 +37213,13 @@ Object.freeze({
37212
37213
  "network-access": "ingress",
37213
37214
  "smtp-provider": "email"
37214
37215
  });
37215
- new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
37216
+ /** Schema defaults an untouched sub-field must author exactly these. */
37217
+ var NC_AUDIO_DEFAULTS = {
37218
+ hitPercent: 60,
37219
+ samplingSeconds: 10
37220
+ };
37216
37221
  new Set(["devices", "classes"]);
37222
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
37217
37223
  /**
37218
37224
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
37219
37225
  *
package/dist/addon.mjs CHANGED
@@ -13797,128 +13797,103 @@ var COCO_TO_MACRO = {
13797
13797
  var AUDIO_MACRO_LABELS = [
13798
13798
  {
13799
13799
  id: "speech",
13800
- name: "Speech",
13801
- icon: "🗣️"
13800
+ name: "Speech"
13802
13801
  },
13803
13802
  {
13804
13803
  id: "scream",
13805
- name: "Scream / Shout",
13806
- icon: "😱"
13804
+ name: "Scream / Shout"
13807
13805
  },
13808
13806
  {
13809
13807
  id: "crying",
13810
- name: "Crying / Baby",
13811
- icon: "😢"
13808
+ name: "Crying / Baby"
13812
13809
  },
13813
13810
  {
13814
13811
  id: "laughter",
13815
- name: "Laughter",
13816
- icon: "😂"
13812
+ name: "Laughter"
13817
13813
  },
13818
13814
  {
13819
13815
  id: "music",
13820
- name: "Music",
13821
- icon: "🎵"
13816
+ name: "Music"
13822
13817
  },
13823
13818
  {
13824
13819
  id: "dog",
13825
- name: "Dog",
13826
- icon: "🐕"
13820
+ name: "Dog"
13827
13821
  },
13828
13822
  {
13829
13823
  id: "cat",
13830
- name: "Cat",
13831
- icon: "🐈"
13824
+ name: "Cat"
13832
13825
  },
13833
13826
  {
13834
13827
  id: "bird",
13835
- name: "Bird",
13836
- icon: "🐦"
13828
+ name: "Bird"
13837
13829
  },
13838
13830
  {
13839
13831
  id: "animal",
13840
- name: "Animal (other)",
13841
- icon: "🐾"
13832
+ name: "Animal (other)"
13842
13833
  },
13843
13834
  {
13844
13835
  id: "alarm",
13845
- name: "Alarm / Siren",
13846
- icon: "🚨"
13836
+ name: "Alarm / Siren"
13847
13837
  },
13848
13838
  {
13849
13839
  id: "doorbell",
13850
- name: "Doorbell / Knock",
13851
- icon: "🔔"
13840
+ name: "Doorbell / Knock"
13852
13841
  },
13853
13842
  {
13854
13843
  id: "glass_breaking",
13855
- name: "Glass Breaking",
13856
- icon: "💥"
13844
+ name: "Glass Breaking"
13857
13845
  },
13858
13846
  {
13859
13847
  id: "gunshot",
13860
- name: "Gunshot / Explosion",
13861
- icon: "💣"
13848
+ name: "Gunshot / Explosion"
13862
13849
  },
13863
13850
  {
13864
13851
  id: "vehicle",
13865
- name: "Vehicle",
13866
- icon: "🚗"
13852
+ name: "Vehicle"
13867
13853
  },
13868
13854
  {
13869
13855
  id: "siren",
13870
- name: "Emergency Siren",
13871
- icon: "🚑"
13856
+ name: "Emergency Siren"
13872
13857
  },
13873
13858
  {
13874
13859
  id: "fire",
13875
- name: "Fire / Smoke",
13876
- icon: "🔥"
13860
+ name: "Fire / Smoke"
13877
13861
  },
13878
13862
  {
13879
13863
  id: "water",
13880
- name: "Water",
13881
- icon: "💧"
13864
+ name: "Water"
13882
13865
  },
13883
13866
  {
13884
13867
  id: "wind",
13885
- name: "Wind / Weather",
13886
- icon: "🌬️"
13868
+ name: "Wind / Weather"
13887
13869
  },
13888
13870
  {
13889
13871
  id: "door",
13890
- name: "Door",
13891
- icon: "🚪"
13872
+ name: "Door"
13892
13873
  },
13893
13874
  {
13894
13875
  id: "footsteps",
13895
- name: "Footsteps",
13896
- icon: "👣"
13876
+ name: "Footsteps"
13897
13877
  },
13898
13878
  {
13899
13879
  id: "crowd",
13900
- name: "Crowd / Chatter",
13901
- icon: "👥"
13880
+ name: "Crowd / Chatter"
13902
13881
  },
13903
13882
  {
13904
13883
  id: "telephone",
13905
- name: "Telephone",
13906
- icon: "📞"
13884
+ name: "Telephone"
13907
13885
  },
13908
13886
  {
13909
13887
  id: "engine",
13910
- name: "Engine / Motor",
13911
- icon: "⚙️"
13888
+ name: "Engine / Motor"
13912
13889
  },
13913
13890
  {
13914
13891
  id: "tools",
13915
- name: "Tools / Construction",
13916
- icon: "🔨"
13892
+ name: "Tools / Construction"
13917
13893
  },
13918
13894
  {
13919
13895
  id: "silence",
13920
- name: "Silence",
13921
- icon: "🤫"
13896
+ name: "Silence"
13922
13897
  }
13923
13898
  ];
13924
13899
  var YAMNET_TO_MACRO = {
@@ -18104,6 +18079,12 @@ var DetailResultSchema = object({
18104
18079
  /** FRAME-space bbox (already mapped back from crop space). */
18105
18080
  bbox: NativeCropBboxSchema.optional(),
18106
18081
  embedding: string().optional(),
18082
+ /**
18083
+ * L2 magnitude of the RAW pre-normalization embedding. Additive and optional
18084
+ * so an older runner that does not send it degrades to "unmeasurable", which
18085
+ * the consuming gate treats as accept — never as reject.
18086
+ */
18087
+ embeddingMagnitude: number().optional(),
18107
18088
  label: string().optional(),
18108
18089
  /**
18109
18090
  * The tier `label` occupies, copied VERBATIM from the producing step's
@@ -26392,9 +26373,21 @@ var RecordingLocationUsageSchema = object({
26392
26373
  * previously rendered as two identical "disks" with a nonsensical used
26393
26374
  * split — hydrate attribution across aliases is arbitrary by nature. */
26394
26375
  locationIds: array(string()).optional(),
26395
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
26376
+ /**
26377
+ * Filesystem root of the physical volume this row accounts — the only
26378
+ * operator-legible identity when a location has no `displayName` yet, and
26379
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
26380
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
26381
+ * it, and this schema must keep validating that older provider's payload.
26382
+ */
26383
+ root: string().optional(),
26384
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
26385
+ * the footage's SHARE of the volume, not how full the volume is — the disk
26386
+ * also holds everything that is not recordings. Volume fill is
26387
+ * `(totalBytes - availableBytes) / totalBytes`. */
26396
26388
  usedBytes: number(),
26397
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
26389
+ /** Free bytes on the location's volume; null when capacity is unknown
26390
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
26398
26391
  availableBytes: number().nullable(),
26399
26392
  /** Total bytes of the location's volume; null when unknown. */
26400
26393
  totalBytes: number().nullable()
@@ -26406,7 +26399,15 @@ var RecordingStorageUsageSchema = object({
26406
26399
  nodeId: string(),
26407
26400
  totalUsedBytes: number(),
26408
26401
  devices: array(RecordingDeviceUsageSchema),
26409
- locations: array(RecordingLocationUsageSchema)
26402
+ /**
26403
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
26404
+ * of the payload without it: the hub serves this method through a BAKED
26405
+ * router, so a hub whose framework train predates a change to this array
26406
+ * strips it out of an answer a newer recorder happily produced. A UI that
26407
+ * dereferences it unconditionally crashes the whole Storage page over a
26408
+ * missing disk bar.
26409
+ */
26410
+ locations: array(RecordingLocationUsageSchema).optional()
26410
26411
  });
26411
26412
  /**
26412
26413
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -37191,8 +37192,13 @@ Object.freeze({
37191
37192
  "network-access": "ingress",
37192
37193
  "smtp-provider": "email"
37193
37194
  });
37194
- new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
37195
+ /** Schema defaults an untouched sub-field must author exactly these. */
37196
+ var NC_AUDIO_DEFAULTS = {
37197
+ hitPercent: 60,
37198
+ samplingSeconds: 10
37199
+ };
37195
37200
  new Set(["devices", "classes"]);
37201
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
37196
37202
  /**
37197
37203
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
37198
37204
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-wyze",
3
- "version": "0.2.25",
3
+ "version": "0.2.27",
4
4
  "description": "Wyze camera device-provider addon for CamStack — wraps the @apocaliss92/wyze-bridge-js P2P/DTLS client, feeding the stream-broker via the pull-rfc4571 lazy-publish path (a structural twin of addon-provider-reolink)",
5
5
  "keywords": [
6
6
  "camstack",