@camstack/addon-smtp-nodemailer 1.2.57 → 1.2.58

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.
@@ -10548,6 +10548,89 @@ var LocationStatSchema = object({
10548
10548
  fileCount: number(),
10549
10549
  present: boolean()
10550
10550
  });
10551
+ /** Lifecycle of a backup run. Terminal states: succeeded / failed / cancelled. */
10552
+ var BackupRunStateSchema = _enum([
10553
+ "queued",
10554
+ "running",
10555
+ "succeeded",
10556
+ "failed",
10557
+ "cancelled"
10558
+ ]);
10559
+ /**
10560
+ * Where a running backup currently is. `queued` before it starts,
10561
+ * `building` while the tar.gz is being staged, `uploading` during the
10562
+ * per-destination fan-out, `done` once terminal.
10563
+ */
10564
+ var BackupRunPhaseSchema = _enum([
10565
+ "queued",
10566
+ "building",
10567
+ "uploading",
10568
+ "done"
10569
+ ]);
10570
+ /**
10571
+ * Observable state of one backup run — readable WHILE it runs via
10572
+ * `backup.listRuns`. This is what makes the execution queue and
10573
+ * `backup.cancel` usable: the 2026-09-04 incident (two concurrent
10574
+ * multi-GB builds, staging 5.1 GB → 18 GB, load 62) was only
10575
+ * diagnosable with `du` because nothing reported that runs existed or
10576
+ * how large the staged archive had grown.
10577
+ */
10578
+ var BackupRunSchema = object({
10579
+ /** Stable run id — the handle `backup.cancel` takes. */
10580
+ id: string(),
10581
+ state: BackupRunStateSchema,
10582
+ phase: BackupRunPhaseSchema,
10583
+ /**
10584
+ * Resolved destination location ids. Empty while queued (targets are
10585
+ * resolved when the run starts, against the then-current policies).
10586
+ */
10587
+ destinationIds: array(string()).readonly(),
10588
+ label: string().optional(),
10589
+ /** ms-epoch when the run was submitted (trigger call / schedule fire). */
10590
+ requestedAt: number(),
10591
+ /** ms-epoch when the run left the queue and started building. */
10592
+ startedAt: number().optional(),
10593
+ /** ms-epoch when the run reached a terminal state. */
10594
+ finishedAt: number().optional(),
10595
+ /** Compressed bytes of the staging archive written so far. */
10596
+ stagedBytes: number(),
10597
+ /** Final staged archive size, once the build phase completes. */
10598
+ archiveSizeBytes: number().optional(),
10599
+ /** Bytes pushed to the destination currently uploading. */
10600
+ uploadedBytes: number(),
10601
+ /** Destinations where the archive fully landed (uploaded + indexed). */
10602
+ completedDestinationIds: array(string()).readonly(),
10603
+ /** Destinations that failed during the fan-out. */
10604
+ failedDestinationIds: array(string()).readonly(),
10605
+ /** Failure message when `state === 'failed'`. */
10606
+ error: string().optional(),
10607
+ /**
10608
+ * 1-based place in the execution queue — 1 = runs next. Present only
10609
+ * while `state === 'queued'`. Stamped by the orchestrator from the
10610
+ * queue's OWN pending order, never derived from timestamps, so the
10611
+ * UI cannot show an order the executor will not honour.
10612
+ */
10613
+ queuePosition: number().int().min(1).optional()
10614
+ });
10615
+ /**
10616
+ * Result of `backup.trigger`. The call still resolves when the run
10617
+ * terminates (compat with schedule-driven runs and the admin UI), but
10618
+ * it now names the run and says whether it had to WAIT: a trigger that
10619
+ * arrives while another run is in flight is enqueued (or joined onto
10620
+ * an identical already-queued run), never started concurrently.
10621
+ */
10622
+ var BackupTriggerResultSchema = object({
10623
+ /** The run this trigger mapped to — poll it via `listRuns`, stop it via `cancel`. */
10624
+ runId: string(),
10625
+ /** True when the run waited behind an in-flight run instead of starting immediately. */
10626
+ queued: boolean(),
10627
+ /** True when this trigger was coalesced onto an identical already-queued run. */
10628
+ joined: boolean(),
10629
+ /** True when the run was cancelled before completing every destination. */
10630
+ cancelled: boolean(),
10631
+ /** One entry per destination the archive landed at (partial on cancel). */
10632
+ entries: array(BackupEntrySchema).readonly()
10633
+ });
10551
10634
  /**
10552
10635
  * A backup schedule — the N:M "entry" that binds one cron cadence to a
10553
10636
  * SET of destination locations. Supersedes the per-location cron on
@@ -10595,7 +10678,10 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
10595
10678
  * retention (manual runs).
10596
10679
  */
10597
10680
  retentionCount: number().int().min(1).max(1e3).optional()
10598
- }).optional(), array(BackupEntrySchema).readonly(), {
10681
+ }).optional(), BackupTriggerResultSchema, {
10682
+ kind: "mutation",
10683
+ auth: "admin"
10684
+ }), method(_void(), array(BackupRunSchema).readonly(), { auth: "admin" }), method(object({ runId: string() }), object({ cancelled: boolean() }), {
10599
10685
  kind: "mutation",
10600
10686
  auth: "admin"
10601
10687
  }), method(_void(), array(BackupEntrySchema).readonly(), { auth: "admin" }), method(_void(), array(LocationStatSchema).readonly(), { auth: "admin" }), method(object({
@@ -11312,6 +11398,14 @@ method(object({
11312
11398
  }), object({ success: literal(true) }), {
11313
11399
  kind: "mutation",
11314
11400
  auth: "admin"
11401
+ }), method(object({ deviceId: number().int().nonnegative() }), object({
11402
+ derivedStreamsDeleted: array(string()).readonly(),
11403
+ assignmentsPurged: boolean(),
11404
+ probeSnapshotsDropped: number().int().nonnegative(),
11405
+ rtspTokenRowsDeleted: number().int().nonnegative()
11406
+ }), {
11407
+ kind: "mutation",
11408
+ auth: "admin"
11315
11409
  }), method(object({
11316
11410
  deviceId: number(),
11317
11411
  /** Absent = the LOWEST assigned profile — a notification attachment is
@@ -29420,6 +29514,12 @@ Object.freeze({
29420
29514
  addonId: null,
29421
29515
  access: "create"
29422
29516
  },
29517
+ "backup.cancel": {
29518
+ capName: "backup",
29519
+ capScope: "system",
29520
+ addonId: null,
29521
+ access: "create"
29522
+ },
29423
29523
  "backup.delete": {
29424
29524
  capName: "backup",
29425
29525
  capScope: "system",
@@ -29462,6 +29562,12 @@ Object.freeze({
29462
29562
  addonId: null,
29463
29563
  access: "view"
29464
29564
  },
29565
+ "backup.listRuns": {
29566
+ capName: "backup",
29567
+ capScope: "system",
29568
+ addonId: null,
29569
+ access: "view"
29570
+ },
29465
29571
  "backup.listSchedules": {
29466
29572
  capName: "backup",
29467
29573
  capScope: "system",
@@ -34028,6 +34134,12 @@ Object.freeze({
34028
34134
  addonId: null,
34029
34135
  access: "create"
34030
34136
  },
34137
+ "streamBroker.forgetDeviceHardware": {
34138
+ capName: "stream-broker",
34139
+ capScope: "system",
34140
+ addonId: null,
34141
+ access: "delete"
34142
+ },
34031
34143
  "streamBroker.getAllRtspEntries": {
34032
34144
  capName: "stream-broker",
34033
34145
  capScope: "system",
@@ -36486,6 +36598,11 @@ Object.freeze({
36486
36598
  form: "single",
36487
36599
  optional: false
36488
36600
  }],
36601
+ "streamBroker.forgetDeviceHardware": [{
36602
+ name: "deviceId",
36603
+ form: "single",
36604
+ optional: false
36605
+ }],
36489
36606
  "streamBroker.getDeviceAudioMute": [{
36490
36607
  name: "deviceId",
36491
36608
  form: "single",
@@ -10546,6 +10546,89 @@ var LocationStatSchema = object({
10546
10546
  fileCount: number(),
10547
10547
  present: boolean()
10548
10548
  });
10549
+ /** Lifecycle of a backup run. Terminal states: succeeded / failed / cancelled. */
10550
+ var BackupRunStateSchema = _enum([
10551
+ "queued",
10552
+ "running",
10553
+ "succeeded",
10554
+ "failed",
10555
+ "cancelled"
10556
+ ]);
10557
+ /**
10558
+ * Where a running backup currently is. `queued` before it starts,
10559
+ * `building` while the tar.gz is being staged, `uploading` during the
10560
+ * per-destination fan-out, `done` once terminal.
10561
+ */
10562
+ var BackupRunPhaseSchema = _enum([
10563
+ "queued",
10564
+ "building",
10565
+ "uploading",
10566
+ "done"
10567
+ ]);
10568
+ /**
10569
+ * Observable state of one backup run — readable WHILE it runs via
10570
+ * `backup.listRuns`. This is what makes the execution queue and
10571
+ * `backup.cancel` usable: the 2026-09-04 incident (two concurrent
10572
+ * multi-GB builds, staging 5.1 GB → 18 GB, load 62) was only
10573
+ * diagnosable with `du` because nothing reported that runs existed or
10574
+ * how large the staged archive had grown.
10575
+ */
10576
+ var BackupRunSchema = object({
10577
+ /** Stable run id — the handle `backup.cancel` takes. */
10578
+ id: string(),
10579
+ state: BackupRunStateSchema,
10580
+ phase: BackupRunPhaseSchema,
10581
+ /**
10582
+ * Resolved destination location ids. Empty while queued (targets are
10583
+ * resolved when the run starts, against the then-current policies).
10584
+ */
10585
+ destinationIds: array(string()).readonly(),
10586
+ label: string().optional(),
10587
+ /** ms-epoch when the run was submitted (trigger call / schedule fire). */
10588
+ requestedAt: number(),
10589
+ /** ms-epoch when the run left the queue and started building. */
10590
+ startedAt: number().optional(),
10591
+ /** ms-epoch when the run reached a terminal state. */
10592
+ finishedAt: number().optional(),
10593
+ /** Compressed bytes of the staging archive written so far. */
10594
+ stagedBytes: number(),
10595
+ /** Final staged archive size, once the build phase completes. */
10596
+ archiveSizeBytes: number().optional(),
10597
+ /** Bytes pushed to the destination currently uploading. */
10598
+ uploadedBytes: number(),
10599
+ /** Destinations where the archive fully landed (uploaded + indexed). */
10600
+ completedDestinationIds: array(string()).readonly(),
10601
+ /** Destinations that failed during the fan-out. */
10602
+ failedDestinationIds: array(string()).readonly(),
10603
+ /** Failure message when `state === 'failed'`. */
10604
+ error: string().optional(),
10605
+ /**
10606
+ * 1-based place in the execution queue — 1 = runs next. Present only
10607
+ * while `state === 'queued'`. Stamped by the orchestrator from the
10608
+ * queue's OWN pending order, never derived from timestamps, so the
10609
+ * UI cannot show an order the executor will not honour.
10610
+ */
10611
+ queuePosition: number().int().min(1).optional()
10612
+ });
10613
+ /**
10614
+ * Result of `backup.trigger`. The call still resolves when the run
10615
+ * terminates (compat with schedule-driven runs and the admin UI), but
10616
+ * it now names the run and says whether it had to WAIT: a trigger that
10617
+ * arrives while another run is in flight is enqueued (or joined onto
10618
+ * an identical already-queued run), never started concurrently.
10619
+ */
10620
+ var BackupTriggerResultSchema = object({
10621
+ /** The run this trigger mapped to — poll it via `listRuns`, stop it via `cancel`. */
10622
+ runId: string(),
10623
+ /** True when the run waited behind an in-flight run instead of starting immediately. */
10624
+ queued: boolean(),
10625
+ /** True when this trigger was coalesced onto an identical already-queued run. */
10626
+ joined: boolean(),
10627
+ /** True when the run was cancelled before completing every destination. */
10628
+ cancelled: boolean(),
10629
+ /** One entry per destination the archive landed at (partial on cancel). */
10630
+ entries: array(BackupEntrySchema).readonly()
10631
+ });
10549
10632
  /**
10550
10633
  * A backup schedule — the N:M "entry" that binds one cron cadence to a
10551
10634
  * SET of destination locations. Supersedes the per-location cron on
@@ -10593,7 +10676,10 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
10593
10676
  * retention (manual runs).
10594
10677
  */
10595
10678
  retentionCount: number().int().min(1).max(1e3).optional()
10596
- }).optional(), array(BackupEntrySchema).readonly(), {
10679
+ }).optional(), BackupTriggerResultSchema, {
10680
+ kind: "mutation",
10681
+ auth: "admin"
10682
+ }), method(_void(), array(BackupRunSchema).readonly(), { auth: "admin" }), method(object({ runId: string() }), object({ cancelled: boolean() }), {
10597
10683
  kind: "mutation",
10598
10684
  auth: "admin"
10599
10685
  }), method(_void(), array(BackupEntrySchema).readonly(), { auth: "admin" }), method(_void(), array(LocationStatSchema).readonly(), { auth: "admin" }), method(object({
@@ -11310,6 +11396,14 @@ method(object({
11310
11396
  }), object({ success: literal(true) }), {
11311
11397
  kind: "mutation",
11312
11398
  auth: "admin"
11399
+ }), method(object({ deviceId: number().int().nonnegative() }), object({
11400
+ derivedStreamsDeleted: array(string()).readonly(),
11401
+ assignmentsPurged: boolean(),
11402
+ probeSnapshotsDropped: number().int().nonnegative(),
11403
+ rtspTokenRowsDeleted: number().int().nonnegative()
11404
+ }), {
11405
+ kind: "mutation",
11406
+ auth: "admin"
11313
11407
  }), method(object({
11314
11408
  deviceId: number(),
11315
11409
  /** Absent = the LOWEST assigned profile — a notification attachment is
@@ -29418,6 +29512,12 @@ Object.freeze({
29418
29512
  addonId: null,
29419
29513
  access: "create"
29420
29514
  },
29515
+ "backup.cancel": {
29516
+ capName: "backup",
29517
+ capScope: "system",
29518
+ addonId: null,
29519
+ access: "create"
29520
+ },
29421
29521
  "backup.delete": {
29422
29522
  capName: "backup",
29423
29523
  capScope: "system",
@@ -29460,6 +29560,12 @@ Object.freeze({
29460
29560
  addonId: null,
29461
29561
  access: "view"
29462
29562
  },
29563
+ "backup.listRuns": {
29564
+ capName: "backup",
29565
+ capScope: "system",
29566
+ addonId: null,
29567
+ access: "view"
29568
+ },
29463
29569
  "backup.listSchedules": {
29464
29570
  capName: "backup",
29465
29571
  capScope: "system",
@@ -34026,6 +34132,12 @@ Object.freeze({
34026
34132
  addonId: null,
34027
34133
  access: "create"
34028
34134
  },
34135
+ "streamBroker.forgetDeviceHardware": {
34136
+ capName: "stream-broker",
34137
+ capScope: "system",
34138
+ addonId: null,
34139
+ access: "delete"
34140
+ },
34029
34141
  "streamBroker.getAllRtspEntries": {
34030
34142
  capName: "stream-broker",
34031
34143
  capScope: "system",
@@ -36484,6 +36596,11 @@ Object.freeze({
36484
36596
  form: "single",
36485
36597
  optional: false
36486
36598
  }],
36599
+ "streamBroker.forgetDeviceHardware": [{
36600
+ name: "deviceId",
36601
+ form: "single",
36602
+ optional: false
36603
+ }],
36487
36604
  "streamBroker.getDeviceAudioMute": [{
36488
36605
  name: "deviceId",
36489
36606
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-smtp-nodemailer",
3
- "version": "1.2.57",
3
+ "version": "1.2.58",
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",