@camstack/addon-smtp-nodemailer 1.2.49 → 1.2.51

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.
@@ -15594,6 +15594,8 @@ var NcSystemEventKindSchema = _enum([
15594
15594
  "device-offline",
15595
15595
  "device-disabled",
15596
15596
  "device-enabled",
15597
+ "device-battery-low",
15598
+ "device-battery-normal",
15597
15599
  "stream-online",
15598
15600
  "stream-offline",
15599
15601
  "node-online",
@@ -18868,6 +18870,34 @@ var KeyEventsForDeviceSchema = object({
18868
18870
  deviceId: number(),
18869
18871
  events: array(KeyEventSchema).readonly()
18870
18872
  });
18873
+ /** One non-empty bucket of the timeline histogram. */
18874
+ var EventDensityBucketSchema = object({
18875
+ bucketStart: number(),
18876
+ motion: number().int(),
18877
+ object: number().int(),
18878
+ audio: number().int()
18879
+ });
18880
+ /**
18881
+ * One camera's row in a `getEventDensityBatch` answer.
18882
+ *
18883
+ * TWO facts, and the timeline draws them differently:
18884
+ *
18885
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18886
+ * claim: read, and nothing happened in the window.
18887
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18888
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18889
+ * not quiet.
18890
+ *
18891
+ * Fanned out per camera the difference was free — one query rejected while the
18892
+ * others resolved — and collapsing to a batch is the exact moment it is lost
18893
+ * silently. Every requested id gets a row: a caller that asked for twelve and
18894
+ * got eleven cannot tell which one is missing, or that any is.
18895
+ */
18896
+ var EventDensityForDeviceSchema = object({
18897
+ deviceId: number(),
18898
+ read: _enum(["read", "unreadable"]),
18899
+ buckets: array(EventDensityBucketSchema).readonly()
18900
+ });
18871
18901
  object({
18872
18902
  trackId: string(),
18873
18903
  className: string(),
@@ -19178,12 +19208,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19178
19208
  since: number(),
19179
19209
  until: number(),
19180
19210
  bucketMs: number().int().positive()
19181
- }), array(object({
19182
- bucketStart: number(),
19183
- motion: number().int(),
19184
- object: number().int(),
19185
- audio: number().int()
19186
- })).readonly()), method(object({
19211
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19212
+ deviceIds: array(number()).min(1).max(200),
19213
+ since: number(),
19214
+ until: number(),
19215
+ bucketMs: number().int().positive()
19216
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19187
19217
  deviceId: number(),
19188
19218
  cutoffMs: number()
19189
19219
  }), object({
@@ -26506,6 +26536,39 @@ var RecordingDaysSchema = object({
26506
26536
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26507
26537
  days: array(number())
26508
26538
  });
26539
+ /**
26540
+ * One camera's row in a `getAvailabilityBatch` answer.
26541
+ *
26542
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26543
+ * batch collapses the transport, not the work — plus the one thing the singular
26544
+ * method never had to say:
26545
+ *
26546
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26547
+ * no footage in the window", which is a real claim.
26548
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26549
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26550
+ * that emptiness means NOTHING.
26551
+ *
26552
+ * A timeline that renders the second as the first tells an operator there is no
26553
+ * footage when the truth is that nobody looked.
26554
+ */
26555
+ var RecordingAvailabilityForDeviceSchema = object({
26556
+ deviceId: number(),
26557
+ read: _enum(["read", "unreadable"]),
26558
+ ranges: array(RecordingRangeSchema).readonly()
26559
+ });
26560
+ /**
26561
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26562
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26563
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26564
+ * the date-picker's day dots must not spell them the same.
26565
+ */
26566
+ var RecordingDaysForDeviceSchema = object({
26567
+ deviceId: number(),
26568
+ read: _enum(["read", "unreadable"]),
26569
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26570
+ days: array(number()).readonly()
26571
+ });
26509
26572
  var RecordingManifestSchema = object({
26510
26573
  deviceId: number(),
26511
26574
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26740,6 +26803,13 @@ method(object({
26740
26803
  }), RecordingAvailabilitySchema, {
26741
26804
  kind: "query",
26742
26805
  auth: "protected"
26806
+ }), method(object({
26807
+ deviceIds: array(number()).min(1).max(200),
26808
+ fromMs: number(),
26809
+ toMs: number()
26810
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
26811
+ kind: "query",
26812
+ auth: "protected"
26743
26813
  }), method(object({
26744
26814
  deviceId: number(),
26745
26815
  fromMs: number(),
@@ -26748,6 +26818,14 @@ method(object({
26748
26818
  }), RecordingDaysSchema, {
26749
26819
  kind: "query",
26750
26820
  auth: "protected"
26821
+ }), method(object({
26822
+ deviceIds: array(number()).min(1).max(200),
26823
+ fromMs: number(),
26824
+ toMs: number(),
26825
+ tzOffsetMinutes: number()
26826
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
26827
+ kind: "query",
26828
+ auth: "protected"
26751
26829
  }), method(object({
26752
26830
  deviceId: number(),
26753
26831
  fromMs: number(),
@@ -31945,6 +32023,12 @@ Object.freeze({
31945
32023
  addonId: null,
31946
32024
  access: "view"
31947
32025
  },
32026
+ "pipelineAnalytics.getEventDensityBatch": {
32027
+ capName: "pipeline-analytics",
32028
+ capScope: "device",
32029
+ addonId: null,
32030
+ access: "view"
32031
+ },
31948
32032
  "pipelineAnalytics.getEventMedia": {
31949
32033
  capName: "pipeline-analytics",
31950
32034
  capScope: "device",
@@ -33067,12 +33151,24 @@ Object.freeze({
33067
33151
  addonId: null,
33068
33152
  access: "view"
33069
33153
  },
33154
+ "recording.getAvailabilityBatch": {
33155
+ capName: "recording",
33156
+ capScope: "system",
33157
+ addonId: null,
33158
+ access: "view"
33159
+ },
33070
33160
  "recording.getDaysWithRecordings": {
33071
33161
  capName: "recording",
33072
33162
  capScope: "system",
33073
33163
  addonId: null,
33074
33164
  access: "view"
33075
33165
  },
33166
+ "recording.getDaysWithRecordingsBatch": {
33167
+ capName: "recording",
33168
+ capScope: "system",
33169
+ addonId: null,
33170
+ access: "view"
33171
+ },
33076
33172
  "recording.getDeviceConfig": {
33077
33173
  capName: "recording",
33078
33174
  capScope: "system",
@@ -35677,6 +35773,11 @@ Object.freeze({
35677
35773
  form: "single",
35678
35774
  optional: false
35679
35775
  }],
35776
+ "pipelineAnalytics.getEventDensityBatch": [{
35777
+ name: "deviceIds",
35778
+ form: "array",
35779
+ optional: false
35780
+ }],
35680
35781
  "pipelineAnalytics.getEventMedia": [{
35681
35782
  name: "deviceId",
35682
35783
  form: "single",
@@ -36092,11 +36193,21 @@ Object.freeze({
36092
36193
  form: "single",
36093
36194
  optional: false
36094
36195
  }],
36196
+ "recording.getAvailabilityBatch": [{
36197
+ name: "deviceIds",
36198
+ form: "array",
36199
+ optional: false
36200
+ }],
36095
36201
  "recording.getDaysWithRecordings": [{
36096
36202
  name: "deviceId",
36097
36203
  form: "single",
36098
36204
  optional: false
36099
36205
  }],
36206
+ "recording.getDaysWithRecordingsBatch": [{
36207
+ name: "deviceIds",
36208
+ form: "array",
36209
+ optional: false
36210
+ }],
36100
36211
  "recording.getDeviceConfig": [{
36101
36212
  name: "deviceId",
36102
36213
  form: "single",
@@ -15592,6 +15592,8 @@ var NcSystemEventKindSchema = _enum([
15592
15592
  "device-offline",
15593
15593
  "device-disabled",
15594
15594
  "device-enabled",
15595
+ "device-battery-low",
15596
+ "device-battery-normal",
15595
15597
  "stream-online",
15596
15598
  "stream-offline",
15597
15599
  "node-online",
@@ -18866,6 +18868,34 @@ var KeyEventsForDeviceSchema = object({
18866
18868
  deviceId: number(),
18867
18869
  events: array(KeyEventSchema).readonly()
18868
18870
  });
18871
+ /** One non-empty bucket of the timeline histogram. */
18872
+ var EventDensityBucketSchema = object({
18873
+ bucketStart: number(),
18874
+ motion: number().int(),
18875
+ object: number().int(),
18876
+ audio: number().int()
18877
+ });
18878
+ /**
18879
+ * One camera's row in a `getEventDensityBatch` answer.
18880
+ *
18881
+ * TWO facts, and the timeline draws them differently:
18882
+ *
18883
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18884
+ * claim: read, and nothing happened in the window.
18885
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18886
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18887
+ * not quiet.
18888
+ *
18889
+ * Fanned out per camera the difference was free — one query rejected while the
18890
+ * others resolved — and collapsing to a batch is the exact moment it is lost
18891
+ * silently. Every requested id gets a row: a caller that asked for twelve and
18892
+ * got eleven cannot tell which one is missing, or that any is.
18893
+ */
18894
+ var EventDensityForDeviceSchema = object({
18895
+ deviceId: number(),
18896
+ read: _enum(["read", "unreadable"]),
18897
+ buckets: array(EventDensityBucketSchema).readonly()
18898
+ });
18869
18899
  object({
18870
18900
  trackId: string(),
18871
18901
  className: string(),
@@ -19176,12 +19206,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19176
19206
  since: number(),
19177
19207
  until: number(),
19178
19208
  bucketMs: number().int().positive()
19179
- }), array(object({
19180
- bucketStart: number(),
19181
- motion: number().int(),
19182
- object: number().int(),
19183
- audio: number().int()
19184
- })).readonly()), method(object({
19209
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19210
+ deviceIds: array(number()).min(1).max(200),
19211
+ since: number(),
19212
+ until: number(),
19213
+ bucketMs: number().int().positive()
19214
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19185
19215
  deviceId: number(),
19186
19216
  cutoffMs: number()
19187
19217
  }), object({
@@ -26504,6 +26534,39 @@ var RecordingDaysSchema = object({
26504
26534
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26505
26535
  days: array(number())
26506
26536
  });
26537
+ /**
26538
+ * One camera's row in a `getAvailabilityBatch` answer.
26539
+ *
26540
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26541
+ * batch collapses the transport, not the work — plus the one thing the singular
26542
+ * method never had to say:
26543
+ *
26544
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26545
+ * no footage in the window", which is a real claim.
26546
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26547
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26548
+ * that emptiness means NOTHING.
26549
+ *
26550
+ * A timeline that renders the second as the first tells an operator there is no
26551
+ * footage when the truth is that nobody looked.
26552
+ */
26553
+ var RecordingAvailabilityForDeviceSchema = object({
26554
+ deviceId: number(),
26555
+ read: _enum(["read", "unreadable"]),
26556
+ ranges: array(RecordingRangeSchema).readonly()
26557
+ });
26558
+ /**
26559
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26560
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26561
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26562
+ * the date-picker's day dots must not spell them the same.
26563
+ */
26564
+ var RecordingDaysForDeviceSchema = object({
26565
+ deviceId: number(),
26566
+ read: _enum(["read", "unreadable"]),
26567
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26568
+ days: array(number()).readonly()
26569
+ });
26507
26570
  var RecordingManifestSchema = object({
26508
26571
  deviceId: number(),
26509
26572
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26738,6 +26801,13 @@ method(object({
26738
26801
  }), RecordingAvailabilitySchema, {
26739
26802
  kind: "query",
26740
26803
  auth: "protected"
26804
+ }), method(object({
26805
+ deviceIds: array(number()).min(1).max(200),
26806
+ fromMs: number(),
26807
+ toMs: number()
26808
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
26809
+ kind: "query",
26810
+ auth: "protected"
26741
26811
  }), method(object({
26742
26812
  deviceId: number(),
26743
26813
  fromMs: number(),
@@ -26746,6 +26816,14 @@ method(object({
26746
26816
  }), RecordingDaysSchema, {
26747
26817
  kind: "query",
26748
26818
  auth: "protected"
26819
+ }), method(object({
26820
+ deviceIds: array(number()).min(1).max(200),
26821
+ fromMs: number(),
26822
+ toMs: number(),
26823
+ tzOffsetMinutes: number()
26824
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
26825
+ kind: "query",
26826
+ auth: "protected"
26749
26827
  }), method(object({
26750
26828
  deviceId: number(),
26751
26829
  fromMs: number(),
@@ -31943,6 +32021,12 @@ Object.freeze({
31943
32021
  addonId: null,
31944
32022
  access: "view"
31945
32023
  },
32024
+ "pipelineAnalytics.getEventDensityBatch": {
32025
+ capName: "pipeline-analytics",
32026
+ capScope: "device",
32027
+ addonId: null,
32028
+ access: "view"
32029
+ },
31946
32030
  "pipelineAnalytics.getEventMedia": {
31947
32031
  capName: "pipeline-analytics",
31948
32032
  capScope: "device",
@@ -33065,12 +33149,24 @@ Object.freeze({
33065
33149
  addonId: null,
33066
33150
  access: "view"
33067
33151
  },
33152
+ "recording.getAvailabilityBatch": {
33153
+ capName: "recording",
33154
+ capScope: "system",
33155
+ addonId: null,
33156
+ access: "view"
33157
+ },
33068
33158
  "recording.getDaysWithRecordings": {
33069
33159
  capName: "recording",
33070
33160
  capScope: "system",
33071
33161
  addonId: null,
33072
33162
  access: "view"
33073
33163
  },
33164
+ "recording.getDaysWithRecordingsBatch": {
33165
+ capName: "recording",
33166
+ capScope: "system",
33167
+ addonId: null,
33168
+ access: "view"
33169
+ },
33074
33170
  "recording.getDeviceConfig": {
33075
33171
  capName: "recording",
33076
33172
  capScope: "system",
@@ -35675,6 +35771,11 @@ Object.freeze({
35675
35771
  form: "single",
35676
35772
  optional: false
35677
35773
  }],
35774
+ "pipelineAnalytics.getEventDensityBatch": [{
35775
+ name: "deviceIds",
35776
+ form: "array",
35777
+ optional: false
35778
+ }],
35678
35779
  "pipelineAnalytics.getEventMedia": [{
35679
35780
  name: "deviceId",
35680
35781
  form: "single",
@@ -36090,11 +36191,21 @@ Object.freeze({
36090
36191
  form: "single",
36091
36192
  optional: false
36092
36193
  }],
36194
+ "recording.getAvailabilityBatch": [{
36195
+ name: "deviceIds",
36196
+ form: "array",
36197
+ optional: false
36198
+ }],
36093
36199
  "recording.getDaysWithRecordings": [{
36094
36200
  name: "deviceId",
36095
36201
  form: "single",
36096
36202
  optional: false
36097
36203
  }],
36204
+ "recording.getDaysWithRecordingsBatch": [{
36205
+ name: "deviceIds",
36206
+ form: "array",
36207
+ optional: false
36208
+ }],
36098
36209
  "recording.getDeviceConfig": [{
36099
36210
  name: "deviceId",
36100
36211
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-smtp-nodemailer",
3
- "version": "1.2.49",
3
+ "version": "1.2.51",
4
4
  "description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by magic-link login + notifier addons.",
5
5
  "keywords": [
6
6
  "camstack",