@camstack/addon-smtp-nodemailer 1.2.57 → 1.2.59

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
@@ -12521,7 +12615,10 @@ method(_void(), _void(), { kind: "mutation" }), method(_void(), _void(), { kind:
12521
12615
  id: string(),
12522
12616
  name: string(),
12523
12617
  type: string()
12524
- }))), method(object({}), boolean()), method(object({ params: record(string(), unknown()).optional() }), array(DiscoveryCandidateSchema), {
12618
+ }))), method(object({ stableId: string() }), object({ deviceId: number() }), {
12619
+ kind: "mutation",
12620
+ timeoutMs: 3 * 6e4
12621
+ }), method(object({}), boolean()), method(object({ params: record(string(), unknown()).optional() }), array(DiscoveryCandidateSchema), {
12525
12622
  kind: "mutation",
12526
12623
  auth: "admin"
12527
12624
  }), method(object({}), CreationSchemaOutputSchema), method(object({}), object({ deviceType: _enum(DeviceType).nullable() })), method(object({ candidate: DiscoveryCandidateSchema }), DeviceSummarySchema, {
@@ -12802,7 +12899,8 @@ method(object({
12802
12899
  targetId: number()
12803
12900
  }), MigrateDeviceResultSchema, {
12804
12901
  kind: "mutation",
12805
- auth: "admin"
12902
+ auth: "admin",
12903
+ timeoutMs: 12 * 6e4
12806
12904
  }), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
12807
12905
  deviceId: number(),
12808
12906
  name: string()
@@ -29420,6 +29518,12 @@ Object.freeze({
29420
29518
  addonId: null,
29421
29519
  access: "create"
29422
29520
  },
29521
+ "backup.cancel": {
29522
+ capName: "backup",
29523
+ capScope: "system",
29524
+ addonId: null,
29525
+ access: "create"
29526
+ },
29423
29527
  "backup.delete": {
29424
29528
  capName: "backup",
29425
29529
  capScope: "system",
@@ -29462,6 +29566,12 @@ Object.freeze({
29462
29566
  addonId: null,
29463
29567
  access: "view"
29464
29568
  },
29569
+ "backup.listRuns": {
29570
+ capName: "backup",
29571
+ capScope: "system",
29572
+ addonId: null,
29573
+ access: "view"
29574
+ },
29465
29575
  "backup.listSchedules": {
29466
29576
  capName: "backup",
29467
29577
  capScope: "system",
@@ -30662,6 +30772,12 @@ Object.freeze({
30662
30772
  addonId: null,
30663
30773
  access: "view"
30664
30774
  },
30775
+ "deviceProvider.reloadDevice": {
30776
+ capName: "device-provider",
30777
+ capScope: "system",
30778
+ addonId: null,
30779
+ access: "create"
30780
+ },
30665
30781
  "deviceProvider.start": {
30666
30782
  capName: "device-provider",
30667
30783
  capScope: "system",
@@ -34028,6 +34144,12 @@ Object.freeze({
34028
34144
  addonId: null,
34029
34145
  access: "create"
34030
34146
  },
34147
+ "streamBroker.forgetDeviceHardware": {
34148
+ capName: "stream-broker",
34149
+ capScope: "system",
34150
+ addonId: null,
34151
+ access: "delete"
34152
+ },
34031
34153
  "streamBroker.getAllRtspEntries": {
34032
34154
  capName: "stream-broker",
34033
34155
  capScope: "system",
@@ -36486,6 +36608,11 @@ Object.freeze({
36486
36608
  form: "single",
36487
36609
  optional: false
36488
36610
  }],
36611
+ "streamBroker.forgetDeviceHardware": [{
36612
+ name: "deviceId",
36613
+ form: "single",
36614
+ optional: false
36615
+ }],
36489
36616
  "streamBroker.getDeviceAudioMute": [{
36490
36617
  name: "deviceId",
36491
36618
  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
@@ -12519,7 +12613,10 @@ method(_void(), _void(), { kind: "mutation" }), method(_void(), _void(), { kind:
12519
12613
  id: string(),
12520
12614
  name: string(),
12521
12615
  type: string()
12522
- }))), method(object({}), boolean()), method(object({ params: record(string(), unknown()).optional() }), array(DiscoveryCandidateSchema), {
12616
+ }))), method(object({ stableId: string() }), object({ deviceId: number() }), {
12617
+ kind: "mutation",
12618
+ timeoutMs: 3 * 6e4
12619
+ }), method(object({}), boolean()), method(object({ params: record(string(), unknown()).optional() }), array(DiscoveryCandidateSchema), {
12523
12620
  kind: "mutation",
12524
12621
  auth: "admin"
12525
12622
  }), method(object({}), CreationSchemaOutputSchema), method(object({}), object({ deviceType: _enum(DeviceType).nullable() })), method(object({ candidate: DiscoveryCandidateSchema }), DeviceSummarySchema, {
@@ -12800,7 +12897,8 @@ method(object({
12800
12897
  targetId: number()
12801
12898
  }), MigrateDeviceResultSchema, {
12802
12899
  kind: "mutation",
12803
- auth: "admin"
12900
+ auth: "admin",
12901
+ timeoutMs: 12 * 6e4
12804
12902
  }), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
12805
12903
  deviceId: number(),
12806
12904
  name: string()
@@ -29418,6 +29516,12 @@ Object.freeze({
29418
29516
  addonId: null,
29419
29517
  access: "create"
29420
29518
  },
29519
+ "backup.cancel": {
29520
+ capName: "backup",
29521
+ capScope: "system",
29522
+ addonId: null,
29523
+ access: "create"
29524
+ },
29421
29525
  "backup.delete": {
29422
29526
  capName: "backup",
29423
29527
  capScope: "system",
@@ -29460,6 +29564,12 @@ Object.freeze({
29460
29564
  addonId: null,
29461
29565
  access: "view"
29462
29566
  },
29567
+ "backup.listRuns": {
29568
+ capName: "backup",
29569
+ capScope: "system",
29570
+ addonId: null,
29571
+ access: "view"
29572
+ },
29463
29573
  "backup.listSchedules": {
29464
29574
  capName: "backup",
29465
29575
  capScope: "system",
@@ -30660,6 +30770,12 @@ Object.freeze({
30660
30770
  addonId: null,
30661
30771
  access: "view"
30662
30772
  },
30773
+ "deviceProvider.reloadDevice": {
30774
+ capName: "device-provider",
30775
+ capScope: "system",
30776
+ addonId: null,
30777
+ access: "create"
30778
+ },
30663
30779
  "deviceProvider.start": {
30664
30780
  capName: "device-provider",
30665
30781
  capScope: "system",
@@ -34026,6 +34142,12 @@ Object.freeze({
34026
34142
  addonId: null,
34027
34143
  access: "create"
34028
34144
  },
34145
+ "streamBroker.forgetDeviceHardware": {
34146
+ capName: "stream-broker",
34147
+ capScope: "system",
34148
+ addonId: null,
34149
+ access: "delete"
34150
+ },
34029
34151
  "streamBroker.getAllRtspEntries": {
34030
34152
  capName: "stream-broker",
34031
34153
  capScope: "system",
@@ -36484,6 +36606,11 @@ Object.freeze({
36484
36606
  form: "single",
36485
36607
  optional: false
36486
36608
  }],
36609
+ "streamBroker.forgetDeviceHardware": [{
36610
+ name: "deviceId",
36611
+ form: "single",
36612
+ optional: false
36613
+ }],
36487
36614
  "streamBroker.getDeviceAudioMute": [{
36488
36615
  name: "deviceId",
36489
36616
  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.59",
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",