@camstack/addon-smtp-nodemailer 1.2.46 → 1.2.47
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 +72 -0
- package/dist/smtp.addon.mjs +72 -0
- package/package.json +1 -1
package/dist/smtp.addon.js
CHANGED
|
@@ -18774,6 +18774,50 @@ var EventStoreFootprintSchema = object({
|
|
|
18774
18774
|
totalBytes: number().int(),
|
|
18775
18775
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
18776
18776
|
});
|
|
18777
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
18778
|
+
var EventMediaKindFootprintSchema = object({
|
|
18779
|
+
kind: MediaFileKindEnum,
|
|
18780
|
+
/** Media rows of this kind. */
|
|
18781
|
+
rows: number().int(),
|
|
18782
|
+
/** Bytes on disk held by those rows. */
|
|
18783
|
+
bytes: number().int()
|
|
18784
|
+
});
|
|
18785
|
+
/**
|
|
18786
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
18787
|
+
* actually turns on.
|
|
18788
|
+
*
|
|
18789
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
18790
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
18791
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
18792
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
18793
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
18794
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
18795
|
+
*
|
|
18796
|
+
* ## Why `unaccounted*` exists
|
|
18797
|
+
*
|
|
18798
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
18799
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
18800
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
18801
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
18802
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
18803
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
18804
|
+
* against a denominator smaller than the disk.
|
|
18805
|
+
*
|
|
18806
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
18807
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
18808
|
+
*/
|
|
18809
|
+
var EventMediaKindBreakdownSchema = object({
|
|
18810
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
18811
|
+
totalRows: number().int(),
|
|
18812
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
18813
|
+
totalBytes: number().int(),
|
|
18814
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
18815
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
18816
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
18817
|
+
unaccountedRows: number().int(),
|
|
18818
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
18819
|
+
unaccountedBytes: number().int()
|
|
18820
|
+
});
|
|
18777
18821
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
18778
18822
|
var EventPruneCountsSchema = object({
|
|
18779
18823
|
motion: number().int(),
|
|
@@ -18977,6 +19021,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
18977
19021
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
18978
19022
|
kind: "query",
|
|
18979
19023
|
auth: "admin"
|
|
19024
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19025
|
+
kind: "query",
|
|
19026
|
+
auth: "admin"
|
|
18980
19027
|
}), method(object({
|
|
18981
19028
|
olderThanMs: number(),
|
|
18982
19029
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -20941,6 +20988,20 @@ method(object({
|
|
|
20941
20988
|
error: string().optional()
|
|
20942
20989
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
20943
20990
|
providerId: string(),
|
|
20991
|
+
/**
|
|
20992
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
20993
|
+
*
|
|
20994
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
20995
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
20996
|
+
* credential the operator did not retype — and posting that here
|
|
20997
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
20998
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
20999
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
21000
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
21001
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21002
|
+
* every value was typed just now and nothing is stored yet.
|
|
21003
|
+
*/
|
|
21004
|
+
locationId: string().optional(),
|
|
20944
21005
|
config: record(string(), unknown())
|
|
20945
21006
|
}), object({
|
|
20946
21007
|
ok: boolean(),
|
|
@@ -31595,6 +31656,12 @@ Object.freeze({
|
|
|
31595
31656
|
addonId: null,
|
|
31596
31657
|
access: "view"
|
|
31597
31658
|
},
|
|
31659
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
31660
|
+
capName: "pipeline-analytics",
|
|
31661
|
+
capScope: "device",
|
|
31662
|
+
addonId: null,
|
|
31663
|
+
access: "view"
|
|
31664
|
+
},
|
|
31598
31665
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
31599
31666
|
capName: "pipeline-analytics",
|
|
31600
31667
|
capScope: "device",
|
|
@@ -35260,6 +35327,11 @@ Object.freeze({
|
|
|
35260
35327
|
form: "single",
|
|
35261
35328
|
optional: false
|
|
35262
35329
|
}],
|
|
35330
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
35331
|
+
name: "deviceId",
|
|
35332
|
+
form: "single",
|
|
35333
|
+
optional: true
|
|
35334
|
+
}],
|
|
35263
35335
|
"pipelineAnalytics.getGroup": [{
|
|
35264
35336
|
name: "deviceId",
|
|
35265
35337
|
form: "single",
|
package/dist/smtp.addon.mjs
CHANGED
|
@@ -18772,6 +18772,50 @@ var EventStoreFootprintSchema = object({
|
|
|
18772
18772
|
totalBytes: number().int(),
|
|
18773
18773
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
18774
18774
|
});
|
|
18775
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
18776
|
+
var EventMediaKindFootprintSchema = object({
|
|
18777
|
+
kind: MediaFileKindEnum,
|
|
18778
|
+
/** Media rows of this kind. */
|
|
18779
|
+
rows: number().int(),
|
|
18780
|
+
/** Bytes on disk held by those rows. */
|
|
18781
|
+
bytes: number().int()
|
|
18782
|
+
});
|
|
18783
|
+
/**
|
|
18784
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
18785
|
+
* actually turns on.
|
|
18786
|
+
*
|
|
18787
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
18788
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
18789
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
18790
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
18791
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
18792
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
18793
|
+
*
|
|
18794
|
+
* ## Why `unaccounted*` exists
|
|
18795
|
+
*
|
|
18796
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
18797
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
18798
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
18799
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
18800
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
18801
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
18802
|
+
* against a denominator smaller than the disk.
|
|
18803
|
+
*
|
|
18804
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
18805
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
18806
|
+
*/
|
|
18807
|
+
var EventMediaKindBreakdownSchema = object({
|
|
18808
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
18809
|
+
totalRows: number().int(),
|
|
18810
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
18811
|
+
totalBytes: number().int(),
|
|
18812
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
18813
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
18814
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
18815
|
+
unaccountedRows: number().int(),
|
|
18816
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
18817
|
+
unaccountedBytes: number().int()
|
|
18818
|
+
});
|
|
18775
18819
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
18776
18820
|
var EventPruneCountsSchema = object({
|
|
18777
18821
|
motion: number().int(),
|
|
@@ -18975,6 +19019,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
18975
19019
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
18976
19020
|
kind: "query",
|
|
18977
19021
|
auth: "admin"
|
|
19022
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19023
|
+
kind: "query",
|
|
19024
|
+
auth: "admin"
|
|
18978
19025
|
}), method(object({
|
|
18979
19026
|
olderThanMs: number(),
|
|
18980
19027
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -20939,6 +20986,20 @@ method(object({
|
|
|
20939
20986
|
error: string().optional()
|
|
20940
20987
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
20941
20988
|
providerId: string(),
|
|
20989
|
+
/**
|
|
20990
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
20991
|
+
*
|
|
20992
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
20993
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
20994
|
+
* credential the operator did not retype — and posting that here
|
|
20995
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
20996
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
20997
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
20998
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
20999
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21000
|
+
* every value was typed just now and nothing is stored yet.
|
|
21001
|
+
*/
|
|
21002
|
+
locationId: string().optional(),
|
|
20942
21003
|
config: record(string(), unknown())
|
|
20943
21004
|
}), object({
|
|
20944
21005
|
ok: boolean(),
|
|
@@ -31593,6 +31654,12 @@ Object.freeze({
|
|
|
31593
31654
|
addonId: null,
|
|
31594
31655
|
access: "view"
|
|
31595
31656
|
},
|
|
31657
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
31658
|
+
capName: "pipeline-analytics",
|
|
31659
|
+
capScope: "device",
|
|
31660
|
+
addonId: null,
|
|
31661
|
+
access: "view"
|
|
31662
|
+
},
|
|
31596
31663
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
31597
31664
|
capName: "pipeline-analytics",
|
|
31598
31665
|
capScope: "device",
|
|
@@ -35258,6 +35325,11 @@ Object.freeze({
|
|
|
35258
35325
|
form: "single",
|
|
35259
35326
|
optional: false
|
|
35260
35327
|
}],
|
|
35328
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
35329
|
+
name: "deviceId",
|
|
35330
|
+
form: "single",
|
|
35331
|
+
optional: true
|
|
35332
|
+
}],
|
|
35261
35333
|
"pipelineAnalytics.getGroup": [{
|
|
35262
35334
|
name: "deviceId",
|
|
35263
35335
|
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.47",
|
|
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",
|