@camstack/addon-smtp-nodemailer 1.2.52 → 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.
@@ -13278,6 +13278,35 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
13278
13278
  auth: "admin"
13279
13279
  });
13280
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
+ /**
13281
13310
  * Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
13282
13311
  * surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
13283
13312
  * caps stay wire-compatible without a circular cap→cap import.
@@ -13549,16 +13578,19 @@ method(LlmGenerateBaseInputSchema.extend({
13549
13578
  timeoutMs: number().int().positive().optional()
13550
13579
  }), LlmGenerateResultSchema, {
13551
13580
  kind: "mutation",
13552
- auth: "admin"
13581
+ auth: "admin",
13582
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13553
13583
  }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
13554
13584
  kind: "mutation",
13555
- auth: "admin"
13585
+ auth: "admin",
13586
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13556
13587
  }), method(object({}), _void(), {
13557
13588
  kind: "mutation",
13558
13589
  auth: "admin"
13559
13590
  }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
13560
13591
  kind: "mutation",
13561
- auth: "admin"
13592
+ auth: "admin",
13593
+ timeoutMs: AI_MODEL_INSTALL_TIMEOUT_MS
13562
13594
  }), method(object({ file: string() }), _void(), {
13563
13595
  kind: "mutation",
13564
13596
  auth: "admin"
@@ -13726,7 +13758,13 @@ var ProfileRefInputSchema = object({
13726
13758
  addonId: string(),
13727
13759
  profileId: string()
13728
13760
  });
13729
- method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({
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({
13730
13768
  addonId: string().optional(),
13731
13769
  requestId: string()
13732
13770
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
@@ -13737,7 +13775,8 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }
13737
13775
  auth: "admin"
13738
13776
  }), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
13739
13777
  kind: "mutation",
13740
- auth: "admin"
13778
+ auth: "admin",
13779
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13741
13780
  }), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
13742
13781
  selector: LlmDefaultSelectorSchema,
13743
13782
  profileId: string().nullable()
@@ -13276,6 +13276,35 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
13276
13276
  auth: "admin"
13277
13277
  });
13278
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
+ /**
13279
13308
  * Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
13280
13309
  * surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
13281
13310
  * caps stay wire-compatible without a circular cap→cap import.
@@ -13547,16 +13576,19 @@ method(LlmGenerateBaseInputSchema.extend({
13547
13576
  timeoutMs: number().int().positive().optional()
13548
13577
  }), LlmGenerateResultSchema, {
13549
13578
  kind: "mutation",
13550
- auth: "admin"
13579
+ auth: "admin",
13580
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13551
13581
  }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
13552
13582
  kind: "mutation",
13553
- auth: "admin"
13583
+ auth: "admin",
13584
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13554
13585
  }), method(object({}), _void(), {
13555
13586
  kind: "mutation",
13556
13587
  auth: "admin"
13557
13588
  }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
13558
13589
  kind: "mutation",
13559
- auth: "admin"
13590
+ auth: "admin",
13591
+ timeoutMs: AI_MODEL_INSTALL_TIMEOUT_MS
13560
13592
  }), method(object({ file: string() }), _void(), {
13561
13593
  kind: "mutation",
13562
13594
  auth: "admin"
@@ -13724,7 +13756,13 @@ var ProfileRefInputSchema = object({
13724
13756
  addonId: string(),
13725
13757
  profileId: string()
13726
13758
  });
13727
- method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({
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({
13728
13766
  addonId: string().optional(),
13729
13767
  requestId: string()
13730
13768
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
@@ -13735,7 +13773,8 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }
13735
13773
  auth: "admin"
13736
13774
  }), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
13737
13775
  kind: "mutation",
13738
- auth: "admin"
13776
+ auth: "admin",
13777
+ timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
13739
13778
  }), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
13740
13779
  selector: LlmDefaultSelectorSchema,
13741
13780
  profileId: string().nullable()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-smtp-nodemailer",
3
- "version": "1.2.52",
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",