@camstack/addon-smtp-nodemailer 1.2.153 → 1.2.154
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/CHANGELOG.md +6 -0
- package/dist/smtp.addon.js +38 -11
- package/dist/smtp.addon.mjs +38 -11
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.2.154] - 2026-11-08
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Its integration-instances provider declares its instance kind and stamps it on every instance.
|
|
15
|
+
|
|
10
16
|
## [1.2.153] - 2026-11-08
|
|
11
17
|
|
|
12
18
|
### Changed
|
package/dist/smtp.addon.js
CHANGED
|
@@ -6044,7 +6044,7 @@ var ZodIssueCode = {
|
|
|
6044
6044
|
var ZodFirstPartyTypeKind;
|
|
6045
6045
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6046
6046
|
//#endregion
|
|
6047
|
-
//#region ../types/dist/sleep-
|
|
6047
|
+
//#region ../types/dist/sleep-CGPZyzB5.mjs
|
|
6048
6048
|
/**
|
|
6049
6049
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6050
6050
|
* window to float samples (D455).
|
|
@@ -7260,6 +7260,7 @@ var RecordIntegrationInstances = class {
|
|
|
7260
7260
|
this.secretKeys = topLevelSecretKeys(kind.declaration.secretPaths);
|
|
7261
7261
|
this.secretMaps = secretMapKeys(kind.declaration.secretPaths);
|
|
7262
7262
|
this.nameField = kind.declaration.entry?.nameField ?? "name";
|
|
7263
|
+
if (hooks.kindOf === void 0 && hooks.description.kinds.length !== 1) throw new Error(`record kind '${kind.name}': describe().kinds has ${hooks.description.kinds.length} entries, so kindOf is required to say which one an instance is`);
|
|
7263
7264
|
}
|
|
7264
7265
|
/**
|
|
7265
7266
|
* One instance read for the addon's own runtime; null when absent. When the keychain is
|
|
@@ -7301,10 +7302,21 @@ var RecordIntegrationInstances = class {
|
|
|
7301
7302
|
}
|
|
7302
7303
|
return out;
|
|
7303
7304
|
}
|
|
7305
|
+
/** The kind an instance body is of: the provider's `kindOf`, else its one declared kind. */
|
|
7306
|
+
kindOfBody(body) {
|
|
7307
|
+
if (this.hooks.kindOf !== void 0) {
|
|
7308
|
+
const id = this.hooks.kindOf(body);
|
|
7309
|
+
if (!this.hooks.description.kinds.some((declared) => declared.id === id)) throw new Error(`record kind '${this.kind.name}': kindOf returned '${id}', which describe().kinds does not declare (D1013)`);
|
|
7310
|
+
return id;
|
|
7311
|
+
}
|
|
7312
|
+
const only = this.hooks.description.kinds[0];
|
|
7313
|
+
if (only === void 0) throw new Error(`record kind '${this.kind.name}' declares no kinds`);
|
|
7314
|
+
return only.id;
|
|
7315
|
+
}
|
|
7304
7316
|
viewOf(record) {
|
|
7305
7317
|
const shown = secretViewsOf(this.records.owner, this.kind.name, record.id, this.kind.declaration, record.data);
|
|
7306
7318
|
const rawName = record.data[this.nameField];
|
|
7307
|
-
const kind = this.
|
|
7319
|
+
const kind = this.kindOfBody(record.data);
|
|
7308
7320
|
const health = this.hooks.health?.(record.data, record.id);
|
|
7309
7321
|
return {
|
|
7310
7322
|
id: record.id,
|
|
@@ -7312,7 +7324,7 @@ var RecordIntegrationInstances = class {
|
|
|
7312
7324
|
configured: this.hooks.configured(record.data),
|
|
7313
7325
|
enabled: isInstanceEnabled(record.data),
|
|
7314
7326
|
formValues: shown,
|
|
7315
|
-
|
|
7327
|
+
kind,
|
|
7316
7328
|
...health?.status !== void 0 ? { status: health.status } : {},
|
|
7317
7329
|
...health?.lastCheckedAt !== void 0 ? { lastCheckedAt: health.lastCheckedAt } : {}
|
|
7318
7330
|
};
|
|
@@ -48949,7 +48961,7 @@ DeviceType.MediaPlayer, method(deviceOnly, _void(), {
|
|
|
48949
48961
|
kind: "mutation",
|
|
48950
48962
|
auth: "protected"
|
|
48951
48963
|
});
|
|
48952
|
-
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.PetFountain, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Heater, DeviceType.Dryer, DeviceType.Gateway, DeviceType.Camera, DeviceType.Fan, DeviceType.Lock, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Gateway, DeviceType.Hub, DeviceType.Camera, DeviceType.Sensor, DeviceType.MediaPlayer, DeviceType.Vacuum, DeviceType.Generic, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.PetFountain, DeviceType.Fan, DeviceType.Humidifier, DeviceType.Climate, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder, DeviceType.Heater;
|
|
48964
|
+
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.PetFountain, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Heater, DeviceType.Dryer, DeviceType.Gateway, DeviceType.Camera, DeviceType.Fan, DeviceType.Lock, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Gateway, DeviceType.Hub, DeviceType.Camera, DeviceType.Sensor, DeviceType.MediaPlayer, DeviceType.Vacuum, DeviceType.Generic, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.PetFountain, DeviceType.Fan, DeviceType.Humidifier, DeviceType.Climate, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.MediaPlayer;
|
|
48953
48965
|
var NUMBER = {
|
|
48954
48966
|
kind: "fixed",
|
|
48955
48967
|
result: ["number"]
|
|
@@ -54679,10 +54691,11 @@ var IntegrationInstanceDescriptionSchema = object({
|
|
|
54679
54691
|
/** True when `testInstance` really probes the remote. */
|
|
54680
54692
|
canTest: boolean(),
|
|
54681
54693
|
/**
|
|
54682
|
-
* The kinds an instance can be of
|
|
54683
|
-
* Add flow asks which first and sends it as
|
|
54694
|
+
* The kinds an instance can be of (D1013 rule 1), each naming its `functionCap`. One entry:
|
|
54695
|
+
* nothing to choose; more than one: the Add flow asks which first and sends it as
|
|
54696
|
+
* `createInstance.kind`. Never empty: every instance belongs to exactly one kind.
|
|
54684
54697
|
*/
|
|
54685
|
-
kinds: array(IntegrationInstanceKindSchema).
|
|
54698
|
+
kinds: array(IntegrationInstanceKindSchema).min(1),
|
|
54686
54699
|
/**
|
|
54687
54700
|
* The provider accepts `createInstance.id` for an id that once existed (an adopted id, because
|
|
54688
54701
|
* devices carry it). The UI then offers "restore under its old id" on Add. Absent means no.
|
|
@@ -54718,8 +54731,8 @@ var IntegrationInstanceSchema = object({
|
|
|
54718
54731
|
* the body is the one store, `setInstanceEnabled` the one writer (epic #440, step 3).
|
|
54719
54732
|
*/
|
|
54720
54733
|
enabled: boolean().optional(),
|
|
54721
|
-
/** The kind of this instance
|
|
54722
|
-
kind: string().
|
|
54734
|
+
/** The kind of this instance: exactly one of `describe().kinds[].id` (D1013 rule 2). */
|
|
54735
|
+
kind: string().min(1),
|
|
54723
54736
|
/** Values for the instance form; a secret is a `SecretFieldView`, never text. */
|
|
54724
54737
|
formValues: record(string(), unknown()),
|
|
54725
54738
|
status: IntegrationInstanceStatusSchema.optional(),
|
|
@@ -71656,6 +71669,7 @@ var RemoteLayoutComponentSchema = object({
|
|
|
71656
71669
|
});
|
|
71657
71670
|
});
|
|
71658
71671
|
method(object({}), array(RemoteLayoutComponentSchema), { auth: "protected" });
|
|
71672
|
+
DeviceType.MediaPlayer;
|
|
71659
71673
|
var RunningStateSourceSchema = _enum(["native", "assigned"]);
|
|
71660
71674
|
object({
|
|
71661
71675
|
/** null = unknown — never coerced to false (D393). */
|
|
@@ -136195,7 +136209,14 @@ function buildMailboxInstances(records, deps) {
|
|
|
136195
136209
|
role: "services",
|
|
136196
136210
|
instanceMode: "multiple",
|
|
136197
136211
|
kind: "mailbox",
|
|
136198
|
-
canTest: true
|
|
136212
|
+
canTest: true,
|
|
136213
|
+
kinds: [{
|
|
136214
|
+
id: MAILBOX_INSTANCE_KIND,
|
|
136215
|
+
label: "Inbound mailbox (SMTP)",
|
|
136216
|
+
functionCap: "broker",
|
|
136217
|
+
role: "services",
|
|
136218
|
+
brokerKind: SMTP_INBOUND_KIND
|
|
136219
|
+
}]
|
|
136199
136220
|
},
|
|
136200
136221
|
formSchema: () => mailboxSettingsSchema(),
|
|
136201
136222
|
initialBody: (name) => newMailboxBody(name),
|
|
@@ -145931,7 +145952,13 @@ var SmtpNodemailerAddon = class extends BaseAddon {
|
|
|
145931
145952
|
role: "services",
|
|
145932
145953
|
instanceMode: "multiple",
|
|
145933
145954
|
kind: "relays",
|
|
145934
|
-
canTest: true
|
|
145955
|
+
canTest: true,
|
|
145956
|
+
kinds: [{
|
|
145957
|
+
id: "relays",
|
|
145958
|
+
label: "SMTP relay",
|
|
145959
|
+
functionCap: "smtp-provider",
|
|
145960
|
+
role: "services"
|
|
145961
|
+
}]
|
|
145935
145962
|
},
|
|
145936
145963
|
formSchema: () => this.relayForm(),
|
|
145937
145964
|
initialBody: (name) => ({
|
package/dist/smtp.addon.mjs
CHANGED
|
@@ -6042,7 +6042,7 @@ var ZodIssueCode = {
|
|
|
6042
6042
|
var ZodFirstPartyTypeKind;
|
|
6043
6043
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6044
6044
|
//#endregion
|
|
6045
|
-
//#region ../types/dist/sleep-
|
|
6045
|
+
//#region ../types/dist/sleep-CGPZyzB5.mjs
|
|
6046
6046
|
/**
|
|
6047
6047
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6048
6048
|
* window to float samples (D455).
|
|
@@ -7258,6 +7258,7 @@ var RecordIntegrationInstances = class {
|
|
|
7258
7258
|
this.secretKeys = topLevelSecretKeys(kind.declaration.secretPaths);
|
|
7259
7259
|
this.secretMaps = secretMapKeys(kind.declaration.secretPaths);
|
|
7260
7260
|
this.nameField = kind.declaration.entry?.nameField ?? "name";
|
|
7261
|
+
if (hooks.kindOf === void 0 && hooks.description.kinds.length !== 1) throw new Error(`record kind '${kind.name}': describe().kinds has ${hooks.description.kinds.length} entries, so kindOf is required to say which one an instance is`);
|
|
7261
7262
|
}
|
|
7262
7263
|
/**
|
|
7263
7264
|
* One instance read for the addon's own runtime; null when absent. When the keychain is
|
|
@@ -7299,10 +7300,21 @@ var RecordIntegrationInstances = class {
|
|
|
7299
7300
|
}
|
|
7300
7301
|
return out;
|
|
7301
7302
|
}
|
|
7303
|
+
/** The kind an instance body is of: the provider's `kindOf`, else its one declared kind. */
|
|
7304
|
+
kindOfBody(body) {
|
|
7305
|
+
if (this.hooks.kindOf !== void 0) {
|
|
7306
|
+
const id = this.hooks.kindOf(body);
|
|
7307
|
+
if (!this.hooks.description.kinds.some((declared) => declared.id === id)) throw new Error(`record kind '${this.kind.name}': kindOf returned '${id}', which describe().kinds does not declare (D1013)`);
|
|
7308
|
+
return id;
|
|
7309
|
+
}
|
|
7310
|
+
const only = this.hooks.description.kinds[0];
|
|
7311
|
+
if (only === void 0) throw new Error(`record kind '${this.kind.name}' declares no kinds`);
|
|
7312
|
+
return only.id;
|
|
7313
|
+
}
|
|
7302
7314
|
viewOf(record) {
|
|
7303
7315
|
const shown = secretViewsOf(this.records.owner, this.kind.name, record.id, this.kind.declaration, record.data);
|
|
7304
7316
|
const rawName = record.data[this.nameField];
|
|
7305
|
-
const kind = this.
|
|
7317
|
+
const kind = this.kindOfBody(record.data);
|
|
7306
7318
|
const health = this.hooks.health?.(record.data, record.id);
|
|
7307
7319
|
return {
|
|
7308
7320
|
id: record.id,
|
|
@@ -7310,7 +7322,7 @@ var RecordIntegrationInstances = class {
|
|
|
7310
7322
|
configured: this.hooks.configured(record.data),
|
|
7311
7323
|
enabled: isInstanceEnabled(record.data),
|
|
7312
7324
|
formValues: shown,
|
|
7313
|
-
|
|
7325
|
+
kind,
|
|
7314
7326
|
...health?.status !== void 0 ? { status: health.status } : {},
|
|
7315
7327
|
...health?.lastCheckedAt !== void 0 ? { lastCheckedAt: health.lastCheckedAt } : {}
|
|
7316
7328
|
};
|
|
@@ -48947,7 +48959,7 @@ DeviceType.MediaPlayer, method(deviceOnly, _void(), {
|
|
|
48947
48959
|
kind: "mutation",
|
|
48948
48960
|
auth: "protected"
|
|
48949
48961
|
});
|
|
48950
|
-
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.PetFountain, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Heater, DeviceType.Dryer, DeviceType.Gateway, DeviceType.Camera, DeviceType.Fan, DeviceType.Lock, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Gateway, DeviceType.Hub, DeviceType.Camera, DeviceType.Sensor, DeviceType.MediaPlayer, DeviceType.Vacuum, DeviceType.Generic, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.PetFountain, DeviceType.Fan, DeviceType.Humidifier, DeviceType.Climate, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder, DeviceType.Heater;
|
|
48962
|
+
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.PetFountain, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Heater, DeviceType.Dryer, DeviceType.Gateway, DeviceType.Camera, DeviceType.Fan, DeviceType.Lock, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Gateway, DeviceType.Hub, DeviceType.Camera, DeviceType.Sensor, DeviceType.MediaPlayer, DeviceType.Vacuum, DeviceType.Generic, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.PetFountain, DeviceType.Fan, DeviceType.Humidifier, DeviceType.Climate, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.MediaPlayer;
|
|
48951
48963
|
var NUMBER = {
|
|
48952
48964
|
kind: "fixed",
|
|
48953
48965
|
result: ["number"]
|
|
@@ -54677,10 +54689,11 @@ var IntegrationInstanceDescriptionSchema = object({
|
|
|
54677
54689
|
/** True when `testInstance` really probes the remote. */
|
|
54678
54690
|
canTest: boolean(),
|
|
54679
54691
|
/**
|
|
54680
|
-
* The kinds an instance can be of
|
|
54681
|
-
* Add flow asks which first and sends it as
|
|
54692
|
+
* The kinds an instance can be of (D1013 rule 1), each naming its `functionCap`. One entry:
|
|
54693
|
+
* nothing to choose; more than one: the Add flow asks which first and sends it as
|
|
54694
|
+
* `createInstance.kind`. Never empty: every instance belongs to exactly one kind.
|
|
54682
54695
|
*/
|
|
54683
|
-
kinds: array(IntegrationInstanceKindSchema).
|
|
54696
|
+
kinds: array(IntegrationInstanceKindSchema).min(1),
|
|
54684
54697
|
/**
|
|
54685
54698
|
* The provider accepts `createInstance.id` for an id that once existed (an adopted id, because
|
|
54686
54699
|
* devices carry it). The UI then offers "restore under its old id" on Add. Absent means no.
|
|
@@ -54716,8 +54729,8 @@ var IntegrationInstanceSchema = object({
|
|
|
54716
54729
|
* the body is the one store, `setInstanceEnabled` the one writer (epic #440, step 3).
|
|
54717
54730
|
*/
|
|
54718
54731
|
enabled: boolean().optional(),
|
|
54719
|
-
/** The kind of this instance
|
|
54720
|
-
kind: string().
|
|
54732
|
+
/** The kind of this instance: exactly one of `describe().kinds[].id` (D1013 rule 2). */
|
|
54733
|
+
kind: string().min(1),
|
|
54721
54734
|
/** Values for the instance form; a secret is a `SecretFieldView`, never text. */
|
|
54722
54735
|
formValues: record(string(), unknown()),
|
|
54723
54736
|
status: IntegrationInstanceStatusSchema.optional(),
|
|
@@ -71654,6 +71667,7 @@ var RemoteLayoutComponentSchema = object({
|
|
|
71654
71667
|
});
|
|
71655
71668
|
});
|
|
71656
71669
|
method(object({}), array(RemoteLayoutComponentSchema), { auth: "protected" });
|
|
71670
|
+
DeviceType.MediaPlayer;
|
|
71657
71671
|
var RunningStateSourceSchema = _enum(["native", "assigned"]);
|
|
71658
71672
|
object({
|
|
71659
71673
|
/** null = unknown — never coerced to false (D393). */
|
|
@@ -136193,7 +136207,14 @@ function buildMailboxInstances(records, deps) {
|
|
|
136193
136207
|
role: "services",
|
|
136194
136208
|
instanceMode: "multiple",
|
|
136195
136209
|
kind: "mailbox",
|
|
136196
|
-
canTest: true
|
|
136210
|
+
canTest: true,
|
|
136211
|
+
kinds: [{
|
|
136212
|
+
id: MAILBOX_INSTANCE_KIND,
|
|
136213
|
+
label: "Inbound mailbox (SMTP)",
|
|
136214
|
+
functionCap: "broker",
|
|
136215
|
+
role: "services",
|
|
136216
|
+
brokerKind: SMTP_INBOUND_KIND
|
|
136217
|
+
}]
|
|
136197
136218
|
},
|
|
136198
136219
|
formSchema: () => mailboxSettingsSchema(),
|
|
136199
136220
|
initialBody: (name) => newMailboxBody(name),
|
|
@@ -145929,7 +145950,13 @@ var SmtpNodemailerAddon = class extends BaseAddon {
|
|
|
145929
145950
|
role: "services",
|
|
145930
145951
|
instanceMode: "multiple",
|
|
145931
145952
|
kind: "relays",
|
|
145932
|
-
canTest: true
|
|
145953
|
+
canTest: true,
|
|
145954
|
+
kinds: [{
|
|
145955
|
+
id: "relays",
|
|
145956
|
+
label: "SMTP relay",
|
|
145957
|
+
functionCap: "smtp-provider",
|
|
145958
|
+
role: "services"
|
|
145959
|
+
}]
|
|
145933
145960
|
},
|
|
145934
145961
|
formSchema: () => this.relayForm(),
|
|
145935
145962
|
initialBody: (name) => ({
|
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.154",
|
|
4
4
|
"description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by notifier addons.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"smtp-server"
|
|
60
60
|
],
|
|
61
61
|
"requires": {
|
|
62
|
-
"server": ">=1.2.
|
|
62
|
+
"server": ">=1.2.810"
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
65
|
"files": [
|