@camstack/addon-smtp-nodemailer 1.2.79 → 1.2.81

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.
@@ -11970,6 +11970,9 @@ var QueryFilterSchema = object({
11970
11970
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
11971
11971
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
11972
11972
  whereNot: record(string(), unknown()).optional(),
11973
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
11974
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
11975
+ whereNotIn: record(string(), array(unknown())).optional(),
11973
11976
  orderBy: object({
11974
11977
  field: string(),
11975
11978
  direction: _enum(["asc", "desc"])
@@ -11990,7 +11993,8 @@ var MutationFilterSchema = object({
11990
11993
  where: record(string(), unknown()).optional(),
11991
11994
  whereIn: record(string(), array(unknown())).optional(),
11992
11995
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
11993
- whereNot: record(string(), unknown()).optional()
11996
+ whereNot: record(string(), unknown()).optional(),
11997
+ whereNotIn: record(string(), array(unknown())).optional()
11994
11998
  });
11995
11999
  /**
11996
12000
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18480,10 +18484,12 @@ var TrackSourceSchema = _enum([
18480
18484
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18481
18485
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18482
18486
  *
18483
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18484
- * the store's filter language has only positive equality and `whereIn` no
18485
- * negation, no IS NULL so a NULL would be unselectable by ANY predicate and
18486
- * would make the entire pre-column history immortal in one deploy.
18487
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18488
+ * every row is selectable by a positive predicate. (The filter language has
18489
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18490
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18491
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18492
+ * column was designed, and a NOT NULL column is still the better shape.)
18487
18493
  */
18488
18494
  var RetrainStatusSchema = _enum([
18489
18495
  "none",
@@ -19219,7 +19225,9 @@ var RecentTracksQueryInput = object({
19219
19225
  * whose class list is unreadable are kept, and the client's rule stays the
19220
19226
  * exact one.
19221
19227
  */
19222
- classes: array(string()).optional()
19228
+ classes: array(string()).optional(),
19229
+ /** See {@link ExcludeSourcesDoc}. */
19230
+ excludeSources: array(TrackSourceSchema).optional()
19223
19231
  });
19224
19232
  /**
19225
19233
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -19647,7 +19655,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19647
19655
  * selected is an operator who has not narrowed anything, and an empty
19648
19656
  * timeline would read as a camera that saw nothing.
19649
19657
  */
19650
- classes: array(string()).optional()
19658
+ classes: array(string()).optional(),
19659
+ /** See {@link ExcludeSourcesDoc}. */
19660
+ excludeSources: array(TrackSourceSchema).optional()
19651
19661
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19652
19662
  kind: "mutation",
19653
19663
  auth: "admin"
@@ -20152,8 +20162,25 @@ var occupancyRecheckFramesField = {
20152
20162
  * (analyzer attaches detected `regions[]`; onboard does not — the
20153
20163
  * camera typically only reports a binary signal plus an optional
20154
20164
  * channel/AI class which lives in dedicated event channels).
20155
- */
20156
- var MotionSourceEnum = _enum(["onboard", "analyzer"]);
20165
+ *
20166
+ * - `onboard` — the camera's firmware said something moved.
20167
+ * - `analyzer` — this runner's frame-diff said so, and attaches `regions[]`.
20168
+ * - `device-activity` — the DEVICE said it is doing its job: the
20169
+ * `recording-signal` LEVEL the same device raises for the recorder
20170
+ * ([D380](../../../../docs/decisions/adr-0380-a-device-decided-recording-is-a-mode-with-no-schedule-seeded-once.md)),
20171
+ * republished as a motion source. It attaches **nothing** — no regions, no
20172
+ * class: the only fact it carries is that the device is active, and a robot
20173
+ * vacuum that is itself the moving object has no region worth sending. It is
20174
+ * a LEVEL, so unlike `onboard` it has a real falling edge, and unlike
20175
+ * `analyzer` it must not open the frame-diff side-channel — the runner's
20176
+ * `handleOnboardMotionAnalyzer` gate is `source === 'onboard'` and stays that
20177
+ * way ([D392](../../../../docs/decisions/adr-0392-a-device-that-says-it-is-working-is-a-motion-source-of-its-own.md)).
20178
+ */
20179
+ var MotionSourceEnum = _enum([
20180
+ "onboard",
20181
+ "analyzer",
20182
+ "device-activity"
20183
+ ]);
20157
20184
  /**
20158
20185
  * List of motion sources active on a camera. Empty array is valid:
20159
20186
  * "no source" — happens for battery cams without firmware motion when
@@ -11968,6 +11968,9 @@ var QueryFilterSchema = object({
11968
11968
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
11969
11969
  /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
11970
11970
  whereNot: record(string(), unknown()).optional(),
11971
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
11972
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
11973
+ whereNotIn: record(string(), array(unknown())).optional(),
11971
11974
  orderBy: object({
11972
11975
  field: string(),
11973
11976
  direction: _enum(["asc", "desc"])
@@ -11988,7 +11991,8 @@ var MutationFilterSchema = object({
11988
11991
  where: record(string(), unknown()).optional(),
11989
11992
  whereIn: record(string(), array(unknown())).optional(),
11990
11993
  whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
11991
- whereNot: record(string(), unknown()).optional()
11994
+ whereNot: record(string(), unknown()).optional(),
11995
+ whereNotIn: record(string(), array(unknown())).optional()
11992
11996
  });
11993
11997
  /**
11994
11998
  * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
@@ -18478,10 +18482,12 @@ var TrackSourceSchema = _enum([
18478
18482
  * Terminal for the plain `markForTrain` toggle: returning it to `staging` is
18479
18483
  * a deliberate action of the retrain page, not a side effect of a checkbox.
18480
18484
  *
18481
- * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
18482
- * the store's filter language has only positive equality and `whereIn` no
18483
- * negation, no IS NULL so a NULL would be unselectable by ANY predicate and
18484
- * would make the entire pre-column history immortal in one deploy.
18485
+ * There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` so that
18486
+ * every row is selectable by a positive predicate. (The filter language has
18487
+ * since grown the NULL-safe `whereNot` / `whereNotIn` and an `IS NULL` reading
18488
+ * of `where: { f: null }`, which is how {@link TrackSourceSchema} can be
18489
+ * filtered on a NULLABLE column — see `excludeSources`. It did not when this
18490
+ * column was designed, and a NOT NULL column is still the better shape.)
18485
18491
  */
18486
18492
  var RetrainStatusSchema = _enum([
18487
18493
  "none",
@@ -19217,7 +19223,9 @@ var RecentTracksQueryInput = object({
19217
19223
  * whose class list is unreadable are kept, and the client's rule stays the
19218
19224
  * exact one.
19219
19225
  */
19220
- classes: array(string()).optional()
19226
+ classes: array(string()).optional(),
19227
+ /** See {@link ExcludeSourcesDoc}. */
19228
+ excludeSources: array(TrackSourceSchema).optional()
19221
19229
  });
19222
19230
  /**
19223
19231
  * A Summary (D359): the per-camera session envelope that references tracks.
@@ -19645,7 +19653,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19645
19653
  * selected is an operator who has not narrowed anything, and an empty
19646
19654
  * timeline would read as a camera that saw nothing.
19647
19655
  */
19648
- classes: array(string()).optional()
19656
+ classes: array(string()).optional(),
19657
+ /** See {@link ExcludeSourcesDoc}. */
19658
+ excludeSources: array(TrackSourceSchema).optional()
19649
19659
  }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(SummariesQueryInput, SummariesPageSchema), method(object({ id: string() }), SummaryDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
19650
19660
  kind: "mutation",
19651
19661
  auth: "admin"
@@ -20150,8 +20160,25 @@ var occupancyRecheckFramesField = {
20150
20160
  * (analyzer attaches detected `regions[]`; onboard does not — the
20151
20161
  * camera typically only reports a binary signal plus an optional
20152
20162
  * channel/AI class which lives in dedicated event channels).
20153
- */
20154
- var MotionSourceEnum = _enum(["onboard", "analyzer"]);
20163
+ *
20164
+ * - `onboard` — the camera's firmware said something moved.
20165
+ * - `analyzer` — this runner's frame-diff said so, and attaches `regions[]`.
20166
+ * - `device-activity` — the DEVICE said it is doing its job: the
20167
+ * `recording-signal` LEVEL the same device raises for the recorder
20168
+ * ([D380](../../../../docs/decisions/adr-0380-a-device-decided-recording-is-a-mode-with-no-schedule-seeded-once.md)),
20169
+ * republished as a motion source. It attaches **nothing** — no regions, no
20170
+ * class: the only fact it carries is that the device is active, and a robot
20171
+ * vacuum that is itself the moving object has no region worth sending. It is
20172
+ * a LEVEL, so unlike `onboard` it has a real falling edge, and unlike
20173
+ * `analyzer` it must not open the frame-diff side-channel — the runner's
20174
+ * `handleOnboardMotionAnalyzer` gate is `source === 'onboard'` and stays that
20175
+ * way ([D392](../../../../docs/decisions/adr-0392-a-device-that-says-it-is-working-is-a-motion-source-of-its-own.md)).
20176
+ */
20177
+ var MotionSourceEnum = _enum([
20178
+ "onboard",
20179
+ "analyzer",
20180
+ "device-activity"
20181
+ ]);
20155
20182
  /**
20156
20183
  * List of motion sources active on a camera. Empty array is valid:
20157
20184
  * "no source" — happens for battery cams without firmware motion when
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-smtp-nodemailer",
3
- "version": "1.2.79",
3
+ "version": "1.2.81",
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",