@camstack/addon-pipeline 1.2.38 → 1.2.40
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/audio-analyzer/index.js +1 -1
- package/dist/audio-analyzer/index.mjs +1 -1
- package/dist/detection-pipeline/index.js +145 -175
- package/dist/detection-pipeline/index.mjs +120 -150
- package/dist/{dist-Du7_SNiR.mjs → dist-C6p8jcji.mjs} +495 -113
- package/dist/{dist-BvFLZyhW.js → dist-DcMBfoCg.js} +495 -113
- package/dist/{step-definitions-C8tk9fPJ.mjs → event-loop-stall-monitor-BHqCesa1.mjs} +139 -2
- package/dist/{step-definitions-i8O-hxyI.js → event-loop-stall-monitor-oL9xanvX.js} +150 -1
- package/dist/lazy-sharp-B-mb8uWx.mjs +20 -0
- package/dist/lazy-sharp-CcYuXtsa.js +25 -0
- package/dist/motion-wasm/index.js +3 -3
- package/dist/motion-wasm/index.mjs +3 -3
- package/dist/pipeline-runner/index.js +3316 -2428
- package/dist/pipeline-runner/index.mjs +3315 -2428
- package/dist/recorder/index.js +102 -664
- package/dist/recorder/index.mjs +102 -658
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-ByuMjhL3.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-Bt1YkfUW.mjs} +2 -2
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DJnh97n9.mjs +26 -0
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BsNhZnfZ.mjs +26 -0
- package/dist/stream-broker/{hostInit-CfC64ye2.mjs → hostInit-Dyj8Vaql.mjs} +2 -2
- package/dist/stream-broker/index.js +723 -214
- package/dist/stream-broker/index.mjs +723 -214
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-Dx-Vrpyt.js → MaskShapeCanvas-DI4BY7W2-m1RaK_7F.js} +1 -1
- package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-9D-BWwQP.js → MotionZonesSettings-NcxxQN8r-C00UIgFo.js} +1 -1
- package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-HvAetfA4.js → PrivacyMaskSettings-APgPLF7p-DWYllToj.js} +1 -1
- package/embed-dist/assets/index-4fJzjj4H.css +2 -0
- package/embed-dist/assets/index-BaUgbxWl.js +112 -0
- package/embed-dist/index.html +2 -2
- package/package.json +2 -2
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-ByHi7ZAe.mjs +0 -26
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CscpvIRR.mjs +0 -26
- package/embed-dist/assets/index-9Ob2YrIf.js +0 -343
- package/embed-dist/assets/index-CAe6Dg-X.css +0 -2
- package/python/__pycache__/inference_pool.cpython-312.pyc +0 -0
- package/python/__pycache__/inference_pool.cpython-313.pyc +0 -0
- package/python/__pycache__/inference_pool.cpython-314.pyc +0 -0
- package/python/__pycache__/test_inference_pool_backpressure.cpython-314.pyc +0 -0
- package/python/__pycache__/test_inference_pool_coreml_cache.cpython-314.pyc +0 -0
- package/python/__pycache__/test_inference_pool_device_selection.cpython-314.pyc +0 -0
- package/python/__pycache__/test_inference_pool_layout.cpython-314.pyc +0 -0
- package/python/__pycache__/test_inference_pool_preprocess.cpython-314.pyc +0 -0
- package/python/__pycache__/yamnet_audio.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/__init__.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/__init__.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/_safety.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/arcface.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/arcface.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/arcface.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/clip.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/clip.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/clip.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/ctc.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/ctc.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/ctc.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/saliency.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/saliency.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/saliency.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/scrfd.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/scrfd.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/scrfd.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/softmax.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/softmax.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/softmax.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/ssd.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/ssd.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/ssd.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/test_clip.cpython-312-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_clip.cpython-313-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_ctc.cpython-312-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_ctc.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/test_ctc.cpython-313-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_ctc.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/test_saliency.cpython-312-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_saliency.cpython-313-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_softmax.cpython-312-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_yolo_nms.cpython-312-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_yolo_nms.cpython-39.pyc +0 -0
- package/python/postprocessors/__pycache__/yamnet.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/yamnet.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/yamnet.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo.cpython-39.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo_seg.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo_seg.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo_seg.cpython-314.pyc +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region ../types/dist/event-category-
|
|
1
|
+
//#region ../types/dist/event-category-41fKf-q9.mjs
|
|
2
2
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
3
3
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4
4
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -58,6 +58,26 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
58
58
|
*/
|
|
59
59
|
EventCategory["AddonRetryScheduled"] = "addon.retry-scheduled";
|
|
60
60
|
/**
|
|
61
|
+
* A liveness invariant of this node is false — it has no devices, every
|
|
62
|
+
* camera is offline, or a camera that was recording has stopped producing
|
|
63
|
+
* segments. Emitted by the `liveness-monitor` builtin, once per fault (the
|
|
64
|
+
* `findingId` is stable across ticks), only after its boot grace period.
|
|
65
|
+
* AlertCenter raises a persistent operator-visible alert.
|
|
66
|
+
*
|
|
67
|
+
* It exists because on 2026-08-03 the hub ran four hours with zero devices
|
|
68
|
+
* and zero recordings while every surface stayed quiet.
|
|
69
|
+
*
|
|
70
|
+
* Payload: `{ findingId, severity, title, message, deviceId? }`.
|
|
71
|
+
*/
|
|
72
|
+
EventCategory["SystemLivenessFailed"] = "system.liveness-failed";
|
|
73
|
+
/**
|
|
74
|
+
* A previously reported liveness fault is true again. AlertCenter dismisses
|
|
75
|
+
* the matching `SystemLivenessFailed` alert.
|
|
76
|
+
*
|
|
77
|
+
* Payload: `{ findingId }`.
|
|
78
|
+
*/
|
|
79
|
+
EventCategory["SystemLivenessRecovered"] = "system.liveness-recovered";
|
|
80
|
+
/**
|
|
61
81
|
* Monitor is attempting to reload a failed addon NOW. UI uses this
|
|
62
82
|
* to show a spinner during the retry attempt. Same transient nature
|
|
63
83
|
* as AddonRetryScheduled.
|
|
@@ -7497,14 +7517,7 @@ var RecordingConfigSchema = object({
|
|
|
7497
7517
|
* windows only — existing sheets are immutable, and each window's index
|
|
7498
7518
|
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7499
7519
|
*/
|
|
7500
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7501
|
-
/**
|
|
7502
|
-
* OPT-IN thumbnail-strip generation for this camera: every keyframe of the
|
|
7503
|
-
* low recording saved as a JPEG (the fast-drag scrub depth), a derived
|
|
7504
|
-
* cache that eviction reclaims with the footage. Absent/false = no strips
|
|
7505
|
-
* are written and scrub reads exact keyframes at every velocity.
|
|
7506
|
-
*/
|
|
7507
|
-
stripsEnabled: boolean().optional()
|
|
7520
|
+
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7508
7521
|
}).strict();
|
|
7509
7522
|
/**
|
|
7510
7523
|
* Derive the {@link RecordingStorageModeSchema} summary from the authoritative
|
|
@@ -7582,7 +7595,7 @@ var OpsLogQueryInputSchema = object({
|
|
|
7582
7595
|
/**
|
|
7583
7596
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
7584
7597
|
*
|
|
7585
|
-
* One shape shared by the recorder's `relocateFootage` (segments
|
|
7598
|
+
* One shape shared by the recorder's `relocateFootage` (segments) and
|
|
7586
7599
|
* pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
|
|
7587
7600
|
* page renders both movers with one component. Jobs are in-RAM (a restart
|
|
7588
7601
|
* forgets them — re-running is safe by construction: copy-if-absent, delete
|
|
@@ -7604,7 +7617,7 @@ var RelocateJobSchema = object({
|
|
|
7604
7617
|
toLocationId: string(),
|
|
7605
7618
|
/** Scoped device, or null = every device. */
|
|
7606
7619
|
deviceId: number().nullable(),
|
|
7607
|
-
/** What the job moves (owner-addon specific: segments
|
|
7620
|
+
/** What the job moves (owner-addon specific: segments or media). */
|
|
7608
7621
|
entities: array(string()),
|
|
7609
7622
|
filesMoved: number().int(),
|
|
7610
7623
|
bytesMoved: number().int(),
|
|
@@ -7618,7 +7631,7 @@ var RelocateFootageInputSchema = object({
|
|
|
7618
7631
|
deviceId: number().optional(),
|
|
7619
7632
|
fromLocationId: string(),
|
|
7620
7633
|
toLocationId: string(),
|
|
7621
|
-
entities: array(_enum(["segments"
|
|
7634
|
+
entities: array(_enum(["segments"])).optional(),
|
|
7622
7635
|
/** Copy throttle in MB/s (default 40) — the drain is a background chore,
|
|
7623
7636
|
* never allowed to starve live writers. */
|
|
7624
7637
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
@@ -9854,6 +9867,14 @@ var NcMediaPolicySchema = object({
|
|
|
9854
9867
|
clipPreRollSec: number().int().min(0).max(30).optional(),
|
|
9855
9868
|
clipPostRollSec: number().int().min(0).max(30).optional(),
|
|
9856
9869
|
/**
|
|
9870
|
+
* Playback rate of the attached gif / clip. Absent = 2x.
|
|
9871
|
+
*
|
|
9872
|
+
* A notification clip is GLANCED at on a lock screen, not watched: at real
|
|
9873
|
+
* time an eight-second passage is eight seconds of the recipient's attention
|
|
9874
|
+
* and twice the bytes. 1 is real time for the operator who wants it.
|
|
9875
|
+
*/
|
|
9876
|
+
clipSpeed: number().min(1).max(8).optional(),
|
|
9877
|
+
/**
|
|
9857
9878
|
* Which stream profile the footage is cut from. Absent = the CHEAPEST
|
|
9858
9879
|
* assigned profile: a notification is watched on a phone, so the 4K
|
|
9859
9880
|
* rendition would burn CPU to produce a file the client downscales anyway.
|
|
@@ -9925,7 +9946,21 @@ var NcRuleInputSchema = object({
|
|
|
9925
9946
|
* behaviour, visible to all, read-only in the viewer). Present = personal
|
|
9926
9947
|
* rule owned by this userId. Server-stamped; never trusted from a client.
|
|
9927
9948
|
*/
|
|
9928
|
-
ownerUserId: string().optional()
|
|
9949
|
+
ownerUserId: string().optional(),
|
|
9950
|
+
/**
|
|
9951
|
+
* May a non-admin snooze this rule for EVERYONE, not just themselves?
|
|
9952
|
+
*
|
|
9953
|
+
* A snooze is personal by default — it silences the person who set it. This
|
|
9954
|
+
* opts THIS rule into the "the gardener is here all afternoon" case, where
|
|
9955
|
+
* silencing the camera for the whole household is legitimate. It silences
|
|
9956
|
+
* other people, so it is off unless a rule deliberately allows it.
|
|
9957
|
+
*
|
|
9958
|
+
* `.optional()`, deliberately NOT `.default()`: a Zod default does not run on
|
|
9959
|
+
* the addon cap path (three production failures in one day), so absent is
|
|
9960
|
+
* read as `false` by {@link canSetGlobal} in the engine. Admins are not bound
|
|
9961
|
+
* by this flag — see the scope rules on that function.
|
|
9962
|
+
*/
|
|
9963
|
+
snoozeAllowGlobal: boolean().optional()
|
|
9929
9964
|
});
|
|
9930
9965
|
/**
|
|
9931
9966
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -10010,7 +10045,28 @@ var NcConditionDescriptorSchema = object({
|
|
|
10010
10045
|
/** Which delivery kinds the condition applies to. */
|
|
10011
10046
|
appliesTo: array(NcDeliverySchema),
|
|
10012
10047
|
phase: string(),
|
|
10013
|
-
description: string().optional()
|
|
10048
|
+
description: string().optional(),
|
|
10049
|
+
/**
|
|
10050
|
+
* The CHOICES for a single-choice widget (`sourceSelect`, `crossingSelect`,
|
|
10051
|
+
* `packagePhase`, …), served with the descriptor.
|
|
10052
|
+
*
|
|
10053
|
+
* Before this the descriptor said which widget to render and not what to put
|
|
10054
|
+
* in it, so every option list lived in three places: this file's enums, the
|
|
10055
|
+
* admin's `NC_*_OPTIONS` and the viewer's `NC_*_VALUES`. That triple mirror
|
|
10056
|
+
* is the drift that emptied the viewer's rule editor on 2026-08-04 — the app
|
|
10057
|
+
* mirrors the cap by hand, so it is only ever as current as its last build.
|
|
10058
|
+
*
|
|
10059
|
+
* With the options on the wire, a condition of an EXISTING `valueType` costs
|
|
10060
|
+
* zero client changes. Clients keep a local fallback for an older hub that
|
|
10061
|
+
* does not send them; absent here is "use your own list", not "no choices".
|
|
10062
|
+
*/
|
|
10063
|
+
options: array(object({
|
|
10064
|
+
/** Written to the rule verbatim. `''` means the ABSENT state. */
|
|
10065
|
+
value: string(),
|
|
10066
|
+
label: string(),
|
|
10067
|
+
/** What THIS choice matches — shown one at a time, under the control. */
|
|
10068
|
+
hint: string().optional()
|
|
10069
|
+
})).readonly().optional()
|
|
10014
10070
|
});
|
|
10015
10071
|
/**
|
|
10016
10072
|
* The delivery lifecycle status of a history row — a straight read of the
|
|
@@ -10095,6 +10151,74 @@ var NcHistoryFilterSchema = object({
|
|
|
10095
10151
|
until: number().optional(),
|
|
10096
10152
|
limit: number().int().min(1).max(500).default(100)
|
|
10097
10153
|
});
|
|
10154
|
+
/**
|
|
10155
|
+
* What a snooze covers. Broader scopes win when several overlap, so one window
|
|
10156
|
+
* leaves ONE digest rather than a rule snooze and a whole-feed snooze both
|
|
10157
|
+
* summarising the same silence.
|
|
10158
|
+
*/
|
|
10159
|
+
var NcSnoozeScopeSchema = _enum([
|
|
10160
|
+
"rule",
|
|
10161
|
+
"device",
|
|
10162
|
+
"all"
|
|
10163
|
+
]);
|
|
10164
|
+
/**
|
|
10165
|
+
* Client-authored snooze. The server stamps `userId`, `startedAt` and
|
|
10166
|
+
* `expiresAt` — a DURATION is sent rather than an instant so a client with a
|
|
10167
|
+
* skewed clock cannot author a window that is already over, or never ends.
|
|
10168
|
+
*/
|
|
10169
|
+
var NcSnoozeInputSchema = object({
|
|
10170
|
+
scope: NcSnoozeScopeSchema,
|
|
10171
|
+
/** Required when `scope: 'rule'` — a scoped snooze with no id matches
|
|
10172
|
+
* NOTHING rather than degrading to "everything". */
|
|
10173
|
+
ruleId: string().optional(),
|
|
10174
|
+
/** Required when `scope: 'device'`. */
|
|
10175
|
+
deviceId: number().int().optional(),
|
|
10176
|
+
durationMinutes: number().int().min(1).max(1440),
|
|
10177
|
+
/**
|
|
10178
|
+
* Silence this for EVERY recipient, not just the caller. Permission is
|
|
10179
|
+
* checked server-side (the rule's `snoozeAllowGlobal`, or admin for the
|
|
10180
|
+
* broader scopes). Absent = personal.
|
|
10181
|
+
*/
|
|
10182
|
+
global: boolean().optional(),
|
|
10183
|
+
/**
|
|
10184
|
+
* Deliver a summary of what was suppressed when the window ends. Absent =
|
|
10185
|
+
* ON: someone silencing a nuisance camera wants it off, someone silencing a
|
|
10186
|
+
* SECURITY camera wants to know what they missed, and choosing "off" for
|
|
10187
|
+
* everybody is how a snooze becomes an outage. Resolved to a concrete
|
|
10188
|
+
* boolean by the server at create time — never left to a Zod default, which
|
|
10189
|
+
* does not run on the addon cap path.
|
|
10190
|
+
*/
|
|
10191
|
+
summary: boolean().optional()
|
|
10192
|
+
});
|
|
10193
|
+
/** A persisted snooze window. */
|
|
10194
|
+
var NcSnoozeSchema = object({
|
|
10195
|
+
id: string(),
|
|
10196
|
+
/** Who set it. Also who it silences, unless `global`. */
|
|
10197
|
+
userId: string(),
|
|
10198
|
+
scope: NcSnoozeScopeSchema,
|
|
10199
|
+
ruleId: string().optional(),
|
|
10200
|
+
deviceId: number().int().optional(),
|
|
10201
|
+
startedAt: number(),
|
|
10202
|
+
/** Exclusive: at exactly this instant the snooze is over. Expiry is a
|
|
10203
|
+
* COMPARISON, not a job — no sweeper can leave the operator silenced. */
|
|
10204
|
+
expiresAt: number(),
|
|
10205
|
+
global: boolean(),
|
|
10206
|
+
summary: boolean(),
|
|
10207
|
+
/** When the end-of-window digest went out. Absent = not sent (yet, or the
|
|
10208
|
+
* window has not closed, or `summary` is false). */
|
|
10209
|
+
digestSentAt: number().optional()
|
|
10210
|
+
});
|
|
10211
|
+
object({
|
|
10212
|
+
snoozeId: string(),
|
|
10213
|
+
targetId: string(),
|
|
10214
|
+
ruleId: string(),
|
|
10215
|
+
ruleName: string(),
|
|
10216
|
+
deviceId: number().int(),
|
|
10217
|
+
/** How many notifications this snooze hid for that pair. */
|
|
10218
|
+
count: number().int(),
|
|
10219
|
+
firstAt: number(),
|
|
10220
|
+
lastAt: number()
|
|
10221
|
+
});
|
|
10098
10222
|
method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), method(object({ ruleId: string() }), object({ rule: NcRuleSchema.nullable() }), { auth: "admin" }), method(object({ rule: NcRuleInputSchema }), object({ rule: NcRuleSchema }), {
|
|
10099
10223
|
kind: "mutation",
|
|
10100
10224
|
auth: "admin",
|
|
@@ -10124,7 +10248,13 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
10124
10248
|
}), method(object({}), object({
|
|
10125
10249
|
catalog: array(NcConditionDescriptorSchema),
|
|
10126
10250
|
taxonomy: NcTaxonomySchema.optional()
|
|
10127
|
-
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" })
|
|
10251
|
+
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
10252
|
+
kind: "mutation",
|
|
10253
|
+
caller: "required"
|
|
10254
|
+
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
10255
|
+
kind: "mutation",
|
|
10256
|
+
caller: "required"
|
|
10257
|
+
});
|
|
10128
10258
|
/**
|
|
10129
10259
|
* TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
|
|
10130
10260
|
*
|
|
@@ -10901,7 +11031,15 @@ var streamBrokerCapability = {
|
|
|
10901
11031
|
format: _enum(["gif", "mp4"]).default("gif"),
|
|
10902
11032
|
maxWidth: number().int().min(120).max(1920).default(480),
|
|
10903
11033
|
/** GIF only — MP4 keeps the source cadence. */
|
|
10904
|
-
fps: number().int().min(1).max(15).default(5)
|
|
11034
|
+
fps: number().int().min(1).max(15).default(5),
|
|
11035
|
+
/**
|
|
11036
|
+
* Playback rate. A notification clip is GLANCED at on a lock screen,
|
|
11037
|
+
* not watched, so 2x is the default: the recipient sees the whole
|
|
11038
|
+
* passage in half the time and the GIF is half the bytes. `1` is real
|
|
11039
|
+
* time. Applies to MP4 as well — the operator set a speed, not a GIF
|
|
11040
|
+
* speed.
|
|
11041
|
+
*/
|
|
11042
|
+
speed: number().min(1).max(8).default(2)
|
|
10905
11043
|
}), object({
|
|
10906
11044
|
base64: string(),
|
|
10907
11045
|
mime: string(),
|
|
@@ -16266,6 +16404,210 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
16266
16404
|
auth: "admin"
|
|
16267
16405
|
});
|
|
16268
16406
|
/**
|
|
16407
|
+
* Query filter for settings-store collections.
|
|
16408
|
+
*/
|
|
16409
|
+
var QueryFilterSchema = object({
|
|
16410
|
+
where: record(string(), unknown()).optional(),
|
|
16411
|
+
whereIn: record(string(), array(unknown())).optional(),
|
|
16412
|
+
whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
|
|
16413
|
+
orderBy: object({
|
|
16414
|
+
field: string(),
|
|
16415
|
+
direction: _enum(["asc", "desc"])
|
|
16416
|
+
}).optional(),
|
|
16417
|
+
limit: number().optional(),
|
|
16418
|
+
offset: number().optional()
|
|
16419
|
+
});
|
|
16420
|
+
/**
|
|
16421
|
+
* The predicate half of a filter, for BULK MUTATIONS.
|
|
16422
|
+
*
|
|
16423
|
+
* Deliberately not `QueryFilterSchema`: `orderBy` / `limit` / `offset` have no
|
|
16424
|
+
* meaning for a statement that rewrites a set, and accepting them would invite
|
|
16425
|
+
* a caller to believe `limit` bounds the damage. Every field is optional here
|
|
16426
|
+
* only so the shape stays composable — the implementation REJECTS a filter
|
|
16427
|
+
* that compiles to no predicate, because that is the whole collection.
|
|
16428
|
+
*/
|
|
16429
|
+
var MutationFilterSchema = object({
|
|
16430
|
+
where: record(string(), unknown()).optional(),
|
|
16431
|
+
whereIn: record(string(), array(unknown())).optional(),
|
|
16432
|
+
whereBetween: record(string(), tuple([unknown(), unknown()])).optional()
|
|
16433
|
+
});
|
|
16434
|
+
/** A single stored record: `{ id, data }`. */
|
|
16435
|
+
var SettingsRecordSchema = object({
|
|
16436
|
+
id: string(),
|
|
16437
|
+
data: record(string(), unknown())
|
|
16438
|
+
});
|
|
16439
|
+
/**
|
|
16440
|
+
* Column declaration for a structured (SQL-backed) collection.
|
|
16441
|
+
*
|
|
16442
|
+
* Logical types — the backend translates each to the matching SQLite
|
|
16443
|
+
* storage class and handles per-type marshaling:
|
|
16444
|
+
* - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
|
|
16445
|
+
* - `JSON` — TEXT under the hood; serialised on write, parsed on read
|
|
16446
|
+
* - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
|
|
16447
|
+
*/
|
|
16448
|
+
var CollectionColumnSchema = object({
|
|
16449
|
+
name: string(),
|
|
16450
|
+
type: _enum([
|
|
16451
|
+
"TEXT",
|
|
16452
|
+
"INTEGER",
|
|
16453
|
+
"REAL",
|
|
16454
|
+
"JSON",
|
|
16455
|
+
"BOOLEAN"
|
|
16456
|
+
]),
|
|
16457
|
+
primaryKey: boolean().optional(),
|
|
16458
|
+
notNull: boolean().optional(),
|
|
16459
|
+
unique: boolean().optional(),
|
|
16460
|
+
/**
|
|
16461
|
+
* Column DEFAULT. Required for B2: the four `ensureTable` consumers declare
|
|
16462
|
+
* columns like `enabled INTEGER NOT NULL DEFAULT 1`, and without this the
|
|
16463
|
+
* collection surface simply cannot express their existing tables — which is
|
|
16464
|
+
* why they were still on the uncapped `table*` API.
|
|
16465
|
+
*/
|
|
16466
|
+
defaultValue: union([
|
|
16467
|
+
string(),
|
|
16468
|
+
number(),
|
|
16469
|
+
boolean()
|
|
16470
|
+
]).optional()
|
|
16471
|
+
});
|
|
16472
|
+
var CollectionIndexSchema = object({
|
|
16473
|
+
name: string(),
|
|
16474
|
+
columns: array(string()).readonly(),
|
|
16475
|
+
unique: boolean().optional()
|
|
16476
|
+
});
|
|
16477
|
+
method(object({
|
|
16478
|
+
namespace: string().optional(),
|
|
16479
|
+
collection: string(),
|
|
16480
|
+
key: string()
|
|
16481
|
+
}), unknown()), method(object({
|
|
16482
|
+
namespace: string().optional(),
|
|
16483
|
+
collection: string(),
|
|
16484
|
+
key: string(),
|
|
16485
|
+
value: unknown()
|
|
16486
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16487
|
+
namespace: string().optional(),
|
|
16488
|
+
collection: string(),
|
|
16489
|
+
filter: QueryFilterSchema.optional()
|
|
16490
|
+
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
16491
|
+
namespace: string().optional(),
|
|
16492
|
+
collection: string(),
|
|
16493
|
+
record: SettingsRecordSchema
|
|
16494
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16495
|
+
namespace: string().optional(),
|
|
16496
|
+
collection: string(),
|
|
16497
|
+
id: string(),
|
|
16498
|
+
data: record(string(), unknown())
|
|
16499
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16500
|
+
namespace: string().optional(),
|
|
16501
|
+
collection: string(),
|
|
16502
|
+
key: string()
|
|
16503
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16504
|
+
namespace: string().optional(),
|
|
16505
|
+
collection: string(),
|
|
16506
|
+
filter: MutationFilterSchema
|
|
16507
|
+
}), object({ deleted: number().int() }), { kind: "mutation" }), method(object({
|
|
16508
|
+
namespace: string().optional(),
|
|
16509
|
+
collection: string(),
|
|
16510
|
+
filter: MutationFilterSchema,
|
|
16511
|
+
data: record(string(), unknown())
|
|
16512
|
+
}), object({ updated: number().int() }), { kind: "mutation" }), method(object({
|
|
16513
|
+
namespace: string().optional(),
|
|
16514
|
+
collection: string(),
|
|
16515
|
+
filter: QueryFilterSchema.optional()
|
|
16516
|
+
}), number()), method(object({
|
|
16517
|
+
namespace: string().optional(),
|
|
16518
|
+
collection: string(),
|
|
16519
|
+
field: string(),
|
|
16520
|
+
bucketSize: number().int().positive(),
|
|
16521
|
+
origin: number().int(),
|
|
16522
|
+
filter: QueryFilterSchema.optional()
|
|
16523
|
+
}), array(object({
|
|
16524
|
+
bucket: number().int(),
|
|
16525
|
+
count: number().int()
|
|
16526
|
+
})).readonly()), method(object({
|
|
16527
|
+
namespace: string().optional(),
|
|
16528
|
+
collection: string()
|
|
16529
|
+
}), boolean()), method(object({
|
|
16530
|
+
namespace: string().optional(),
|
|
16531
|
+
collection: string(),
|
|
16532
|
+
columns: array(CollectionColumnSchema).readonly(),
|
|
16533
|
+
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
16534
|
+
}), _void(), { kind: "mutation" });
|
|
16535
|
+
/**
|
|
16536
|
+
* What one engine says about itself. The orchestrator uses `kind` to pick
|
|
16537
|
+
* a registrant for a collection; `engineId` is what a log line names when
|
|
16538
|
+
* a call is routed or refused.
|
|
16539
|
+
*/
|
|
16540
|
+
var EngineInfoSchema = object({
|
|
16541
|
+
engineId: string(),
|
|
16542
|
+
/**
|
|
16543
|
+
* `relational` — rows, columns, indexes, the surface `settings-store`
|
|
16544
|
+
* has always described. `vector` — an embedding store answering
|
|
16545
|
+
* similarity queries. A registrant declares exactly one; an engine that
|
|
16546
|
+
* does both registers twice, because "both" would make the routing
|
|
16547
|
+
* decision ambiguous at exactly the point it must not be.
|
|
16548
|
+
*/
|
|
16549
|
+
kind: _enum(["relational", "vector"]),
|
|
16550
|
+
displayName: string()
|
|
16551
|
+
});
|
|
16552
|
+
method(_void(), EngineInfoSchema), method(object({
|
|
16553
|
+
namespace: string().optional(),
|
|
16554
|
+
collection: string(),
|
|
16555
|
+
key: string()
|
|
16556
|
+
}), unknown()), method(object({
|
|
16557
|
+
namespace: string().optional(),
|
|
16558
|
+
collection: string(),
|
|
16559
|
+
key: string(),
|
|
16560
|
+
value: unknown()
|
|
16561
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16562
|
+
namespace: string().optional(),
|
|
16563
|
+
collection: string(),
|
|
16564
|
+
filter: QueryFilterSchema.optional()
|
|
16565
|
+
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
16566
|
+
namespace: string().optional(),
|
|
16567
|
+
collection: string(),
|
|
16568
|
+
record: SettingsRecordSchema
|
|
16569
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16570
|
+
namespace: string().optional(),
|
|
16571
|
+
collection: string(),
|
|
16572
|
+
id: string(),
|
|
16573
|
+
data: record(string(), unknown())
|
|
16574
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16575
|
+
namespace: string().optional(),
|
|
16576
|
+
collection: string(),
|
|
16577
|
+
key: string()
|
|
16578
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16579
|
+
namespace: string().optional(),
|
|
16580
|
+
collection: string(),
|
|
16581
|
+
filter: MutationFilterSchema
|
|
16582
|
+
}), object({ deleted: number().int() }), { kind: "mutation" }), method(object({
|
|
16583
|
+
namespace: string().optional(),
|
|
16584
|
+
collection: string(),
|
|
16585
|
+
filter: MutationFilterSchema,
|
|
16586
|
+
data: record(string(), unknown())
|
|
16587
|
+
}), object({ updated: number().int() }), { kind: "mutation" }), method(object({
|
|
16588
|
+
namespace: string().optional(),
|
|
16589
|
+
collection: string(),
|
|
16590
|
+
filter: QueryFilterSchema.optional()
|
|
16591
|
+
}), number()), method(object({
|
|
16592
|
+
namespace: string().optional(),
|
|
16593
|
+
collection: string(),
|
|
16594
|
+
field: string(),
|
|
16595
|
+
bucketSize: number().int().positive(),
|
|
16596
|
+
origin: number().int(),
|
|
16597
|
+
filter: QueryFilterSchema.optional()
|
|
16598
|
+
}), array(object({
|
|
16599
|
+
bucket: number().int(),
|
|
16600
|
+
count: number().int()
|
|
16601
|
+
})).readonly()), method(object({
|
|
16602
|
+
namespace: string().optional(),
|
|
16603
|
+
collection: string()
|
|
16604
|
+
}), boolean()), method(object({
|
|
16605
|
+
namespace: string().optional(),
|
|
16606
|
+
collection: string(),
|
|
16607
|
+
columns: array(CollectionColumnSchema).readonly(),
|
|
16608
|
+
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
16609
|
+
}), _void(), { kind: "mutation" });
|
|
16610
|
+
/**
|
|
16269
16611
|
* detection-pipeline — device-scoped facade over the system
|
|
16270
16612
|
* `pipeline-executor`.
|
|
16271
16613
|
*
|
|
@@ -19528,6 +19870,28 @@ var ServerUpdateStateSchema = _enum([
|
|
|
19528
19870
|
"pending-restart",
|
|
19529
19871
|
"awaiting-confirmation"
|
|
19530
19872
|
]);
|
|
19873
|
+
var ImageContractSchema = object({
|
|
19874
|
+
state: _enum([
|
|
19875
|
+
"in-sync",
|
|
19876
|
+
"behind-patch",
|
|
19877
|
+
"behind-series",
|
|
19878
|
+
"ahead",
|
|
19879
|
+
"unknown"
|
|
19880
|
+
]),
|
|
19881
|
+
/** The baked seed closure version — the image/app-bundle fingerprint. */
|
|
19882
|
+
seedVersion: string().nullable(),
|
|
19883
|
+
/** Best-known version the deployment contract delivers today. */
|
|
19884
|
+
contractVersion: string().nullable(),
|
|
19885
|
+
/**
|
|
19886
|
+
* Where `contractVersion` came from: a real registry check (`registry`), or
|
|
19887
|
+
* the node's own running version (`running` — a node can never run code
|
|
19888
|
+
* newer than the newest release, so `seed < running` proves image staleness
|
|
19889
|
+
* even before any registry check has run).
|
|
19890
|
+
*/
|
|
19891
|
+
contractSource: _enum(["registry", "running"]).nullable(),
|
|
19892
|
+
/** One operator-grade sentence: this node runs image X; the contract says Y. */
|
|
19893
|
+
message: string()
|
|
19894
|
+
});
|
|
19531
19895
|
var ServerRollbackInfoSchema = object({
|
|
19532
19896
|
/** The version that failed (or was manually rolled back). */
|
|
19533
19897
|
fromVersion: string(),
|
|
@@ -19564,7 +19928,12 @@ var ServerPackageStatusSchema = object({
|
|
|
19564
19928
|
* versions are being IGNORED. Surfaced as a warning in the UI.
|
|
19565
19929
|
*/
|
|
19566
19930
|
stateFileCorrupt: boolean(),
|
|
19567
|
-
lastCheckedAtMs: number().nullable()
|
|
19931
|
+
lastCheckedAtMs: number().nullable(),
|
|
19932
|
+
/**
|
|
19933
|
+
* Seed-vs-contract verdict (see {@link ImageContractSchema}). Optional for
|
|
19934
|
+
* version skew: an older provider's payload simply omits it.
|
|
19935
|
+
*/
|
|
19936
|
+
imageContract: ImageContractSchema.optional()
|
|
19568
19937
|
});
|
|
19569
19938
|
var ServerUpdateCheckResultSchema = object({
|
|
19570
19939
|
packageName: string(),
|
|
@@ -19599,101 +19968,6 @@ version: string().optional() }), ServerUpdateActionResultSchema, {
|
|
|
19599
19968
|
auth: "admin"
|
|
19600
19969
|
});
|
|
19601
19970
|
/**
|
|
19602
|
-
* Query filter for settings-store collections.
|
|
19603
|
-
*/
|
|
19604
|
-
var QueryFilterSchema = object({
|
|
19605
|
-
where: record(string(), unknown()).optional(),
|
|
19606
|
-
whereIn: record(string(), array(unknown())).optional(),
|
|
19607
|
-
whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
|
|
19608
|
-
orderBy: object({
|
|
19609
|
-
field: string(),
|
|
19610
|
-
direction: _enum(["asc", "desc"])
|
|
19611
|
-
}).optional(),
|
|
19612
|
-
limit: number().optional(),
|
|
19613
|
-
offset: number().optional()
|
|
19614
|
-
});
|
|
19615
|
-
/** A single stored record: `{ id, data }`. */
|
|
19616
|
-
var SettingsRecordSchema = object({
|
|
19617
|
-
id: string(),
|
|
19618
|
-
data: record(string(), unknown())
|
|
19619
|
-
});
|
|
19620
|
-
/**
|
|
19621
|
-
* Column declaration for a structured (SQL-backed) collection.
|
|
19622
|
-
*
|
|
19623
|
-
* Logical types — the backend translates each to the matching SQLite
|
|
19624
|
-
* storage class and handles per-type marshaling:
|
|
19625
|
-
* - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
|
|
19626
|
-
* - `JSON` — TEXT under the hood; serialised on write, parsed on read
|
|
19627
|
-
* - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
|
|
19628
|
-
*/
|
|
19629
|
-
var CollectionColumnSchema = object({
|
|
19630
|
-
name: string(),
|
|
19631
|
-
type: _enum([
|
|
19632
|
-
"TEXT",
|
|
19633
|
-
"INTEGER",
|
|
19634
|
-
"REAL",
|
|
19635
|
-
"JSON",
|
|
19636
|
-
"BOOLEAN"
|
|
19637
|
-
]),
|
|
19638
|
-
primaryKey: boolean().optional(),
|
|
19639
|
-
notNull: boolean().optional(),
|
|
19640
|
-
unique: boolean().optional()
|
|
19641
|
-
});
|
|
19642
|
-
var CollectionIndexSchema = object({
|
|
19643
|
-
name: string(),
|
|
19644
|
-
columns: array(string()).readonly(),
|
|
19645
|
-
unique: boolean().optional()
|
|
19646
|
-
});
|
|
19647
|
-
method(object({
|
|
19648
|
-
namespace: string().optional(),
|
|
19649
|
-
collection: string(),
|
|
19650
|
-
key: string()
|
|
19651
|
-
}), unknown()), method(object({
|
|
19652
|
-
namespace: string().optional(),
|
|
19653
|
-
collection: string(),
|
|
19654
|
-
key: string(),
|
|
19655
|
-
value: unknown()
|
|
19656
|
-
}), _void(), { kind: "mutation" }), method(object({
|
|
19657
|
-
namespace: string().optional(),
|
|
19658
|
-
collection: string(),
|
|
19659
|
-
filter: QueryFilterSchema.optional()
|
|
19660
|
-
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
19661
|
-
namespace: string().optional(),
|
|
19662
|
-
collection: string(),
|
|
19663
|
-
record: SettingsRecordSchema
|
|
19664
|
-
}), _void(), { kind: "mutation" }), method(object({
|
|
19665
|
-
namespace: string().optional(),
|
|
19666
|
-
collection: string(),
|
|
19667
|
-
id: string(),
|
|
19668
|
-
data: record(string(), unknown())
|
|
19669
|
-
}), _void(), { kind: "mutation" }), method(object({
|
|
19670
|
-
namespace: string().optional(),
|
|
19671
|
-
collection: string(),
|
|
19672
|
-
key: string()
|
|
19673
|
-
}), _void(), { kind: "mutation" }), method(object({
|
|
19674
|
-
namespace: string().optional(),
|
|
19675
|
-
collection: string(),
|
|
19676
|
-
filter: QueryFilterSchema.optional()
|
|
19677
|
-
}), number()), method(object({
|
|
19678
|
-
namespace: string().optional(),
|
|
19679
|
-
collection: string(),
|
|
19680
|
-
field: string(),
|
|
19681
|
-
bucketSize: number().int().positive(),
|
|
19682
|
-
origin: number().int(),
|
|
19683
|
-
filter: QueryFilterSchema.optional()
|
|
19684
|
-
}), array(object({
|
|
19685
|
-
bucket: number().int(),
|
|
19686
|
-
count: number().int()
|
|
19687
|
-
})).readonly()), method(object({
|
|
19688
|
-
namespace: string().optional(),
|
|
19689
|
-
collection: string()
|
|
19690
|
-
}), boolean()), method(object({
|
|
19691
|
-
namespace: string().optional(),
|
|
19692
|
-
collection: string(),
|
|
19693
|
-
columns: array(CollectionColumnSchema).readonly(),
|
|
19694
|
-
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
19695
|
-
}), _void(), { kind: "mutation" });
|
|
19696
|
-
/**
|
|
19697
19971
|
* `smtp-provider` — pluggable email delivery surface.
|
|
19698
19972
|
*
|
|
19699
19973
|
* Collection cap: a deployment may install multiple SMTP relays (e.g.
|
|
@@ -22458,7 +22732,7 @@ var recordingCapability = {
|
|
|
22458
22732
|
auth: "admin"
|
|
22459
22733
|
}),
|
|
22460
22734
|
/**
|
|
22461
|
-
* Move footage (segments
|
|
22735
|
+
* Move footage (recorded segments) from one recordings location to
|
|
22462
22736
|
* another — the drain workflow's mover (entity-routing spec Phase 4).
|
|
22463
22737
|
* Throttled copy → size-verify → delete source → index refresh; resumable
|
|
22464
22738
|
* by construction (copy-if-absent). Single-flight: one job at a time.
|
|
@@ -23783,6 +24057,84 @@ Object.freeze({
|
|
|
23783
24057
|
addonId: null,
|
|
23784
24058
|
access: "view"
|
|
23785
24059
|
},
|
|
24060
|
+
"dataStoreProvider.count": {
|
|
24061
|
+
capName: "data-store-provider",
|
|
24062
|
+
capScope: "system",
|
|
24063
|
+
addonId: null,
|
|
24064
|
+
access: "view"
|
|
24065
|
+
},
|
|
24066
|
+
"dataStoreProvider.declareCollection": {
|
|
24067
|
+
capName: "data-store-provider",
|
|
24068
|
+
capScope: "system",
|
|
24069
|
+
addonId: null,
|
|
24070
|
+
access: "create"
|
|
24071
|
+
},
|
|
24072
|
+
"dataStoreProvider.delete": {
|
|
24073
|
+
capName: "data-store-provider",
|
|
24074
|
+
capScope: "system",
|
|
24075
|
+
addonId: null,
|
|
24076
|
+
access: "delete"
|
|
24077
|
+
},
|
|
24078
|
+
"dataStoreProvider.deleteWhere": {
|
|
24079
|
+
capName: "data-store-provider",
|
|
24080
|
+
capScope: "system",
|
|
24081
|
+
addonId: null,
|
|
24082
|
+
access: "delete"
|
|
24083
|
+
},
|
|
24084
|
+
"dataStoreProvider.get": {
|
|
24085
|
+
capName: "data-store-provider",
|
|
24086
|
+
capScope: "system",
|
|
24087
|
+
addonId: null,
|
|
24088
|
+
access: "view"
|
|
24089
|
+
},
|
|
24090
|
+
"dataStoreProvider.getEngineInfo": {
|
|
24091
|
+
capName: "data-store-provider",
|
|
24092
|
+
capScope: "system",
|
|
24093
|
+
addonId: null,
|
|
24094
|
+
access: "view"
|
|
24095
|
+
},
|
|
24096
|
+
"dataStoreProvider.histogram": {
|
|
24097
|
+
capName: "data-store-provider",
|
|
24098
|
+
capScope: "system",
|
|
24099
|
+
addonId: null,
|
|
24100
|
+
access: "view"
|
|
24101
|
+
},
|
|
24102
|
+
"dataStoreProvider.insert": {
|
|
24103
|
+
capName: "data-store-provider",
|
|
24104
|
+
capScope: "system",
|
|
24105
|
+
addonId: null,
|
|
24106
|
+
access: "create"
|
|
24107
|
+
},
|
|
24108
|
+
"dataStoreProvider.isEmpty": {
|
|
24109
|
+
capName: "data-store-provider",
|
|
24110
|
+
capScope: "system",
|
|
24111
|
+
addonId: null,
|
|
24112
|
+
access: "view"
|
|
24113
|
+
},
|
|
24114
|
+
"dataStoreProvider.query": {
|
|
24115
|
+
capName: "data-store-provider",
|
|
24116
|
+
capScope: "system",
|
|
24117
|
+
addonId: null,
|
|
24118
|
+
access: "view"
|
|
24119
|
+
},
|
|
24120
|
+
"dataStoreProvider.set": {
|
|
24121
|
+
capName: "data-store-provider",
|
|
24122
|
+
capScope: "system",
|
|
24123
|
+
addonId: null,
|
|
24124
|
+
access: "create"
|
|
24125
|
+
},
|
|
24126
|
+
"dataStoreProvider.update": {
|
|
24127
|
+
capName: "data-store-provider",
|
|
24128
|
+
capScope: "system",
|
|
24129
|
+
addonId: null,
|
|
24130
|
+
access: "create"
|
|
24131
|
+
},
|
|
24132
|
+
"dataStoreProvider.updateWhere": {
|
|
24133
|
+
capName: "data-store-provider",
|
|
24134
|
+
capScope: "system",
|
|
24135
|
+
addonId: null,
|
|
24136
|
+
access: "create"
|
|
24137
|
+
},
|
|
23786
24138
|
"dayNight.getOptions": {
|
|
23787
24139
|
capName: "day-night",
|
|
23788
24140
|
capScope: "device",
|
|
@@ -25577,12 +25929,24 @@ Object.freeze({
|
|
|
25577
25929
|
addonId: null,
|
|
25578
25930
|
access: "create"
|
|
25579
25931
|
},
|
|
25932
|
+
"notificationRules.cancelSnooze": {
|
|
25933
|
+
capName: "notification-rules",
|
|
25934
|
+
capScope: "system",
|
|
25935
|
+
addonId: null,
|
|
25936
|
+
access: "create"
|
|
25937
|
+
},
|
|
25580
25938
|
"notificationRules.createRule": {
|
|
25581
25939
|
capName: "notification-rules",
|
|
25582
25940
|
capScope: "system",
|
|
25583
25941
|
addonId: null,
|
|
25584
25942
|
access: "create"
|
|
25585
25943
|
},
|
|
25944
|
+
"notificationRules.createSnooze": {
|
|
25945
|
+
capName: "notification-rules",
|
|
25946
|
+
capScope: "system",
|
|
25947
|
+
addonId: null,
|
|
25948
|
+
access: "create"
|
|
25949
|
+
},
|
|
25586
25950
|
"notificationRules.deleteRule": {
|
|
25587
25951
|
capName: "notification-rules",
|
|
25588
25952
|
capScope: "system",
|
|
@@ -25613,6 +25977,12 @@ Object.freeze({
|
|
|
25613
25977
|
addonId: null,
|
|
25614
25978
|
access: "view"
|
|
25615
25979
|
},
|
|
25980
|
+
"notificationRules.listSnoozes": {
|
|
25981
|
+
capName: "notification-rules",
|
|
25982
|
+
capScope: "system",
|
|
25983
|
+
addonId: null,
|
|
25984
|
+
access: "view"
|
|
25985
|
+
},
|
|
25616
25986
|
"notificationRules.setRuleEnabled": {
|
|
25617
25987
|
capName: "notification-rules",
|
|
25618
25988
|
capScope: "system",
|
|
@@ -26861,6 +27231,12 @@ Object.freeze({
|
|
|
26861
27231
|
addonId: null,
|
|
26862
27232
|
access: "delete"
|
|
26863
27233
|
},
|
|
27234
|
+
"settingsStore.deleteWhere": {
|
|
27235
|
+
capName: "settings-store",
|
|
27236
|
+
capScope: "system",
|
|
27237
|
+
addonId: null,
|
|
27238
|
+
access: "delete"
|
|
27239
|
+
},
|
|
26864
27240
|
"settingsStore.get": {
|
|
26865
27241
|
capName: "settings-store",
|
|
26866
27242
|
capScope: "system",
|
|
@@ -26903,6 +27279,12 @@ Object.freeze({
|
|
|
26903
27279
|
addonId: null,
|
|
26904
27280
|
access: "create"
|
|
26905
27281
|
},
|
|
27282
|
+
"settingsStore.updateWhere": {
|
|
27283
|
+
capName: "settings-store",
|
|
27284
|
+
capScope: "system",
|
|
27285
|
+
addonId: null,
|
|
27286
|
+
access: "create"
|
|
27287
|
+
},
|
|
26906
27288
|
"smtpProvider.getStatus": {
|
|
26907
27289
|
capName: "smtp-provider",
|
|
26908
27290
|
capScope: "system",
|