@camstack/addon-smtp-nodemailer 1.2.51 → 1.2.54
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 +82 -7
- package/dist/smtp.addon.mjs +82 -7
- package/package.json +1 -1
package/dist/smtp.addon.js
CHANGED
|
@@ -7739,7 +7739,8 @@ var OpsLogReasonSchema = _enum([
|
|
|
7739
7739
|
"quota",
|
|
7740
7740
|
"manual",
|
|
7741
7741
|
"operator",
|
|
7742
|
-
"maintenance"
|
|
7742
|
+
"maintenance",
|
|
7743
|
+
"orphaned-device"
|
|
7743
7744
|
]);
|
|
7744
7745
|
/** One audit row, shared verbatim by both domains. */
|
|
7745
7746
|
var OpsLogEntrySchema = object({
|
|
@@ -12770,10 +12771,39 @@ var DevicePersistConfigPayloadSchema = object({
|
|
|
12770
12771
|
deviceId: number(),
|
|
12771
12772
|
data: record(string(), unknown())
|
|
12772
12773
|
});
|
|
12774
|
+
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
12775
|
+
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
12776
|
+
var MigrateSwitchOutcomeSchema = _enum([
|
|
12777
|
+
"off",
|
|
12778
|
+
"on",
|
|
12779
|
+
"not-offered",
|
|
12780
|
+
"unreachable"
|
|
12781
|
+
]);
|
|
12782
|
+
var MigrateSwitchReportSchema = object({
|
|
12783
|
+
deviceId: number(),
|
|
12784
|
+
switchId: CameraSwitchIdSchema,
|
|
12785
|
+
outcome: MigrateSwitchOutcomeSchema,
|
|
12786
|
+
detail: string().optional()
|
|
12787
|
+
});
|
|
12788
|
+
var MigrateDeviceResultSchema = object({
|
|
12789
|
+
sourceId: number(),
|
|
12790
|
+
targetId: number(),
|
|
12791
|
+
switches: array(MigrateSwitchReportSchema).readonly(),
|
|
12792
|
+
/** Switches that could NOT be turned off on the source. Empty is the only
|
|
12793
|
+
* value meaning the replaced hardware is quiet. */
|
|
12794
|
+
sourceStillLive: array(CameraSwitchIdSchema).readonly(),
|
|
12795
|
+
swapped: boolean()
|
|
12796
|
+
});
|
|
12773
12797
|
method(object({
|
|
12774
12798
|
addonId: string(),
|
|
12775
12799
|
stableId: string()
|
|
12776
|
-
}), object({ id: number() }), { kind: "mutation" }), method(
|
|
12800
|
+
}), object({ id: number() }), { kind: "mutation" }), method(object({
|
|
12801
|
+
sourceId: number(),
|
|
12802
|
+
targetId: number()
|
|
12803
|
+
}), MigrateDeviceResultSchema, {
|
|
12804
|
+
kind: "mutation",
|
|
12805
|
+
auth: "admin"
|
|
12806
|
+
}), 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({
|
|
12777
12807
|
deviceId: number(),
|
|
12778
12808
|
name: string()
|
|
12779
12809
|
}), _void(), {
|
|
@@ -13248,6 +13278,35 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
|
13248
13278
|
auth: "admin"
|
|
13249
13279
|
});
|
|
13250
13280
|
/**
|
|
13281
|
+
* Transport bounds for AI capability methods.
|
|
13282
|
+
*
|
|
13283
|
+
* Its own module because `llm.cap.ts` and `llm-runtime.cap.ts` already import
|
|
13284
|
+
* each other: declaring the constant in either one hands the other `undefined`
|
|
13285
|
+
* at module-init time, and an undefined `timeoutMs` silently falls back to the
|
|
13286
|
+
* kernel's 60 s default — the exact failure this constant exists to prevent,
|
|
13287
|
+
* reintroduced invisibly. Found by the guard, not by review.
|
|
13288
|
+
*/
|
|
13289
|
+
/**
|
|
13290
|
+
* Ceiling for a cap method that runs inference or loads a model.
|
|
13291
|
+
*
|
|
13292
|
+
* Deliberately far above anything the AI layer itself may wait for (a summary
|
|
13293
|
+
* asks 180 s by default, a rule may ask 600 s), because the TRANSPORT must
|
|
13294
|
+
* never be the layer that gives up first: when it does, the failure is
|
|
13295
|
+
* reported as a transport error for a model that was still thinking, naming
|
|
13296
|
+
* the wrong layer and hiding the real one.
|
|
13297
|
+
*
|
|
13298
|
+
* Measured 2026-09-03: a 6-image vision request needs 44.8 s warm and ~20 s
|
|
13299
|
+
* more on a cold model load. With no declaration every digest failed at
|
|
13300
|
+
* exactly 60 s and shipped without its text.
|
|
13301
|
+
*
|
|
13302
|
+
* A ceiling, not a budget. The AI layer's own timeouts (the rule's `timeoutMs`,
|
|
13303
|
+
* the profile's `timeoutMs` / `firstTokenTimeoutMs`) remain the things that
|
|
13304
|
+
* decide when to stop, because only they can say WHY.
|
|
13305
|
+
*/
|
|
13306
|
+
var AI_CAP_TRANSPORT_TIMEOUT_MS = 6e5;
|
|
13307
|
+
/** A multi-gigabyte download. An hour is not generous, it is honest. */
|
|
13308
|
+
var AI_MODEL_INSTALL_TIMEOUT_MS = 60 * 6e4;
|
|
13309
|
+
/**
|
|
13251
13310
|
* Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
|
|
13252
13311
|
* surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
|
|
13253
13312
|
* caps stay wire-compatible without a circular cap→cap import.
|
|
@@ -13519,16 +13578,19 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
13519
13578
|
timeoutMs: number().int().positive().optional()
|
|
13520
13579
|
}), LlmGenerateResultSchema, {
|
|
13521
13580
|
kind: "mutation",
|
|
13522
|
-
auth: "admin"
|
|
13581
|
+
auth: "admin",
|
|
13582
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13523
13583
|
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
13524
13584
|
kind: "mutation",
|
|
13525
|
-
auth: "admin"
|
|
13585
|
+
auth: "admin",
|
|
13586
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13526
13587
|
}), method(object({}), _void(), {
|
|
13527
13588
|
kind: "mutation",
|
|
13528
13589
|
auth: "admin"
|
|
13529
13590
|
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
13530
13591
|
kind: "mutation",
|
|
13531
|
-
auth: "admin"
|
|
13592
|
+
auth: "admin",
|
|
13593
|
+
timeoutMs: AI_MODEL_INSTALL_TIMEOUT_MS
|
|
13532
13594
|
}), method(object({ file: string() }), _void(), {
|
|
13533
13595
|
kind: "mutation",
|
|
13534
13596
|
auth: "admin"
|
|
@@ -13696,7 +13758,13 @@ var ProfileRefInputSchema = object({
|
|
|
13696
13758
|
addonId: string(),
|
|
13697
13759
|
profileId: string()
|
|
13698
13760
|
});
|
|
13699
|
-
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
13761
|
+
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
13762
|
+
kind: "mutation",
|
|
13763
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13764
|
+
}), method(GenerateVisionInputSchema, LlmGenerateResultSchema, {
|
|
13765
|
+
kind: "mutation",
|
|
13766
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13767
|
+
}), method(object({
|
|
13700
13768
|
addonId: string().optional(),
|
|
13701
13769
|
requestId: string()
|
|
13702
13770
|
}), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
@@ -13707,7 +13775,8 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }
|
|
|
13707
13775
|
auth: "admin"
|
|
13708
13776
|
}), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
|
|
13709
13777
|
kind: "mutation",
|
|
13710
|
-
auth: "admin"
|
|
13778
|
+
auth: "admin",
|
|
13779
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13711
13780
|
}), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
|
|
13712
13781
|
selector: LlmDefaultSelectorSchema,
|
|
13713
13782
|
profileId: string().nullable()
|
|
@@ -30289,6 +30358,12 @@ Object.freeze({
|
|
|
30289
30358
|
addonId: null,
|
|
30290
30359
|
access: "view"
|
|
30291
30360
|
},
|
|
30361
|
+
"deviceManager.migrateDevice": {
|
|
30362
|
+
capName: "device-manager",
|
|
30363
|
+
capScope: "system",
|
|
30364
|
+
addonId: null,
|
|
30365
|
+
access: "create"
|
|
30366
|
+
},
|
|
30292
30367
|
"deviceManager.persistConfig": {
|
|
30293
30368
|
capName: "device-manager",
|
|
30294
30369
|
capScope: "system",
|
package/dist/smtp.addon.mjs
CHANGED
|
@@ -7737,7 +7737,8 @@ var OpsLogReasonSchema = _enum([
|
|
|
7737
7737
|
"quota",
|
|
7738
7738
|
"manual",
|
|
7739
7739
|
"operator",
|
|
7740
|
-
"maintenance"
|
|
7740
|
+
"maintenance",
|
|
7741
|
+
"orphaned-device"
|
|
7741
7742
|
]);
|
|
7742
7743
|
/** One audit row, shared verbatim by both domains. */
|
|
7743
7744
|
var OpsLogEntrySchema = object({
|
|
@@ -12768,10 +12769,39 @@ var DevicePersistConfigPayloadSchema = object({
|
|
|
12768
12769
|
deviceId: number(),
|
|
12769
12770
|
data: record(string(), unknown())
|
|
12770
12771
|
});
|
|
12772
|
+
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
12773
|
+
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
12774
|
+
var MigrateSwitchOutcomeSchema = _enum([
|
|
12775
|
+
"off",
|
|
12776
|
+
"on",
|
|
12777
|
+
"not-offered",
|
|
12778
|
+
"unreachable"
|
|
12779
|
+
]);
|
|
12780
|
+
var MigrateSwitchReportSchema = object({
|
|
12781
|
+
deviceId: number(),
|
|
12782
|
+
switchId: CameraSwitchIdSchema,
|
|
12783
|
+
outcome: MigrateSwitchOutcomeSchema,
|
|
12784
|
+
detail: string().optional()
|
|
12785
|
+
});
|
|
12786
|
+
var MigrateDeviceResultSchema = object({
|
|
12787
|
+
sourceId: number(),
|
|
12788
|
+
targetId: number(),
|
|
12789
|
+
switches: array(MigrateSwitchReportSchema).readonly(),
|
|
12790
|
+
/** Switches that could NOT be turned off on the source. Empty is the only
|
|
12791
|
+
* value meaning the replaced hardware is quiet. */
|
|
12792
|
+
sourceStillLive: array(CameraSwitchIdSchema).readonly(),
|
|
12793
|
+
swapped: boolean()
|
|
12794
|
+
});
|
|
12771
12795
|
method(object({
|
|
12772
12796
|
addonId: string(),
|
|
12773
12797
|
stableId: string()
|
|
12774
|
-
}), object({ id: number() }), { kind: "mutation" }), method(
|
|
12798
|
+
}), object({ id: number() }), { kind: "mutation" }), method(object({
|
|
12799
|
+
sourceId: number(),
|
|
12800
|
+
targetId: number()
|
|
12801
|
+
}), MigrateDeviceResultSchema, {
|
|
12802
|
+
kind: "mutation",
|
|
12803
|
+
auth: "admin"
|
|
12804
|
+
}), 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({
|
|
12775
12805
|
deviceId: number(),
|
|
12776
12806
|
name: string()
|
|
12777
12807
|
}), _void(), {
|
|
@@ -13246,6 +13276,35 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
|
13246
13276
|
auth: "admin"
|
|
13247
13277
|
});
|
|
13248
13278
|
/**
|
|
13279
|
+
* Transport bounds for AI capability methods.
|
|
13280
|
+
*
|
|
13281
|
+
* Its own module because `llm.cap.ts` and `llm-runtime.cap.ts` already import
|
|
13282
|
+
* each other: declaring the constant in either one hands the other `undefined`
|
|
13283
|
+
* at module-init time, and an undefined `timeoutMs` silently falls back to the
|
|
13284
|
+
* kernel's 60 s default — the exact failure this constant exists to prevent,
|
|
13285
|
+
* reintroduced invisibly. Found by the guard, not by review.
|
|
13286
|
+
*/
|
|
13287
|
+
/**
|
|
13288
|
+
* Ceiling for a cap method that runs inference or loads a model.
|
|
13289
|
+
*
|
|
13290
|
+
* Deliberately far above anything the AI layer itself may wait for (a summary
|
|
13291
|
+
* asks 180 s by default, a rule may ask 600 s), because the TRANSPORT must
|
|
13292
|
+
* never be the layer that gives up first: when it does, the failure is
|
|
13293
|
+
* reported as a transport error for a model that was still thinking, naming
|
|
13294
|
+
* the wrong layer and hiding the real one.
|
|
13295
|
+
*
|
|
13296
|
+
* Measured 2026-09-03: a 6-image vision request needs 44.8 s warm and ~20 s
|
|
13297
|
+
* more on a cold model load. With no declaration every digest failed at
|
|
13298
|
+
* exactly 60 s and shipped without its text.
|
|
13299
|
+
*
|
|
13300
|
+
* A ceiling, not a budget. The AI layer's own timeouts (the rule's `timeoutMs`,
|
|
13301
|
+
* the profile's `timeoutMs` / `firstTokenTimeoutMs`) remain the things that
|
|
13302
|
+
* decide when to stop, because only they can say WHY.
|
|
13303
|
+
*/
|
|
13304
|
+
var AI_CAP_TRANSPORT_TIMEOUT_MS = 6e5;
|
|
13305
|
+
/** A multi-gigabyte download. An hour is not generous, it is honest. */
|
|
13306
|
+
var AI_MODEL_INSTALL_TIMEOUT_MS = 60 * 6e4;
|
|
13307
|
+
/**
|
|
13249
13308
|
* Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
|
|
13250
13309
|
* surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
|
|
13251
13310
|
* caps stay wire-compatible without a circular cap→cap import.
|
|
@@ -13517,16 +13576,19 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
13517
13576
|
timeoutMs: number().int().positive().optional()
|
|
13518
13577
|
}), LlmGenerateResultSchema, {
|
|
13519
13578
|
kind: "mutation",
|
|
13520
|
-
auth: "admin"
|
|
13579
|
+
auth: "admin",
|
|
13580
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13521
13581
|
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
13522
13582
|
kind: "mutation",
|
|
13523
|
-
auth: "admin"
|
|
13583
|
+
auth: "admin",
|
|
13584
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13524
13585
|
}), method(object({}), _void(), {
|
|
13525
13586
|
kind: "mutation",
|
|
13526
13587
|
auth: "admin"
|
|
13527
13588
|
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
13528
13589
|
kind: "mutation",
|
|
13529
|
-
auth: "admin"
|
|
13590
|
+
auth: "admin",
|
|
13591
|
+
timeoutMs: AI_MODEL_INSTALL_TIMEOUT_MS
|
|
13530
13592
|
}), method(object({ file: string() }), _void(), {
|
|
13531
13593
|
kind: "mutation",
|
|
13532
13594
|
auth: "admin"
|
|
@@ -13694,7 +13756,13 @@ var ProfileRefInputSchema = object({
|
|
|
13694
13756
|
addonId: string(),
|
|
13695
13757
|
profileId: string()
|
|
13696
13758
|
});
|
|
13697
|
-
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
13759
|
+
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
13760
|
+
kind: "mutation",
|
|
13761
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13762
|
+
}), method(GenerateVisionInputSchema, LlmGenerateResultSchema, {
|
|
13763
|
+
kind: "mutation",
|
|
13764
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13765
|
+
}), method(object({
|
|
13698
13766
|
addonId: string().optional(),
|
|
13699
13767
|
requestId: string()
|
|
13700
13768
|
}), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
@@ -13705,7 +13773,8 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }
|
|
|
13705
13773
|
auth: "admin"
|
|
13706
13774
|
}), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
|
|
13707
13775
|
kind: "mutation",
|
|
13708
|
-
auth: "admin"
|
|
13776
|
+
auth: "admin",
|
|
13777
|
+
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
13709
13778
|
}), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
|
|
13710
13779
|
selector: LlmDefaultSelectorSchema,
|
|
13711
13780
|
profileId: string().nullable()
|
|
@@ -30287,6 +30356,12 @@ Object.freeze({
|
|
|
30287
30356
|
addonId: null,
|
|
30288
30357
|
access: "view"
|
|
30289
30358
|
},
|
|
30359
|
+
"deviceManager.migrateDevice": {
|
|
30360
|
+
capName: "device-manager",
|
|
30361
|
+
capScope: "system",
|
|
30362
|
+
addonId: null,
|
|
30363
|
+
access: "create"
|
|
30364
|
+
},
|
|
30290
30365
|
"deviceManager.persistConfig": {
|
|
30291
30366
|
capName: "device-manager",
|
|
30292
30367
|
capScope: "system",
|
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.54",
|
|
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",
|