@camstack/types 1.2.17 → 1.2.19

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.
Files changed (36) hide show
  1. package/dist/addon.js +2 -2
  2. package/dist/addon.mjs +2 -2
  3. package/dist/capabilities/addons.cap.d.ts +2 -2
  4. package/dist/capabilities/device-manager.cap.d.ts +22 -0
  5. package/dist/capabilities/index.d.ts +2 -2
  6. package/dist/capabilities/llm-runtime.cap.d.ts +3 -3
  7. package/dist/capabilities/llm.cap.d.ts +4 -4
  8. package/dist/capabilities/motion.cap.d.ts +13 -1
  9. package/dist/capabilities/notification-rules.cap.d.ts +142 -0
  10. package/dist/capabilities/pipeline-analytics.cap.d.ts +70 -1
  11. package/dist/capabilities/pipeline-executor.cap.d.ts +2 -2
  12. package/dist/capabilities/pipeline-orchestrator.cap.d.ts +6 -6
  13. package/dist/capabilities/recording-export.cap.d.ts +7 -7
  14. package/dist/capabilities/recording.cap.d.ts +1 -1
  15. package/dist/enums/event-category.d.ts +13 -0
  16. package/dist/enums.js +1 -1
  17. package/dist/enums.mjs +1 -1
  18. package/dist/{event-category-Cdyife4p.js → event-category-39bpf1r_.js} +13 -0
  19. package/dist/{event-category-BLcNejAE.mjs → event-category-Bz24uP1U.mjs} +13 -0
  20. package/dist/generated/addon-api.d.ts +7 -0
  21. package/dist/generated/method-access-map.d.ts +1 -1
  22. package/dist/generated/system-proxy.d.ts +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.js +148 -5
  25. package/dist/index.mjs +145 -6
  26. package/dist/interfaces/addon.d.ts +10 -2
  27. package/dist/interfaces/readiness.d.ts +5 -1
  28. package/dist/interfaces/relocate.d.ts +2 -2
  29. package/dist/lifecycle/job.d.ts +2 -2
  30. package/dist/readiness/readiness-registry.d.ts +32 -2
  31. package/dist/{sleep-Ct4Is70g.mjs → sleep-BYyv9gUM.mjs} +31 -4
  32. package/dist/{sleep-yfPaamGa.js → sleep-mkNQLVPE.js} +31 -4
  33. package/dist/types/detection.d.ts +49 -1
  34. package/dist/types/engine-output.d.ts +19 -19
  35. package/dist/types/pipeline-step.d.ts +2 -2
  36. package/package.json +2 -2
package/dist/addon.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-yfPaamGa.js");
3
- const require_event_category = require("./event-category-Cdyife4p.js");
2
+ const require_sleep = require("./sleep-mkNQLVPE.js");
3
+ const require_event_category = require("./event-category-39bpf1r_.js");
4
4
  const require_err_msg = require("./err-msg-COpsHMw2.js");
5
5
  //#region src/generated/collection-array-methods.ts
6
6
  /**
package/dist/addon.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { A as parseJsonUnknown, Ct as DisposerChain, D as asString, F as ReadinessRegistry, I as ReadinessTimeoutError, M as nodePin, N as readNodePin, P as DATAPLANE_SECRET_HEADER, S as DeviceType, T as asJsonObject, a as viewerUiCapability, dt as BaseAddon, ft as normalizeAddonInitResult, ht as emitReadiness, i as deviceOpsCapability, m as expandCapMethods, o as adminUiCapability, s as createDeviceProxy, t as sleep, z as scopeKey } from "./sleep-Ct4Is70g.mjs";
2
- import { t as EventCategory } from "./event-category-BLcNejAE.mjs";
1
+ import { A as parseJsonUnknown, Ct as DisposerChain, D as asString, F as ReadinessRegistry, I as ReadinessTimeoutError, M as nodePin, N as readNodePin, P as DATAPLANE_SECRET_HEADER, S as DeviceType, T as asJsonObject, a as viewerUiCapability, dt as BaseAddon, ft as normalizeAddonInitResult, ht as emitReadiness, i as deviceOpsCapability, m as expandCapMethods, o as adminUiCapability, s as createDeviceProxy, t as sleep, z as scopeKey } from "./sleep-BYyv9gUM.mjs";
2
+ import { t as EventCategory } from "./event-category-Bz24uP1U.mjs";
3
3
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
4
4
  //#region src/generated/collection-array-methods.ts
5
5
  /**
@@ -634,8 +634,8 @@ export declare const addonsCapability: {
634
634
  finishedAtMs: z.ZodNullable<z.ZodNumber>;
635
635
  }, z.core.$strip>>;
636
636
  state: z.ZodEnum<{
637
- running: "running";
638
637
  failed: "failed";
638
+ running: "running";
639
639
  completed: "completed";
640
640
  "partially-failed": "partially-failed";
641
641
  cancelled: "cancelled";
@@ -710,8 +710,8 @@ export declare const addonsCapability: {
710
710
  finishedAtMs: z.ZodNullable<z.ZodNumber>;
711
711
  }, z.core.$strip>>;
712
712
  state: z.ZodEnum<{
713
- running: "running";
714
713
  failed: "failed";
714
+ running: "running";
715
715
  completed: "completed";
716
716
  "partially-failed": "partially-failed";
717
717
  cancelled: "cancelled";
@@ -1672,6 +1672,28 @@ export declare const deviceManagerCapability: {
1672
1672
  deviceId: z.ZodNumber;
1673
1673
  caps: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
1674
1674
  }, z.core.$strip>, z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodUnknown>>, import("./capability-definition.js").CapabilityMethodKind>;
1675
+ /**
1676
+ * The same aggregate, for a LIST of devices in one round-trip.
1677
+ *
1678
+ * The viewer's camera list is the caller this exists for. Each card asked
1679
+ * for its own badges — battery here, recording mode there — so a ten-camera
1680
+ * install issued N separate procedures per reconcile, each its own message
1681
+ * on the one WebSocket that also carries the WebRTC signalling (the client
1682
+ * has no `httpBatchLink`, so there is no transport-level batching to lean
1683
+ * on: collapsing has to happen at the procedure level, which is here).
1684
+ *
1685
+ * Keyed by device id as a STRING — a JSON object cannot key by number, and
1686
+ * pretending otherwise is how a record survives the wire only in tests.
1687
+ * The per-device value is exactly what `getDeviceStatusAggregate` returns,
1688
+ * so a caller can move between the two without reshaping anything.
1689
+ *
1690
+ * `caps` matters more here than in the single call: a client that needs two
1691
+ * caps should not pay for every status-carrying cap × every device.
1692
+ */
1693
+ readonly getDeviceStatusAggregateBatch: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
1694
+ deviceIds: z.ZodReadonly<z.ZodArray<z.ZodNumber>>;
1695
+ caps: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
1696
+ }, z.core.$strip>, z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodUnknown>>>, import("./capability-definition.js").CapabilityMethodKind>;
1675
1697
  };
1676
1698
  };
1677
1699
  export type IDeviceManagerProvider = import('./capability-definition.js').InferProvider<typeof deviceManagerCapability>;
@@ -73,9 +73,9 @@ export { AddBrokerInputSchema, BrokerConnectionDetailsSchema, BrokerInfoSchema,
73
73
  export type { NetworkAccessStatus, NetworkEndpoint } from './network-access.cap.js';
74
74
  export { NetworkAccessStatusSchema, NetworkEndpointSchema, networkAccessCapability, } from './network-access.cap.js';
75
75
  export { type Attachment, type AttachmentMediaType, AttachmentMediaTypeSchema, AttachmentSchema, type DiscoveredTarget, DiscoveredTargetSchema, type INotificationOutputProvider, type NotificationAction, NotificationActionSchema, type NotificationFormat, NotificationFormatSchema, NotificationSchema, notificationOutputCapability, type RenderedAs, RenderedAsSchema, type SendResult, SendResultSchema, type Target, type TargetKind, type TargetKindCaps, TargetKindCapsSchema, type TargetKindLevel, TargetKindLevelSchema, TargetKindSchema, TargetSchema, type TestResult, TestResultSchema, } from './notification-output.cap.js';
76
- export { type INotificationRulesProvider, NC_CONDITION_CATALOG, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, type NcConditionDescriptor, NcConditionDescriptorSchema, type NcConditions, NcConditionsSchema, type NcDelivery, NcDeliverySchema, type NcHistoryEntry, NcHistoryEntrySchema, type NcHistoryFilter, NcHistoryFilterSchema, type NcHistoryRecordKind, NcHistoryRecordKindSchema, type NcHistoryStatus, NcHistoryStatusSchema, type NcHistorySubject, NcHistorySubjectSchema, type NcMediaFrame, NcMediaFrameSchema, type NcMediaPolicy, NcMediaPolicySchema, type NcOccupancyCondition, NcOccupancyConditionSchema, type NcPlateMatcher, NcPlateMatcherSchema, type NcRule, type NcRuleInput, NcRuleInputSchema, type NcRulePatch, NcRulePatchSchema, NcRuleSchema, type NcRuleTarget, NcRuleTargetSchema, type NcSchedule, NcScheduleSchema, type NcScheduleWindow, NcScheduleWindowSchema, type NcTestResult, NcTestResultSchema, type NcThrottle, NcThrottleSchema, type NcZoneCondition, NcZoneConditionSchema, notificationRulesCapability, } from './notification-rules.cap.js';
76
+ export { type INotificationRulesProvider, NC_CONDITION_CATALOG, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, type NcConditionDescriptor, NcConditionDescriptorSchema, type NcConditions, NcConditionsSchema, type NcCrossing, NcCrossingSchema, type NcDelivery, NcDeliverySchema, type NcHistoryEntry, NcHistoryEntrySchema, type NcHistoryFilter, NcHistoryFilterSchema, type NcHistoryRecordKind, NcHistoryRecordKindSchema, type NcHistoryStatus, NcHistoryStatusSchema, type NcHistorySubject, NcHistorySubjectSchema, type NcMediaFrame, NcMediaFrameSchema, type NcMediaPolicy, NcMediaPolicySchema, type NcOccupancyCondition, NcOccupancyConditionSchema, type NcPlateMatcher, NcPlateMatcherSchema, type NcRule, type NcRuleInput, NcRuleInputSchema, type NcRulePatch, NcRulePatchSchema, NcRuleSchema, type NcRuleTarget, NcRuleTargetSchema, type NcSchedule, NcScheduleSchema, type NcScheduleWindow, NcScheduleWindowSchema, type NcTestResult, NcTestResultSchema, type NcThrottle, type NcThrottleGranularity, NcThrottleGranularitySchema, NcThrottleSchema, type NcZoneCondition, NcZoneConditionSchema, notificationRulesCapability, } from './notification-rules.cap.js';
77
77
  export { type IOauthIntegrationProvider, type OauthIntegrationDescriptor, OauthIntegrationDescriptorSchema, oauthIntegrationCapability, } from './oauth-integration.cap.js';
78
- export { type AudioEvent, AudioEventSchema, type DetectionSource, DetectionSourceSchema, type EventKind, type EventKindCategory, EventKindCategorySchema, type EventKindDescriptor, EventKindDescriptorSchema, type EventKindIcon, EventKindIconSchema, EventKindSchema, type EventPruneCounts, type EventStoreDeviceFootprint, type EventStoreFootprint, type IPipelineAnalyticsProvider, type KeyEvent, KeyEventSchema, type MediaFile, type MediaFileKind, MediaFileSchema, type MotionEvent, MotionEventSchema, type ObjectEvent, ObjectEventSchema, pipelineAnalyticsCapability, type RecentTracksPage, RecentTracksPageSchema, type RecentTracksQuery, RecentTracksQueryInput, type ScoredObjectEvent, ScoredObjectEventSchema, type SensorEvent, SensorEventSchema, type Track, type TrackCascadeCounts, TrackCascadeCountsSchema, type TrackEnvelope, TrackEnvelopeSchema, TrackedDetectionSchema, type TrackProjection, TrackProjectionSchema, TrackSchema, type TrackState, TrackStateSchema, type TrackZoneFilter, TrackZoneFilterSchema, } from './pipeline-analytics.cap.js';
78
+ export { type AudioEvent, AudioEventSchema, type DetectionSource, DetectionSourceSchema, type EventKind, type EventKindCategory, EventKindCategorySchema, type EventKindDescriptor, EventKindDescriptorSchema, type EventKindIcon, EventKindIconSchema, EventKindSchema, type EventPruneCounts, type EventStoreDeviceFootprint, type EventStoreFootprint, type IPipelineAnalyticsProvider, type KeyEvent, KeyEventSchema, type MediaFile, type MediaFileKind, MediaFileSchema, type MotionEvent, MotionEventSchema, type ObjectEvent, ObjectEventSchema, pipelineAnalyticsCapability, type RecentTracksPage, RecentTracksPageSchema, type RecentTracksQuery, RecentTracksQueryInput, type ScoredObjectEvent, ScoredObjectEventSchema, type SensorEvent, SensorEventSchema, type Track, type TrackCascadeCounts, TrackCascadeCountsSchema, type TrackEnvelope, TrackEnvelopeSchema, TrackedDetectionSchema, type TrackProjection, TrackProjectionSchema, TrackSchema, type TrackState, TrackStateSchema, type TrackZoneFilter, TrackZoneFilterSchema, type ZoneCrossing, type ZoneCrossingDirection, ZoneCrossingDirectionSchema, ZoneCrossingSchema, } from './pipeline-analytics.cap.js';
79
79
  export type { NativeCropRef, PipelineStepInputOutput, PipelineValidationIssue, PipelineValidationResult, } from './pipeline-executor.cap.js';
80
80
  export { ModelSubstitutionSchema, NativeCropRefSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, pipelineExecutorCapability, } from './pipeline-executor.cap.js';
81
81
  export type { CameraAssignmentStatus, CameraAudioStatus, CameraBrokerProfile, CameraBrokerStatus, CameraDecoderShm, CameraDecoderStatus, CameraDetectionPhase, CameraDetectionProvisioning, CameraDetectionProvisioningState, CameraDetectionStatus, CameraMotionStatus, CameraRecordingMode, CameraRecordingStatus, CameraSourceStatus, CameraSourceStream, CameraStatus, IngestOwner, NodeInferenceDevice, NodeInferenceDevices, } from './pipeline-orchestrator.cap.js';
@@ -50,9 +50,9 @@ export type ManagedRuntimeConfig = z.infer<typeof ManagedRuntimeConfigSchema>;
50
50
  export declare const LlmRuntimeStatusSchema: z.ZodObject<{
51
51
  nodeId: z.ZodString;
52
52
  state: z.ZodEnum<{
53
- ready: "ready";
54
53
  failed: "failed";
55
54
  stopped: "stopped";
55
+ ready: "ready";
56
56
  starting: "starting";
57
57
  downloading: "downloading";
58
58
  crashed: "crashed";
@@ -216,9 +216,9 @@ export declare const llmRuntimeCapability: {
216
216
  }, z.core.$strip>, z.ZodObject<{
217
217
  nodeId: z.ZodString;
218
218
  state: z.ZodEnum<{
219
- ready: "ready";
220
219
  failed: "failed";
221
220
  stopped: "stopped";
221
+ ready: "ready";
222
222
  starting: "starting";
223
223
  downloading: "downloading";
224
224
  crashed: "crashed";
@@ -237,9 +237,9 @@ export declare const llmRuntimeCapability: {
237
237
  readonly status: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
238
238
  nodeId: z.ZodString;
239
239
  state: z.ZodEnum<{
240
- ready: "ready";
241
240
  failed: "failed";
242
241
  stopped: "stopped";
242
+ ready: "ready";
243
243
  starting: "starting";
244
244
  downloading: "downloading";
245
245
  crashed: "crashed";
@@ -139,9 +139,9 @@ export declare const LlmRuntimeNodeSchema: z.ZodObject<{
139
139
  status: z.ZodOptional<z.ZodObject<{
140
140
  nodeId: z.ZodString;
141
141
  state: z.ZodEnum<{
142
- ready: "ready";
143
142
  failed: "failed";
144
143
  stopped: "stopped";
144
+ ready: "ready";
145
145
  starting: "starting";
146
146
  downloading: "downloading";
147
147
  crashed: "crashed";
@@ -491,9 +491,9 @@ export declare const llmCapability: {
491
491
  status: z.ZodOptional<z.ZodObject<{
492
492
  nodeId: z.ZodString;
493
493
  state: z.ZodEnum<{
494
- ready: "ready";
495
494
  failed: "failed";
496
495
  stopped: "stopped";
496
+ ready: "ready";
497
497
  starting: "starting";
498
498
  downloading: "downloading";
499
499
  crashed: "crashed";
@@ -547,9 +547,9 @@ export declare const llmCapability: {
547
547
  }, z.core.$strip>, z.ZodObject<{
548
548
  nodeId: z.ZodString;
549
549
  state: z.ZodEnum<{
550
- ready: "ready";
551
550
  failed: "failed";
552
551
  stopped: "stopped";
552
+ ready: "ready";
553
553
  starting: "starting";
554
554
  downloading: "downloading";
555
555
  crashed: "crashed";
@@ -570,9 +570,9 @@ export declare const llmCapability: {
570
570
  }, z.core.$strip>, z.ZodObject<{
571
571
  nodeId: z.ZodString;
572
572
  state: z.ZodEnum<{
573
- ready: "ready";
574
573
  failed: "failed";
575
574
  stopped: "stopped";
575
+ ready: "ready";
576
576
  starting: "starting";
577
577
  downloading: "downloading";
578
578
  crashed: "crashed";
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
- import { type InferProvider } from './capability-definition.js';
3
2
  import { DeviceType } from '../device/device-type.js';
3
+ import { type InferProvider } from './capability-definition.js';
4
4
  /**
5
5
  * Hardware / firmware motion sensor cap — binary detected state plus
6
6
  * a timestamp of the last observation. Distinct from
@@ -49,6 +49,18 @@ export declare const motionCapability: {
49
49
  readonly name: "motion";
50
50
  readonly scope: "device";
51
51
  readonly mode: "singleton";
52
+ /**
53
+ * Providers register per-device natives via `ctx.registerNativeCap`
54
+ * (Hikvision/Reolink/Amcrest/Wyze/HA/Homematic/Alexa/Matter) — there is
55
+ * NO system singleton provider. Without this flag `resolveCapMount`
56
+ * derived `{ kind: 'singleton' }`, so `motion.getStatus`/`isDetected`
57
+ * resolved via `registry.getSingleton('motion')` (always null) and every
58
+ * call 412'd "provider not available" while bindings listed a live
59
+ * `motion` native (2026-08-02). The flag routes the router through
60
+ * `requireDeviceScoped` → `getProviderForDevice`, like `motion-trigger`,
61
+ * `snapshot` and every other per-device native cap.
62
+ */
63
+ readonly deviceNative: true;
52
64
  readonly deviceTypes: readonly [DeviceType.Camera, DeviceType.Sensor];
53
65
  readonly methods: {
54
66
  /**
@@ -108,6 +108,30 @@ export declare const NcOccupancyConditionSchema: z.ZodObject<{
108
108
  sustainSeconds: z.ZodDefault<z.ZodNumber>;
109
109
  }, z.core.$strip>;
110
110
  export type NcOccupancyCondition = z.infer<typeof NcOccupancyConditionSchema>;
111
+ /**
112
+ * Which zone-crossing DIRECTION a rule accepts (`ObjectEvent.zoneCrossing`).
113
+ *
114
+ * The values are not symmetric, and deliberately so — the absent value has to
115
+ * mean exactly what every rule authored before this condition existed already
116
+ * does:
117
+ * - `enter` — entries and every NON-crossing record (movement state,
118
+ * package, sensor). Exits are rejected. **This is the absent behaviour**:
119
+ * an operator who never asked for exits must not start receiving them.
120
+ * - `exit` — ONLY an exit crossing. A record that is not a crossing at all
121
+ * fails closed, because "the car left the drive" is a question about a
122
+ * boundary, not about a detection.
123
+ * - `any` — no direction filter; entries, exits and non-crossings alike.
124
+ *
125
+ * A rule asking for a direction should normally also scope `zones`, which the
126
+ * engine evaluates against the crossed zone as well as the current membership
127
+ * (an exit's membership no longer contains the zone it just left).
128
+ */
129
+ export declare const NcCrossingSchema: z.ZodEnum<{
130
+ any: "any";
131
+ enter: "enter";
132
+ exit: "exit";
133
+ }>;
134
+ export type NcCrossing = z.infer<typeof NcCrossingSchema>;
111
135
  /** Admin-zone membership condition (zone IDs as stamped by the ZoneEngine). */
112
136
  export declare const NcZoneConditionSchema: z.ZodObject<{
113
137
  ids: z.ZodArray<z.ZodString>;
@@ -134,6 +158,11 @@ export declare const NcConditionsSchema: z.ZodObject<{
134
158
  }>>;
135
159
  }, z.core.$strip>>;
136
160
  zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
161
+ crossing: z.ZodOptional<z.ZodEnum<{
162
+ any: "any";
163
+ enter: "enter";
164
+ exit: "exit";
165
+ }>>;
137
166
  labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
138
167
  identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
139
168
  plates: z.ZodOptional<z.ZodObject<{
@@ -237,6 +266,23 @@ export declare const NcMediaPolicySchema: z.ZodObject<{
237
266
  }>>;
238
267
  }, z.core.$strip>;
239
268
  export type NcMediaPolicy = z.infer<typeof NcMediaPolicySchema>;
269
+ /**
270
+ * Cooldown GRANULARITY over the subject's class — how much a fired
271
+ * notification suppresses.
272
+ * - `shared` (default, and the absent value) — one window for the whole
273
+ * rule/scope: a cat silences the next dog for `cooldownSec`.
274
+ * - `per-class` — an independent window per detected class, so cat→dog fires
275
+ * at once and cat→cat still waits.
276
+ *
277
+ * AUDIO subjects are ALWAYS per-class regardless of this setting: a scream
278
+ * must not be swallowed by a bark's window (the precedent this generalizes —
279
+ * see `cooldownKey` in the rule engine).
280
+ */
281
+ export declare const NcThrottleGranularitySchema: z.ZodEnum<{
282
+ shared: "shared";
283
+ "per-class": "per-class";
284
+ }>;
285
+ export type NcThrottleGranularity = z.infer<typeof NcThrottleGranularitySchema>;
240
286
  /** Throttle — cooldown survives restarts (rebuilt from the outbox on boot). */
241
287
  export declare const NcThrottleSchema: z.ZodObject<{
242
288
  cooldownSec: z.ZodDefault<z.ZodNumber>;
@@ -244,6 +290,10 @@ export declare const NcThrottleSchema: z.ZodObject<{
244
290
  rule: "rule";
245
291
  "rule-device": "rule-device";
246
292
  }>>;
293
+ granularity: z.ZodOptional<z.ZodEnum<{
294
+ shared: "shared";
295
+ "per-class": "per-class";
296
+ }>>;
247
297
  }, z.core.$strip>;
248
298
  export type NcThrottle = z.infer<typeof NcThrottleSchema>;
249
299
  /** Client-supplied rule fields (server stamps id/createdBy/createdAt/updatedAt). */
@@ -269,6 +319,11 @@ export declare const NcRuleInputSchema: z.ZodObject<{
269
319
  }>>;
270
320
  }, z.core.$strip>>;
271
321
  zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
322
+ crossing: z.ZodOptional<z.ZodEnum<{
323
+ any: "any";
324
+ enter: "enter";
325
+ exit: "exit";
326
+ }>>;
272
327
  labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
273
328
  identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
274
329
  plates: z.ZodOptional<z.ZodObject<{
@@ -355,6 +410,10 @@ export declare const NcRuleInputSchema: z.ZodObject<{
355
410
  rule: "rule";
356
411
  "rule-device": "rule-device";
357
412
  }>>;
413
+ granularity: z.ZodOptional<z.ZodEnum<{
414
+ shared: "shared";
415
+ "per-class": "per-class";
416
+ }>>;
358
417
  }, z.core.$strip>>;
359
418
  template: z.ZodOptional<z.ZodObject<{
360
419
  title: z.ZodOptional<z.ZodString>;
@@ -395,6 +454,11 @@ export declare const NcRulePatchSchema: z.ZodObject<{
395
454
  }>>;
396
455
  }, z.core.$strip>>;
397
456
  zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
457
+ crossing: z.ZodOptional<z.ZodEnum<{
458
+ any: "any";
459
+ enter: "enter";
460
+ exit: "exit";
461
+ }>>;
398
462
  labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
399
463
  identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
400
464
  plates: z.ZodOptional<z.ZodObject<{
@@ -481,6 +545,10 @@ export declare const NcRulePatchSchema: z.ZodObject<{
481
545
  rule: "rule";
482
546
  "rule-device": "rule-device";
483
547
  }>>;
548
+ granularity: z.ZodOptional<z.ZodEnum<{
549
+ shared: "shared";
550
+ "per-class": "per-class";
551
+ }>>;
484
552
  }, z.core.$strip>>>;
485
553
  template: z.ZodOptional<z.ZodOptional<z.ZodObject<{
486
554
  title: z.ZodOptional<z.ZodString>;
@@ -514,6 +582,11 @@ export declare const NcRuleSchema: z.ZodObject<{
514
582
  }>>;
515
583
  }, z.core.$strip>>;
516
584
  zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
585
+ crossing: z.ZodOptional<z.ZodEnum<{
586
+ any: "any";
587
+ enter: "enter";
588
+ exit: "exit";
589
+ }>>;
517
590
  labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
518
591
  identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
519
592
  plates: z.ZodOptional<z.ZodObject<{
@@ -600,6 +673,10 @@ export declare const NcRuleSchema: z.ZodObject<{
600
673
  rule: "rule";
601
674
  "rule-device": "rule-device";
602
675
  }>>;
676
+ granularity: z.ZodOptional<z.ZodEnum<{
677
+ shared: "shared";
678
+ "per-class": "per-class";
679
+ }>>;
603
680
  }, z.core.$strip>>;
604
681
  template: z.ZodOptional<z.ZodObject<{
605
682
  title: z.ZodOptional<z.ZodString>;
@@ -656,6 +733,7 @@ export declare const NcConditionDescriptorSchema: z.ZodObject<{
656
733
  zoneSelection: "zoneSelection";
657
734
  zoneIdList: "zoneIdList";
658
735
  plateMatcher: "plateMatcher";
736
+ crossingSelect: "crossingSelect";
659
737
  polygonDraw: "polygonDraw";
660
738
  }>;
661
739
  operator: z.ZodEnum<{
@@ -816,6 +894,11 @@ export declare const notificationRulesCapability: {
816
894
  }>>;
817
895
  }, z.core.$strip>>;
818
896
  zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
897
+ crossing: z.ZodOptional<z.ZodEnum<{
898
+ any: "any";
899
+ enter: "enter";
900
+ exit: "exit";
901
+ }>>;
819
902
  labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
820
903
  identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
821
904
  plates: z.ZodOptional<z.ZodObject<{
@@ -902,6 +985,10 @@ export declare const notificationRulesCapability: {
902
985
  rule: "rule";
903
986
  "rule-device": "rule-device";
904
987
  }>>;
988
+ granularity: z.ZodOptional<z.ZodEnum<{
989
+ shared: "shared";
990
+ "per-class": "per-class";
991
+ }>>;
905
992
  }, z.core.$strip>>;
906
993
  template: z.ZodOptional<z.ZodObject<{
907
994
  title: z.ZodOptional<z.ZodString>;
@@ -941,6 +1028,11 @@ export declare const notificationRulesCapability: {
941
1028
  }>>;
942
1029
  }, z.core.$strip>>;
943
1030
  zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1031
+ crossing: z.ZodOptional<z.ZodEnum<{
1032
+ any: "any";
1033
+ enter: "enter";
1034
+ exit: "exit";
1035
+ }>>;
944
1036
  labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
945
1037
  identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
946
1038
  plates: z.ZodOptional<z.ZodObject<{
@@ -1027,6 +1119,10 @@ export declare const notificationRulesCapability: {
1027
1119
  rule: "rule";
1028
1120
  "rule-device": "rule-device";
1029
1121
  }>>;
1122
+ granularity: z.ZodOptional<z.ZodEnum<{
1123
+ shared: "shared";
1124
+ "per-class": "per-class";
1125
+ }>>;
1030
1126
  }, z.core.$strip>>;
1031
1127
  template: z.ZodOptional<z.ZodObject<{
1032
1128
  title: z.ZodOptional<z.ZodString>;
@@ -1064,6 +1160,11 @@ export declare const notificationRulesCapability: {
1064
1160
  }>>;
1065
1161
  }, z.core.$strip>>;
1066
1162
  zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1163
+ crossing: z.ZodOptional<z.ZodEnum<{
1164
+ any: "any";
1165
+ enter: "enter";
1166
+ exit: "exit";
1167
+ }>>;
1067
1168
  labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
1068
1169
  identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
1069
1170
  plates: z.ZodOptional<z.ZodObject<{
@@ -1150,6 +1251,10 @@ export declare const notificationRulesCapability: {
1150
1251
  rule: "rule";
1151
1252
  "rule-device": "rule-device";
1152
1253
  }>>;
1254
+ granularity: z.ZodOptional<z.ZodEnum<{
1255
+ shared: "shared";
1256
+ "per-class": "per-class";
1257
+ }>>;
1153
1258
  }, z.core.$strip>>;
1154
1259
  template: z.ZodOptional<z.ZodObject<{
1155
1260
  title: z.ZodOptional<z.ZodString>;
@@ -1181,6 +1286,11 @@ export declare const notificationRulesCapability: {
1181
1286
  }>>;
1182
1287
  }, z.core.$strip>>;
1183
1288
  zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1289
+ crossing: z.ZodOptional<z.ZodEnum<{
1290
+ any: "any";
1291
+ enter: "enter";
1292
+ exit: "exit";
1293
+ }>>;
1184
1294
  labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
1185
1295
  identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
1186
1296
  plates: z.ZodOptional<z.ZodObject<{
@@ -1267,6 +1377,10 @@ export declare const notificationRulesCapability: {
1267
1377
  rule: "rule";
1268
1378
  "rule-device": "rule-device";
1269
1379
  }>>;
1380
+ granularity: z.ZodOptional<z.ZodEnum<{
1381
+ shared: "shared";
1382
+ "per-class": "per-class";
1383
+ }>>;
1270
1384
  }, z.core.$strip>>;
1271
1385
  template: z.ZodOptional<z.ZodObject<{
1272
1386
  title: z.ZodOptional<z.ZodString>;
@@ -1307,6 +1421,11 @@ export declare const notificationRulesCapability: {
1307
1421
  }>>;
1308
1422
  }, z.core.$strip>>;
1309
1423
  zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1424
+ crossing: z.ZodOptional<z.ZodEnum<{
1425
+ any: "any";
1426
+ enter: "enter";
1427
+ exit: "exit";
1428
+ }>>;
1310
1429
  labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
1311
1430
  identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
1312
1431
  plates: z.ZodOptional<z.ZodObject<{
@@ -1393,6 +1512,10 @@ export declare const notificationRulesCapability: {
1393
1512
  rule: "rule";
1394
1513
  "rule-device": "rule-device";
1395
1514
  }>>;
1515
+ granularity: z.ZodOptional<z.ZodEnum<{
1516
+ shared: "shared";
1517
+ "per-class": "per-class";
1518
+ }>>;
1396
1519
  }, z.core.$strip>>>;
1397
1520
  template: z.ZodOptional<z.ZodOptional<z.ZodObject<{
1398
1521
  title: z.ZodOptional<z.ZodString>;
@@ -1425,6 +1548,11 @@ export declare const notificationRulesCapability: {
1425
1548
  }>>;
1426
1549
  }, z.core.$strip>>;
1427
1550
  zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1551
+ crossing: z.ZodOptional<z.ZodEnum<{
1552
+ any: "any";
1553
+ enter: "enter";
1554
+ exit: "exit";
1555
+ }>>;
1428
1556
  labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
1429
1557
  identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
1430
1558
  plates: z.ZodOptional<z.ZodObject<{
@@ -1511,6 +1639,10 @@ export declare const notificationRulesCapability: {
1511
1639
  rule: "rule";
1512
1640
  "rule-device": "rule-device";
1513
1641
  }>>;
1642
+ granularity: z.ZodOptional<z.ZodEnum<{
1643
+ shared: "shared";
1644
+ "per-class": "per-class";
1645
+ }>>;
1514
1646
  }, z.core.$strip>>;
1515
1647
  template: z.ZodOptional<z.ZodObject<{
1516
1648
  title: z.ZodOptional<z.ZodString>;
@@ -1566,6 +1698,11 @@ export declare const notificationRulesCapability: {
1566
1698
  }>>;
1567
1699
  }, z.core.$strip>>;
1568
1700
  zonesExclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
1701
+ crossing: z.ZodOptional<z.ZodEnum<{
1702
+ any: "any";
1703
+ enter: "enter";
1704
+ exit: "exit";
1705
+ }>>;
1569
1706
  labelEquals: z.ZodOptional<z.ZodArray<z.ZodString>>;
1570
1707
  identities: z.ZodOptional<z.ZodArray<z.ZodString>>;
1571
1708
  plates: z.ZodOptional<z.ZodObject<{
@@ -1652,6 +1789,10 @@ export declare const notificationRulesCapability: {
1652
1789
  rule: "rule";
1653
1790
  "rule-device": "rule-device";
1654
1791
  }>>;
1792
+ granularity: z.ZodOptional<z.ZodEnum<{
1793
+ shared: "shared";
1794
+ "per-class": "per-class";
1795
+ }>>;
1655
1796
  }, z.core.$strip>>;
1656
1797
  template: z.ZodOptional<z.ZodObject<{
1657
1798
  title: z.ZodOptional<z.ZodString>;
@@ -1715,6 +1856,7 @@ export declare const notificationRulesCapability: {
1715
1856
  zoneSelection: "zoneSelection";
1716
1857
  zoneIdList: "zoneIdList";
1717
1858
  plateMatcher: "plateMatcher";
1859
+ crossingSelect: "crossingSelect";
1718
1860
  polygonDraw: "polygonDraw";
1719
1861
  }>;
1720
1862
  operator: z.ZodEnum<{
@@ -296,6 +296,43 @@ export declare const DetectionSourceSchema: z.ZodEnum<{
296
296
  onboard: "onboard";
297
297
  }>;
298
298
  export type DetectionSource = z.infer<typeof DetectionSourceSchema>;
299
+ /**
300
+ * Which WAY a subject crossed a zone boundary. An entry and an exit are two
301
+ * different notifications ("the parcel arrived" / "the car left the drive"),
302
+ * and until this existed they were indistinguishable on the persisted record —
303
+ * which is why exits were computed and dropped at the emit boundary rather
304
+ * than doubling every zone-scoped rule.
305
+ */
306
+ export declare const ZoneCrossingDirectionSchema: z.ZodEnum<{
307
+ enter: "enter";
308
+ exit: "exit";
309
+ }>;
310
+ export type ZoneCrossingDirection = z.infer<typeof ZoneCrossingDirectionSchema>;
311
+ /**
312
+ * The confirmed zone crossing that produced an object event. Present ONLY on
313
+ * an event emitted BY a crossing (`zone.enter` / `zone.exit`); a movement-state
314
+ * event (`object.entering` / `leaving` / `stationary` / `loitering`) and an
315
+ * appearance event carry none, so a rule asking for a direction fails closed
316
+ * on them.
317
+ *
318
+ * Exactly ONE crossing per event: the emitter turns each confirmed crossing
319
+ * into its own event, so a frame in which a track enters A while leaving B
320
+ * produces two events with two directions — never one ambiguous row.
321
+ *
322
+ * `zoneId` is load-bearing for an EXIT: the event's `zones` list is the
323
+ * membership the box has NOW, and by definition it no longer contains the zone
324
+ * that was just left. Without the id here, a zone-scoped rule could never match
325
+ * the exit it asked for.
326
+ */
327
+ export declare const ZoneCrossingSchema: z.ZodObject<{
328
+ direction: z.ZodEnum<{
329
+ enter: "enter";
330
+ exit: "exit";
331
+ }>;
332
+ zoneId: z.ZodString;
333
+ zoneName: z.ZodOptional<z.ZodString>;
334
+ }, z.core.$strip>;
335
+ export type ZoneCrossing = z.infer<typeof ZoneCrossingSchema>;
299
336
  declare const ObjectEventSchema: z.ZodObject<{
300
337
  kind: z.ZodLiteral<"object">;
301
338
  source: z.ZodOptional<z.ZodEnum<{
@@ -321,6 +358,14 @@ declare const ObjectEventSchema: z.ZodObject<{
321
358
  new: "new";
322
359
  entered: "entered";
323
360
  }>>;
361
+ zoneCrossing: z.ZodOptional<z.ZodObject<{
362
+ direction: z.ZodEnum<{
363
+ enter: "enter";
364
+ exit: "exit";
365
+ }>;
366
+ zoneId: z.ZodString;
367
+ zoneName: z.ZodOptional<z.ZodString>;
368
+ }, z.core.$strip>>;
324
369
  frameWidth: z.ZodOptional<z.ZodNumber>;
325
370
  frameHeight: z.ZodOptional<z.ZodNumber>;
326
371
  mediaKey: z.ZodOptional<z.ZodString>;
@@ -520,6 +565,14 @@ export declare const ScoredObjectEventSchema: z.ZodObject<{
520
565
  new: "new";
521
566
  entered: "entered";
522
567
  }>>;
568
+ zoneCrossing: z.ZodOptional<z.ZodObject<{
569
+ direction: z.ZodEnum<{
570
+ enter: "enter";
571
+ exit: "exit";
572
+ }>;
573
+ zoneId: z.ZodString;
574
+ zoneName: z.ZodOptional<z.ZodString>;
575
+ }, z.core.$strip>>;
523
576
  frameWidth: z.ZodOptional<z.ZodNumber>;
524
577
  frameHeight: z.ZodOptional<z.ZodNumber>;
525
578
  mediaKey: z.ZodOptional<z.ZodString>;
@@ -959,6 +1012,14 @@ export declare const pipelineAnalyticsCapability: {
959
1012
  new: "new";
960
1013
  entered: "entered";
961
1014
  }>>;
1015
+ zoneCrossing: z.ZodOptional<z.ZodObject<{
1016
+ direction: z.ZodEnum<{
1017
+ enter: "enter";
1018
+ exit: "exit";
1019
+ }>;
1020
+ zoneId: z.ZodString;
1021
+ zoneName: z.ZodOptional<z.ZodString>;
1022
+ }, z.core.$strip>>;
962
1023
  frameWidth: z.ZodOptional<z.ZodNumber>;
963
1024
  frameHeight: z.ZodOptional<z.ZodNumber>;
964
1025
  mediaKey: z.ZodOptional<z.ZodString>;
@@ -1235,9 +1296,9 @@ export declare const pipelineAnalyticsCapability: {
1235
1296
  readonly getMediaRelocateStatus: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{}, z.core.$strip>, z.ZodReadonly<z.ZodArray<z.ZodObject<{
1236
1297
  jobId: z.ZodString;
1237
1298
  state: z.ZodEnum<{
1238
- running: "running";
1239
1299
  done: "done";
1240
1300
  failed: "failed";
1301
+ running: "running";
1241
1302
  cancelled: "cancelled";
1242
1303
  }>;
1243
1304
  fromLocationId: z.ZodString;
@@ -1403,6 +1464,14 @@ export declare const pipelineAnalyticsCapability: {
1403
1464
  new: "new";
1404
1465
  entered: "entered";
1405
1466
  }>>;
1467
+ zoneCrossing: z.ZodOptional<z.ZodObject<{
1468
+ direction: z.ZodEnum<{
1469
+ enter: "enter";
1470
+ exit: "exit";
1471
+ }>;
1472
+ zoneId: z.ZodString;
1473
+ zoneName: z.ZodOptional<z.ZodString>;
1474
+ }, z.core.$strip>>;
1406
1475
  frameWidth: z.ZodOptional<z.ZodNumber>;
1407
1476
  frameHeight: z.ZodOptional<z.ZodNumber>;
1408
1477
  mediaKey: z.ZodOptional<z.ZodString>;
@@ -381,9 +381,9 @@ declare const EngineProvisioningSchema: z.ZodObject<{
381
381
  }>>;
382
382
  device: z.ZodNullable<z.ZodString>;
383
383
  state: z.ZodEnum<{
384
- ready: "ready";
385
384
  failed: "failed";
386
385
  idle: "idle";
386
+ ready: "ready";
387
387
  installing: "installing";
388
388
  verifying: "verifying";
389
389
  }>;
@@ -530,9 +530,9 @@ export declare const pipelineExecutorCapability: {
530
530
  }>>;
531
531
  device: z.ZodNullable<z.ZodString>;
532
532
  state: z.ZodEnum<{
533
- ready: "ready";
534
533
  failed: "failed";
535
534
  idle: "idle";
535
+ ready: "ready";
536
536
  installing: "installing";
537
537
  verifying: "verifying";
538
538
  }>;