@camstack/addon-provider-petkit 0.2.24 → 0.2.26

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/addon.js CHANGED
@@ -1101,7 +1101,7 @@ var Nodepetkit = class {
1101
1101
  }
1102
1102
  };
1103
1103
  //#endregion
1104
- //#region ../types/dist/event-category-XfKNtfCc.mjs
1104
+ //#region ../types/dist/event-category-CIa_iT6b.mjs
1105
1105
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
1106
1106
  EventCategory["SystemBoot"] = "system.boot";
1107
1107
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -1117,6 +1117,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
1117
1117
  */
1118
1118
  EventCategory["SystemRestartCompleted"] = "system.restart-completed";
1119
1119
  /**
1120
+ * The hub reissued its own TLS certificate at boot (`ensureTlsCert`).
1121
+ * Emitted only when the material on disk actually changed, so an
1122
+ * operator who trusted the old certificate by hand is told rather than
1123
+ * discovering it as a browser error. Payload `TlsCertChangedPayload`.
1124
+ *
1125
+ * Rule: docs/decisions/adr-0227-*.md
1126
+ */
1127
+ EventCategory["SystemTlsCertChanged"] = "system.tls-cert-changed";
1128
+ /**
1120
1129
  * A newer addon or server-root package version was found by the
1121
1130
  * authoritative registry check. Emitted once when any observed
1122
1131
  * `latestVersion` changes (or a package/node first appears behind);
@@ -20100,6 +20109,12 @@ var CameraStatusSchema = object({
20100
20109
  /** Unix timestamp (ms) when this snapshot was composed server-side. */
20101
20110
  fetchedAt: number()
20102
20111
  });
20112
+ var InferenceDeviceExclusionReasonSchema = _enum([
20113
+ "disabled",
20114
+ "unavailable",
20115
+ "cannot-host-camera-root",
20116
+ "accelerator-preferred"
20117
+ ]);
20103
20118
  var NodeInferenceDeviceSchema = object({
20104
20119
  /** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
20105
20120
  key: string(),
@@ -20130,7 +20145,17 @@ var NodeInferenceDeviceSchema = object({
20130
20145
  * available per format; this is the stored selection that becomes the
20131
20146
  * default for EVERY camera landing on this accelerator.
20132
20147
  */
20133
- steps: record(string(), DeviceStepConfigSchema).optional()
20148
+ steps: record(string(), DeviceStepConfigSchema).optional(),
20149
+ /**
20150
+ * `null` when the device IS a camera-root candidate on this node; otherwise
20151
+ * the reason the dispatcher drops it. Computed by the SAME
20152
+ * `resolveInferenceDeviceEligibility` the dispatcher runs, so this view can
20153
+ * never disagree with the election — deriving it in the UI from
20154
+ * `enabled`/`available` would silently miss `cannot-host-camera-root` (needs
20155
+ * the node's model catalog) and `accelerator-preferred` (needs the node-wide
20156
+ * "an accelerator is serving" predicate).
20157
+ */
20158
+ exclusion: InferenceDeviceExclusionReasonSchema.nullable()
20134
20159
  });
20135
20160
  var NodeInferenceDevicesSchema = object({
20136
20161
  nodeId: string(),
@@ -24989,7 +25014,12 @@ var ListResultSchema = object({
24989
25014
  probedAt: number()
24990
25015
  });
24991
25016
  var PreferredSchema = LocalInterfaceSchema.nullable();
24992
- var GetConnectionEndpointsResultSchema = object({ endpoints: array(object({
25017
+ /**
25018
+ * Candidate base URL for the SDK to race on connect. Order matters —
25019
+ * the SDK should attempt these top-to-bottom with a short per-candidate
25020
+ * timeout (e.g. 1500ms) and cache the winner for the session.
25021
+ */
25022
+ var ConnectionEndpointSchema = object({
24993
25023
  /** Operator-facing label (e.g. "LAN — en0", "Public tunnel"). */
24994
25024
  label: string(),
24995
25025
  /** Fully-formed base URL with scheme + host + port. */
@@ -25032,7 +25062,42 @@ var GetConnectionEndpointsResultSchema = object({ endpoints: array(object({
25032
25062
  * ordering between polls.
25033
25063
  */
25034
25064
  priority: number()
25035
- })).readonly() });
25065
+ });
25066
+ /**
25067
+ * Where the advertised local port came from. Ordered most → least
25068
+ * authoritative, and the whole point of returning it: a client must be able to
25069
+ * tell a FACT about the hub's socket from an echo of its own guess.
25070
+ */
25071
+ var LocalPortSourceEnum = _enum([
25072
+ "server-config",
25073
+ "server-env",
25074
+ "caller-hint",
25075
+ "default"
25076
+ ]);
25077
+ /** The port every LAN/loopback `baseUrl` in the same result was built with. */
25078
+ var AdvertisedLocalPortSchema = object({
25079
+ port: number().int().min(1).max(65535),
25080
+ source: LocalPortSourceEnum
25081
+ });
25082
+ var GetConnectionEndpointsResultSchema = object({
25083
+ endpoints: array(ConnectionEndpointSchema).readonly(),
25084
+ /**
25085
+ * The port the hub built the LAN/loopback URLs with, and where that number
25086
+ * came from.
25087
+ *
25088
+ * Returned rather than merely applied, because "the URL is right" and "the
25089
+ * client can KNOW the URL is right" are different properties. A client that
25090
+ * only sees a corrected URL cannot distinguish a hub that fixed the port from
25091
+ * a hub that echoed the port the client sent, so it cannot decide whether to
25092
+ * race the candidate or discard it. With `source` it can: anything but
25093
+ * `caller-hint` is the hub's own socket.
25094
+ *
25095
+ * Absent on hubs predating this field — a client that finds it missing is
25096
+ * talking to an echoing hub and must degrade exactly as it does for
25097
+ * `caller-hint`.
25098
+ */
25099
+ localPort: AdvertisedLocalPortSchema
25100
+ });
25036
25101
  /**
25037
25102
  * The chosen outbound endpoint for notification artifacts. `baseUrl: null` =
25038
25103
  * AUTO (resolved from the candidate ranking at send time); `resolved` reports
@@ -25053,8 +25118,13 @@ var AllowedAddressesSchema = object({
25053
25118
  */
25054
25119
  addresses: array(string()).readonly() });
25055
25120
  method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
25056
- /** Local hub HTTP port to use in base URLs. */
25057
- port: number().int().min(1).max(65535),
25121
+ /**
25122
+ * LEGACY HINT — do not send from new code. Kept optional so clients
25123
+ * written against the echoing contract keep working; the hub uses it
25124
+ * only when it cannot read its own port, and says so via
25125
+ * `localPort.source === 'caller-hint'`.
25126
+ */
25127
+ port: number().int().min(1).max(65535).optional(),
25058
25128
  /** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
25059
25129
  * candidate. Default `true`. */
25060
25130
  includeLoopback: boolean().optional(),
package/dist/addon.mjs CHANGED
@@ -1100,7 +1100,7 @@ var Nodepetkit = class {
1100
1100
  }
1101
1101
  };
1102
1102
  //#endregion
1103
- //#region ../types/dist/event-category-XfKNtfCc.mjs
1103
+ //#region ../types/dist/event-category-CIa_iT6b.mjs
1104
1104
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
1105
1105
  EventCategory["SystemBoot"] = "system.boot";
1106
1106
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -1116,6 +1116,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
1116
1116
  */
1117
1117
  EventCategory["SystemRestartCompleted"] = "system.restart-completed";
1118
1118
  /**
1119
+ * The hub reissued its own TLS certificate at boot (`ensureTlsCert`).
1120
+ * Emitted only when the material on disk actually changed, so an
1121
+ * operator who trusted the old certificate by hand is told rather than
1122
+ * discovering it as a browser error. Payload `TlsCertChangedPayload`.
1123
+ *
1124
+ * Rule: docs/decisions/adr-0227-*.md
1125
+ */
1126
+ EventCategory["SystemTlsCertChanged"] = "system.tls-cert-changed";
1127
+ /**
1119
1128
  * A newer addon or server-root package version was found by the
1120
1129
  * authoritative registry check. Emitted once when any observed
1121
1130
  * `latestVersion` changes (or a package/node first appears behind);
@@ -20099,6 +20108,12 @@ var CameraStatusSchema = object({
20099
20108
  /** Unix timestamp (ms) when this snapshot was composed server-side. */
20100
20109
  fetchedAt: number()
20101
20110
  });
20111
+ var InferenceDeviceExclusionReasonSchema = _enum([
20112
+ "disabled",
20113
+ "unavailable",
20114
+ "cannot-host-camera-root",
20115
+ "accelerator-preferred"
20116
+ ]);
20102
20117
  var NodeInferenceDeviceSchema = object({
20103
20118
  /** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
20104
20119
  key: string(),
@@ -20129,7 +20144,17 @@ var NodeInferenceDeviceSchema = object({
20129
20144
  * available per format; this is the stored selection that becomes the
20130
20145
  * default for EVERY camera landing on this accelerator.
20131
20146
  */
20132
- steps: record(string(), DeviceStepConfigSchema).optional()
20147
+ steps: record(string(), DeviceStepConfigSchema).optional(),
20148
+ /**
20149
+ * `null` when the device IS a camera-root candidate on this node; otherwise
20150
+ * the reason the dispatcher drops it. Computed by the SAME
20151
+ * `resolveInferenceDeviceEligibility` the dispatcher runs, so this view can
20152
+ * never disagree with the election — deriving it in the UI from
20153
+ * `enabled`/`available` would silently miss `cannot-host-camera-root` (needs
20154
+ * the node's model catalog) and `accelerator-preferred` (needs the node-wide
20155
+ * "an accelerator is serving" predicate).
20156
+ */
20157
+ exclusion: InferenceDeviceExclusionReasonSchema.nullable()
20133
20158
  });
20134
20159
  var NodeInferenceDevicesSchema = object({
20135
20160
  nodeId: string(),
@@ -24988,7 +25013,12 @@ var ListResultSchema = object({
24988
25013
  probedAt: number()
24989
25014
  });
24990
25015
  var PreferredSchema = LocalInterfaceSchema.nullable();
24991
- var GetConnectionEndpointsResultSchema = object({ endpoints: array(object({
25016
+ /**
25017
+ * Candidate base URL for the SDK to race on connect. Order matters —
25018
+ * the SDK should attempt these top-to-bottom with a short per-candidate
25019
+ * timeout (e.g. 1500ms) and cache the winner for the session.
25020
+ */
25021
+ var ConnectionEndpointSchema = object({
24992
25022
  /** Operator-facing label (e.g. "LAN — en0", "Public tunnel"). */
24993
25023
  label: string(),
24994
25024
  /** Fully-formed base URL with scheme + host + port. */
@@ -25031,7 +25061,42 @@ var GetConnectionEndpointsResultSchema = object({ endpoints: array(object({
25031
25061
  * ordering between polls.
25032
25062
  */
25033
25063
  priority: number()
25034
- })).readonly() });
25064
+ });
25065
+ /**
25066
+ * Where the advertised local port came from. Ordered most → least
25067
+ * authoritative, and the whole point of returning it: a client must be able to
25068
+ * tell a FACT about the hub's socket from an echo of its own guess.
25069
+ */
25070
+ var LocalPortSourceEnum = _enum([
25071
+ "server-config",
25072
+ "server-env",
25073
+ "caller-hint",
25074
+ "default"
25075
+ ]);
25076
+ /** The port every LAN/loopback `baseUrl` in the same result was built with. */
25077
+ var AdvertisedLocalPortSchema = object({
25078
+ port: number().int().min(1).max(65535),
25079
+ source: LocalPortSourceEnum
25080
+ });
25081
+ var GetConnectionEndpointsResultSchema = object({
25082
+ endpoints: array(ConnectionEndpointSchema).readonly(),
25083
+ /**
25084
+ * The port the hub built the LAN/loopback URLs with, and where that number
25085
+ * came from.
25086
+ *
25087
+ * Returned rather than merely applied, because "the URL is right" and "the
25088
+ * client can KNOW the URL is right" are different properties. A client that
25089
+ * only sees a corrected URL cannot distinguish a hub that fixed the port from
25090
+ * a hub that echoed the port the client sent, so it cannot decide whether to
25091
+ * race the candidate or discard it. With `source` it can: anything but
25092
+ * `caller-hint` is the hub's own socket.
25093
+ *
25094
+ * Absent on hubs predating this field — a client that finds it missing is
25095
+ * talking to an echoing hub and must degrade exactly as it does for
25096
+ * `caller-hint`.
25097
+ */
25098
+ localPort: AdvertisedLocalPortSchema
25099
+ });
25035
25100
  /**
25036
25101
  * The chosen outbound endpoint for notification artifacts. `baseUrl: null` =
25037
25102
  * AUTO (resolved from the candidate ranking at send time); `resolved` reports
@@ -25052,8 +25117,13 @@ var AllowedAddressesSchema = object({
25052
25117
  */
25053
25118
  addresses: array(string()).readonly() });
25054
25119
  method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
25055
- /** Local hub HTTP port to use in base URLs. */
25056
- port: number().int().min(1).max(65535),
25120
+ /**
25121
+ * LEGACY HINT — do not send from new code. Kept optional so clients
25122
+ * written against the echoing contract keep working; the hub uses it
25123
+ * only when it cannot read its own port, and says so via
25124
+ * `localPort.source === 'caller-hint'`.
25125
+ */
25126
+ port: number().int().min(1).max(65535).optional(),
25057
25127
  /** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
25058
25128
  * candidate. Default `true`. */
25059
25129
  includeLoopback: boolean().optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-petkit",
3
- "version": "0.2.24",
3
+ "version": "0.2.26",
4
4
  "description": "PetKit smart-feeder device-provider addon for CamStack — wraps the @apocaliss92/nodepetkit PetKit cloud client",
5
5
  "keywords": [
6
6
  "camstack",