@camstack/addon-smtp-nodemailer 1.2.50 → 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 +115 -6
- package/dist/smtp.addon.mjs +115 -6
- package/package.json +1 -1
package/dist/smtp.addon.js
CHANGED
|
@@ -18870,6 +18870,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
18870
18870
|
deviceId: number(),
|
|
18871
18871
|
events: array(KeyEventSchema).readonly()
|
|
18872
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
|
+
});
|
|
18873
18901
|
object({
|
|
18874
18902
|
trackId: string(),
|
|
18875
18903
|
className: string(),
|
|
@@ -19180,12 +19208,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19180
19208
|
since: number(),
|
|
19181
19209
|
until: number(),
|
|
19182
19210
|
bucketMs: number().int().positive()
|
|
19183
|
-
}), array(object({
|
|
19184
|
-
|
|
19185
|
-
|
|
19186
|
-
|
|
19187
|
-
|
|
19188
|
-
})).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({
|
|
19189
19217
|
deviceId: number(),
|
|
19190
19218
|
cutoffMs: number()
|
|
19191
19219
|
}), object({
|
|
@@ -26508,6 +26536,39 @@ var RecordingDaysSchema = object({
|
|
|
26508
26536
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26509
26537
|
days: array(number())
|
|
26510
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
|
+
});
|
|
26511
26572
|
var RecordingManifestSchema = object({
|
|
26512
26573
|
deviceId: number(),
|
|
26513
26574
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -26742,6 +26803,13 @@ method(object({
|
|
|
26742
26803
|
}), RecordingAvailabilitySchema, {
|
|
26743
26804
|
kind: "query",
|
|
26744
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"
|
|
26745
26813
|
}), method(object({
|
|
26746
26814
|
deviceId: number(),
|
|
26747
26815
|
fromMs: number(),
|
|
@@ -26750,6 +26818,14 @@ method(object({
|
|
|
26750
26818
|
}), RecordingDaysSchema, {
|
|
26751
26819
|
kind: "query",
|
|
26752
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"
|
|
26753
26829
|
}), method(object({
|
|
26754
26830
|
deviceId: number(),
|
|
26755
26831
|
fromMs: number(),
|
|
@@ -31947,6 +32023,12 @@ Object.freeze({
|
|
|
31947
32023
|
addonId: null,
|
|
31948
32024
|
access: "view"
|
|
31949
32025
|
},
|
|
32026
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32027
|
+
capName: "pipeline-analytics",
|
|
32028
|
+
capScope: "device",
|
|
32029
|
+
addonId: null,
|
|
32030
|
+
access: "view"
|
|
32031
|
+
},
|
|
31950
32032
|
"pipelineAnalytics.getEventMedia": {
|
|
31951
32033
|
capName: "pipeline-analytics",
|
|
31952
32034
|
capScope: "device",
|
|
@@ -33069,12 +33151,24 @@ Object.freeze({
|
|
|
33069
33151
|
addonId: null,
|
|
33070
33152
|
access: "view"
|
|
33071
33153
|
},
|
|
33154
|
+
"recording.getAvailabilityBatch": {
|
|
33155
|
+
capName: "recording",
|
|
33156
|
+
capScope: "system",
|
|
33157
|
+
addonId: null,
|
|
33158
|
+
access: "view"
|
|
33159
|
+
},
|
|
33072
33160
|
"recording.getDaysWithRecordings": {
|
|
33073
33161
|
capName: "recording",
|
|
33074
33162
|
capScope: "system",
|
|
33075
33163
|
addonId: null,
|
|
33076
33164
|
access: "view"
|
|
33077
33165
|
},
|
|
33166
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
33167
|
+
capName: "recording",
|
|
33168
|
+
capScope: "system",
|
|
33169
|
+
addonId: null,
|
|
33170
|
+
access: "view"
|
|
33171
|
+
},
|
|
33078
33172
|
"recording.getDeviceConfig": {
|
|
33079
33173
|
capName: "recording",
|
|
33080
33174
|
capScope: "system",
|
|
@@ -35679,6 +35773,11 @@ Object.freeze({
|
|
|
35679
35773
|
form: "single",
|
|
35680
35774
|
optional: false
|
|
35681
35775
|
}],
|
|
35776
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
35777
|
+
name: "deviceIds",
|
|
35778
|
+
form: "array",
|
|
35779
|
+
optional: false
|
|
35780
|
+
}],
|
|
35682
35781
|
"pipelineAnalytics.getEventMedia": [{
|
|
35683
35782
|
name: "deviceId",
|
|
35684
35783
|
form: "single",
|
|
@@ -36094,11 +36193,21 @@ Object.freeze({
|
|
|
36094
36193
|
form: "single",
|
|
36095
36194
|
optional: false
|
|
36096
36195
|
}],
|
|
36196
|
+
"recording.getAvailabilityBatch": [{
|
|
36197
|
+
name: "deviceIds",
|
|
36198
|
+
form: "array",
|
|
36199
|
+
optional: false
|
|
36200
|
+
}],
|
|
36097
36201
|
"recording.getDaysWithRecordings": [{
|
|
36098
36202
|
name: "deviceId",
|
|
36099
36203
|
form: "single",
|
|
36100
36204
|
optional: false
|
|
36101
36205
|
}],
|
|
36206
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
36207
|
+
name: "deviceIds",
|
|
36208
|
+
form: "array",
|
|
36209
|
+
optional: false
|
|
36210
|
+
}],
|
|
36102
36211
|
"recording.getDeviceConfig": [{
|
|
36103
36212
|
name: "deviceId",
|
|
36104
36213
|
form: "single",
|
package/dist/smtp.addon.mjs
CHANGED
|
@@ -18868,6 +18868,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
18868
18868
|
deviceId: number(),
|
|
18869
18869
|
events: array(KeyEventSchema).readonly()
|
|
18870
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
|
+
});
|
|
18871
18899
|
object({
|
|
18872
18900
|
trackId: string(),
|
|
18873
18901
|
className: string(),
|
|
@@ -19178,12 +19206,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19178
19206
|
since: number(),
|
|
19179
19207
|
until: number(),
|
|
19180
19208
|
bucketMs: number().int().positive()
|
|
19181
|
-
}), array(object({
|
|
19182
|
-
|
|
19183
|
-
|
|
19184
|
-
|
|
19185
|
-
|
|
19186
|
-
})).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({
|
|
19187
19215
|
deviceId: number(),
|
|
19188
19216
|
cutoffMs: number()
|
|
19189
19217
|
}), object({
|
|
@@ -26506,6 +26534,39 @@ var RecordingDaysSchema = object({
|
|
|
26506
26534
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26507
26535
|
days: array(number())
|
|
26508
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
|
+
});
|
|
26509
26570
|
var RecordingManifestSchema = object({
|
|
26510
26571
|
deviceId: number(),
|
|
26511
26572
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -26740,6 +26801,13 @@ method(object({
|
|
|
26740
26801
|
}), RecordingAvailabilitySchema, {
|
|
26741
26802
|
kind: "query",
|
|
26742
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"
|
|
26743
26811
|
}), method(object({
|
|
26744
26812
|
deviceId: number(),
|
|
26745
26813
|
fromMs: number(),
|
|
@@ -26748,6 +26816,14 @@ method(object({
|
|
|
26748
26816
|
}), RecordingDaysSchema, {
|
|
26749
26817
|
kind: "query",
|
|
26750
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"
|
|
26751
26827
|
}), method(object({
|
|
26752
26828
|
deviceId: number(),
|
|
26753
26829
|
fromMs: number(),
|
|
@@ -31945,6 +32021,12 @@ Object.freeze({
|
|
|
31945
32021
|
addonId: null,
|
|
31946
32022
|
access: "view"
|
|
31947
32023
|
},
|
|
32024
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32025
|
+
capName: "pipeline-analytics",
|
|
32026
|
+
capScope: "device",
|
|
32027
|
+
addonId: null,
|
|
32028
|
+
access: "view"
|
|
32029
|
+
},
|
|
31948
32030
|
"pipelineAnalytics.getEventMedia": {
|
|
31949
32031
|
capName: "pipeline-analytics",
|
|
31950
32032
|
capScope: "device",
|
|
@@ -33067,12 +33149,24 @@ Object.freeze({
|
|
|
33067
33149
|
addonId: null,
|
|
33068
33150
|
access: "view"
|
|
33069
33151
|
},
|
|
33152
|
+
"recording.getAvailabilityBatch": {
|
|
33153
|
+
capName: "recording",
|
|
33154
|
+
capScope: "system",
|
|
33155
|
+
addonId: null,
|
|
33156
|
+
access: "view"
|
|
33157
|
+
},
|
|
33070
33158
|
"recording.getDaysWithRecordings": {
|
|
33071
33159
|
capName: "recording",
|
|
33072
33160
|
capScope: "system",
|
|
33073
33161
|
addonId: null,
|
|
33074
33162
|
access: "view"
|
|
33075
33163
|
},
|
|
33164
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
33165
|
+
capName: "recording",
|
|
33166
|
+
capScope: "system",
|
|
33167
|
+
addonId: null,
|
|
33168
|
+
access: "view"
|
|
33169
|
+
},
|
|
33076
33170
|
"recording.getDeviceConfig": {
|
|
33077
33171
|
capName: "recording",
|
|
33078
33172
|
capScope: "system",
|
|
@@ -35677,6 +35771,11 @@ Object.freeze({
|
|
|
35677
35771
|
form: "single",
|
|
35678
35772
|
optional: false
|
|
35679
35773
|
}],
|
|
35774
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
35775
|
+
name: "deviceIds",
|
|
35776
|
+
form: "array",
|
|
35777
|
+
optional: false
|
|
35778
|
+
}],
|
|
35680
35779
|
"pipelineAnalytics.getEventMedia": [{
|
|
35681
35780
|
name: "deviceId",
|
|
35682
35781
|
form: "single",
|
|
@@ -36092,11 +36191,21 @@ Object.freeze({
|
|
|
36092
36191
|
form: "single",
|
|
36093
36192
|
optional: false
|
|
36094
36193
|
}],
|
|
36194
|
+
"recording.getAvailabilityBatch": [{
|
|
36195
|
+
name: "deviceIds",
|
|
36196
|
+
form: "array",
|
|
36197
|
+
optional: false
|
|
36198
|
+
}],
|
|
36095
36199
|
"recording.getDaysWithRecordings": [{
|
|
36096
36200
|
name: "deviceId",
|
|
36097
36201
|
form: "single",
|
|
36098
36202
|
optional: false
|
|
36099
36203
|
}],
|
|
36204
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
36205
|
+
name: "deviceIds",
|
|
36206
|
+
form: "array",
|
|
36207
|
+
optional: false
|
|
36208
|
+
}],
|
|
36100
36209
|
"recording.getDeviceConfig": [{
|
|
36101
36210
|
name: "deviceId",
|
|
36102
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",
|