@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.
- package/dist/smtp.addon.js +117 -6
- package/dist/smtp.addon.mjs +117 -6
- package/package.json +1 -1
package/dist/smtp.addon.js
CHANGED
|
@@ -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
|
-
|
|
19183
|
-
|
|
19184
|
-
|
|
19185
|
-
|
|
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",
|
package/dist/smtp.addon.mjs
CHANGED
|
@@ -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
|
-
|
|
19181
|
-
|
|
19182
|
-
|
|
19183
|
-
|
|
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.
|
|
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",
|