@camstack/addon-osd-manager 0.1.135 → 0.1.137
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/{MotionZonesSettings-DjSGOYEZ.mjs → MotionZonesSettings-B4onRgUN.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-BrJjxUTV.mjs → PrivacyMaskSettings-15mTDT2b.mjs} +4 -4
- package/dist/{SceneMonitorEditor-lFwk-5Ag.mjs → SceneMonitorEditor-DFU0p0mQ.mjs} +3 -3
- package/dist/_stub.js +10 -10
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-Dk3P7vDo.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-CGBPavbq.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CVM3jGoe.mjs +26 -0
- package/dist/{hostInit-C0GXEvIS.mjs → hostInit-jIJC0_ID.mjs} +2 -2
- package/dist/index.js +289 -53
- package/dist/index.mjs +289 -53
- package/dist/{player-overlays-8DJJmri3.mjs → player-overlays-B_ERqzqj.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-BJTLnN-p.mjs → responsive-BOpuh3Lr.mjs} +1 -1
- package/dist/{scene-monitor-copy-CXXU8X6V.mjs → scene-monitor-copy-D5o6-VNM.mjs} +1 -1
- package/dist/{square-CxBZyzy5.mjs → square-oUeZZbza.mjs} +1 -1
- package/dist/{trash-2-CDkpE8nN.mjs → trash-2-BrFLAkuW.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-vuxTr550.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-C-OUB_74.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-MNSRdKcG.mjs +0 -26
package/dist/index.js
CHANGED
|
@@ -5363,7 +5363,7 @@ var ZodIssueCode = {
|
|
|
5363
5363
|
var ZodFirstPartyTypeKind;
|
|
5364
5364
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5365
5365
|
//#endregion
|
|
5366
|
-
//#region ../types/dist/sleep-
|
|
5366
|
+
//#region ../types/dist/sleep-D_4W7xuQ.mjs
|
|
5367
5367
|
/**
|
|
5368
5368
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5369
5369
|
* window to float samples (D455).
|
|
@@ -7414,7 +7414,10 @@ var deviceOpsCapability = {
|
|
|
7414
7414
|
setConfig: method(object({
|
|
7415
7415
|
deviceId: number(),
|
|
7416
7416
|
values: record(string(), unknown())
|
|
7417
|
-
}), _void(), {
|
|
7417
|
+
}), _void(), {
|
|
7418
|
+
kind: "mutation",
|
|
7419
|
+
auth: "admin"
|
|
7420
|
+
}),
|
|
7418
7421
|
/**
|
|
7419
7422
|
* Invoke a device custom action on a forked/remote device (the
|
|
7420
7423
|
* cross-process transport for `IDevice.runDeviceAction`). Mirrors
|
|
@@ -7431,7 +7434,10 @@ var deviceOpsCapability = {
|
|
|
7431
7434
|
* (close sockets, stop background tasks, …). The device-manager still
|
|
7432
7435
|
* performs its own persistence cleanup before/after this call.
|
|
7433
7436
|
*/
|
|
7434
|
-
removeDevice: method(object({ deviceId: number() }), _void(), {
|
|
7437
|
+
removeDevice: method(object({ deviceId: number() }), _void(), {
|
|
7438
|
+
kind: "mutation",
|
|
7439
|
+
auth: "admin"
|
|
7440
|
+
}),
|
|
7435
7441
|
/**
|
|
7436
7442
|
* Build the ConfigUISchema (FormBuilder input shape) from the device's
|
|
7437
7443
|
* Zod config schema. Runs on the worker that owns the IDevice so the
|
|
@@ -12057,7 +12063,7 @@ var brokerCapability = {
|
|
|
12057
12063
|
}),
|
|
12058
12064
|
/** Read the broker's cached state for a key. Returns `null` when
|
|
12059
12065
|
* unknown to the broker (never published / unknown entity). */
|
|
12060
|
-
getState: method(GetStateInputSchema, unknown().nullable()),
|
|
12066
|
+
getState: method(GetStateInputSchema, unknown().nullable(), { auth: "admin" }),
|
|
12061
12067
|
/** Status method — explicit registration with a `z.void()` input so
|
|
12062
12068
|
* the codegen-generated tRPC router types its input as
|
|
12063
12069
|
* `{addonId?: string, nodeId?: string}` (system-scoped collection
|
|
@@ -13614,6 +13620,16 @@ var CollectionIndexSchema = object({
|
|
|
13614
13620
|
* namespace, or none. Making the door enforce it is tracked separately —
|
|
13615
13621
|
* it renames tables, so it needs a migration.
|
|
13616
13622
|
*
|
|
13623
|
+
* **So every method is `auth: 'admin'` (D634).** Because nothing scopes a
|
|
13624
|
+
* call to its caller, a `protected` method here was a raw, unredacted read
|
|
13625
|
+
* (and write) of every addon's collections for any role holding
|
|
13626
|
+
* `category:system` — which is every role: a `viewer` could read every
|
|
13627
|
+
* notifier token in plaintext from `notifiers:notification-targets`. No
|
|
13628
|
+
* browser or app client calls this cap. Addons are not affected: an
|
|
13629
|
+
* addon's `ctx.api` cap call is resolved to the provider directly and never
|
|
13630
|
+
* enters the tRPC router (so the tier gates sessions and tokens, never
|
|
13631
|
+
* addons), and the hub itself calls it through the capability registry.
|
|
13632
|
+
*
|
|
13617
13633
|
* - `{ collection: 'addon-settings' }` → table `addon-settings`
|
|
13618
13634
|
* - `{ namespace: 'my-addon', collection: 'addon-settings' }` →
|
|
13619
13635
|
* table `my-addon:addon-settings`
|
|
@@ -13635,14 +13651,17 @@ var settingsStoreCapability = {
|
|
|
13635
13651
|
namespace: string().optional(),
|
|
13636
13652
|
collection: string(),
|
|
13637
13653
|
key: string()
|
|
13638
|
-
}), unknown()),
|
|
13654
|
+
}), unknown(), { auth: "admin" }),
|
|
13639
13655
|
/** Set a value by key in a collection (upsert). */
|
|
13640
13656
|
set: method(object({
|
|
13641
13657
|
namespace: string().optional(),
|
|
13642
13658
|
collection: string(),
|
|
13643
13659
|
key: string(),
|
|
13644
13660
|
value: unknown()
|
|
13645
|
-
}), _void(), {
|
|
13661
|
+
}), _void(), {
|
|
13662
|
+
kind: "mutation",
|
|
13663
|
+
auth: "admin"
|
|
13664
|
+
}),
|
|
13646
13665
|
/**
|
|
13647
13666
|
* Rows matching a filter.
|
|
13648
13667
|
*
|
|
@@ -13663,7 +13682,7 @@ var settingsStoreCapability = {
|
|
|
13663
13682
|
collection: string(),
|
|
13664
13683
|
filter: QueryFilterSchema.optional(),
|
|
13665
13684
|
columns: array(string()).readonly().optional()
|
|
13666
|
-
}), array(SettingsRecordSchema).readonly()),
|
|
13685
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }),
|
|
13667
13686
|
/**
|
|
13668
13687
|
* Make a SLOT hold this row — insert it, or update whatever already
|
|
13669
13688
|
* occupies the slot — and answer with the id the row HAS.
|
|
@@ -13716,7 +13735,10 @@ var settingsStoreCapability = {
|
|
|
13716
13735
|
}), object({
|
|
13717
13736
|
/** The id the row HAS: assigned by SQLite on an insert, or the existing
|
|
13718
13737
|
* row's own id on an update. */
|
|
13719
|
-
id: union([string(), number()]) }), {
|
|
13738
|
+
id: union([string(), number()]) }), {
|
|
13739
|
+
kind: "mutation",
|
|
13740
|
+
auth: "admin"
|
|
13741
|
+
}),
|
|
13720
13742
|
/** Insert a new record. */
|
|
13721
13743
|
insert: method(object({
|
|
13722
13744
|
namespace: string().optional(),
|
|
@@ -13731,7 +13753,10 @@ id: union([string(), number()]) }), { kind: "mutation" }),
|
|
|
13731
13753
|
* for an absent one, or the ROWID SQLite assigned on an `INTEGER`
|
|
13732
13754
|
* primary key — which is the only place an auto key is knowable.
|
|
13733
13755
|
*/
|
|
13734
|
-
id: union([string(), number()]) }), {
|
|
13756
|
+
id: union([string(), number()]) }), {
|
|
13757
|
+
kind: "mutation",
|
|
13758
|
+
auth: "admin"
|
|
13759
|
+
}),
|
|
13735
13760
|
/**
|
|
13736
13761
|
* Insert MANY records in ONE transaction, returning how many landed.
|
|
13737
13762
|
*
|
|
@@ -13759,20 +13784,29 @@ id: union([string(), number()]) }), { kind: "mutation" }),
|
|
|
13759
13784
|
namespace: string().optional(),
|
|
13760
13785
|
collection: string(),
|
|
13761
13786
|
records: array(BulkRecordSchema).readonly()
|
|
13762
|
-
}), object({ inserted: number().int() }), {
|
|
13787
|
+
}), object({ inserted: number().int() }), {
|
|
13788
|
+
kind: "mutation",
|
|
13789
|
+
auth: "admin"
|
|
13790
|
+
}),
|
|
13763
13791
|
/** Update an existing record by ID. */
|
|
13764
13792
|
update: method(object({
|
|
13765
13793
|
namespace: string().optional(),
|
|
13766
13794
|
collection: string(),
|
|
13767
13795
|
id: string(),
|
|
13768
13796
|
data: record(string(), unknown())
|
|
13769
|
-
}), _void(), {
|
|
13797
|
+
}), _void(), {
|
|
13798
|
+
kind: "mutation",
|
|
13799
|
+
auth: "admin"
|
|
13800
|
+
}),
|
|
13770
13801
|
/** Delete a record by key/ID. */
|
|
13771
13802
|
delete: method(object({
|
|
13772
13803
|
namespace: string().optional(),
|
|
13773
13804
|
collection: string(),
|
|
13774
13805
|
key: string()
|
|
13775
|
-
}), _void(), {
|
|
13806
|
+
}), _void(), {
|
|
13807
|
+
kind: "mutation",
|
|
13808
|
+
auth: "admin"
|
|
13809
|
+
}),
|
|
13776
13810
|
/**
|
|
13777
13811
|
* Delete every record matching `filter`, in ONE statement, returning how
|
|
13778
13812
|
* many rows went. This exists because its absence made every retention
|
|
@@ -13791,7 +13825,10 @@ id: union([string(), number()]) }), { kind: "mutation" }),
|
|
|
13791
13825
|
namespace: string().optional(),
|
|
13792
13826
|
collection: string(),
|
|
13793
13827
|
filter: MutationFilterSchema
|
|
13794
|
-
}), object({ deleted: number().int() }), {
|
|
13828
|
+
}), object({ deleted: number().int() }), {
|
|
13829
|
+
kind: "mutation",
|
|
13830
|
+
auth: "admin"
|
|
13831
|
+
}),
|
|
13795
13832
|
/**
|
|
13796
13833
|
* Apply `data` to every record matching `filter`, in one statement,
|
|
13797
13834
|
* returning how many rows changed. Same filter contract as
|
|
@@ -13802,13 +13839,16 @@ id: union([string(), number()]) }), { kind: "mutation" }),
|
|
|
13802
13839
|
collection: string(),
|
|
13803
13840
|
filter: MutationFilterSchema,
|
|
13804
13841
|
data: record(string(), unknown())
|
|
13805
|
-
}), object({ updated: number().int() }), {
|
|
13842
|
+
}), object({ updated: number().int() }), {
|
|
13843
|
+
kind: "mutation",
|
|
13844
|
+
auth: "admin"
|
|
13845
|
+
}),
|
|
13806
13846
|
/** Count entries in a collection, optionally filtered. */
|
|
13807
13847
|
count: method(object({
|
|
13808
13848
|
namespace: string().optional(),
|
|
13809
13849
|
collection: string(),
|
|
13810
13850
|
filter: QueryFilterSchema.optional()
|
|
13811
|
-
}), number()),
|
|
13851
|
+
}), number(), { auth: "admin" }),
|
|
13812
13852
|
/**
|
|
13813
13853
|
* `COUNT(*)` and one `SUM` / `MIN` / `MAX` per requested field, in ONE
|
|
13814
13854
|
* statement, over the rows `filter` selects.
|
|
@@ -13834,7 +13874,7 @@ id: union([string(), number()]) }), { kind: "mutation" }),
|
|
|
13834
13874
|
collection: string(),
|
|
13835
13875
|
fields: array(AggregateFieldSchema).readonly(),
|
|
13836
13876
|
filter: QueryFilterSchema.optional()
|
|
13837
|
-
}), AggregateResultSchema),
|
|
13877
|
+
}), AggregateResultSchema, { auth: "admin" }),
|
|
13838
13878
|
/** Grouped counts per ((field-origin)/bucketSize) bucket, filtered. */
|
|
13839
13879
|
histogram: method(object({
|
|
13840
13880
|
namespace: string().optional(),
|
|
@@ -13846,12 +13886,12 @@ id: union([string(), number()]) }), { kind: "mutation" }),
|
|
|
13846
13886
|
}), array(object({
|
|
13847
13887
|
bucket: number().int(),
|
|
13848
13888
|
count: number().int()
|
|
13849
|
-
})).readonly()),
|
|
13889
|
+
})).readonly(), { auth: "admin" }),
|
|
13850
13890
|
/** Check if a collection is empty. */
|
|
13851
13891
|
isEmpty: method(object({
|
|
13852
13892
|
namespace: string().optional(),
|
|
13853
13893
|
collection: string()
|
|
13854
|
-
}), boolean()),
|
|
13894
|
+
}), boolean(), { auth: "admin" }),
|
|
13855
13895
|
/**
|
|
13856
13896
|
* Declare a typed (SQL-backed) collection with explicit columns +
|
|
13857
13897
|
* indexes. Idempotent: re-declaring an existing collection with the
|
|
@@ -13872,7 +13912,10 @@ id: union([string(), number()]) }), { kind: "mutation" }),
|
|
|
13872
13912
|
collection: string(),
|
|
13873
13913
|
columns: array(CollectionColumnSchema).readonly(),
|
|
13874
13914
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
13875
|
-
}), _void(), {
|
|
13915
|
+
}), _void(), {
|
|
13916
|
+
kind: "mutation",
|
|
13917
|
+
auth: "admin"
|
|
13918
|
+
})
|
|
13876
13919
|
}
|
|
13877
13920
|
};
|
|
13878
13921
|
/**
|
|
@@ -14817,8 +14860,14 @@ var deviceExportCapability = {
|
|
|
14817
14860
|
getStatus: method(_void(), DeviceExportStatusSchema),
|
|
14818
14861
|
listSupportedDeviceKinds: method(_void(), array(DeviceKindSchema)),
|
|
14819
14862
|
listExposedDevices: method(_void(), array(ExposedDeviceSchema)),
|
|
14820
|
-
exposeDevice: method(ExposeInputSchema, _void(), {
|
|
14821
|
-
|
|
14863
|
+
exposeDevice: method(ExposeInputSchema, _void(), {
|
|
14864
|
+
kind: "mutation",
|
|
14865
|
+
auth: "admin"
|
|
14866
|
+
}),
|
|
14867
|
+
unexposeDevice: method(UnexposeInputSchema, _void(), {
|
|
14868
|
+
kind: "mutation",
|
|
14869
|
+
auth: "admin"
|
|
14870
|
+
})
|
|
14822
14871
|
}
|
|
14823
14872
|
};
|
|
14824
14873
|
/** Wire/storage schema for one icon id. */
|
|
@@ -15449,11 +15498,14 @@ var deviceManagerCapability = {
|
|
|
15449
15498
|
/** Remove a device from the DB + in-memory registry. Called by DeviceManagerApi.remove(). */
|
|
15450
15499
|
removeDevice: method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }),
|
|
15451
15500
|
/** Persist device config blob. Called by DeviceConfig.set/setAll(). */
|
|
15452
|
-
persistConfig: method(DevicePersistConfigPayloadSchema, _void(), {
|
|
15501
|
+
persistConfig: method(DevicePersistConfigPayloadSchema, _void(), {
|
|
15502
|
+
kind: "mutation",
|
|
15503
|
+
auth: "admin"
|
|
15504
|
+
}),
|
|
15453
15505
|
/** Load persisted config for a device. Called at restore time. */
|
|
15454
|
-
loadConfig: method(object({ deviceId: number() }), record(string(), unknown())),
|
|
15506
|
+
loadConfig: method(object({ deviceId: number() }), record(string(), unknown()), { auth: "admin" }),
|
|
15455
15507
|
/** Load persisted runtime state. Called at device adopt time. */
|
|
15456
|
-
loadRuntimeState: method(object({ deviceId: number() }), record(string(), unknown())),
|
|
15508
|
+
loadRuntimeState: method(object({ deviceId: number() }), record(string(), unknown()), { auth: "admin" }),
|
|
15457
15509
|
/** Load operator-organisational meta surface for a device. Called by
|
|
15458
15510
|
* the kernel proxy to populate `DeviceContext.deviceMeta` before
|
|
15459
15511
|
* the device class constructor runs. Returns `null` when the id
|
|
@@ -16018,6 +16070,23 @@ var deviceManagerCapability = {
|
|
|
16018
16070
|
*/
|
|
16019
16071
|
getAllBindings: method(object({}), array(DeviceBindingsForDeviceSchema)),
|
|
16020
16072
|
/**
|
|
16073
|
+
* The ids of every device bound to AT LEAST ONE of `capNames` — ids only,
|
|
16074
|
+
* ascending (D636).
|
|
16075
|
+
*
|
|
16076
|
+
* The targeted form of "which devices are openings / carry a battery":
|
|
16077
|
+
* before it, the alarm's household scan and the battery section's picker
|
|
16078
|
+
* read the whole fleet (~433 KB slim) and then `getBindingsBatch` over
|
|
16079
|
+
* ~900 ids in five calls. Same resolver as `getBindings` (so a WRAPPED
|
|
16080
|
+
* binding counts exactly as the routing does), walked server-side like
|
|
16081
|
+
* `getAllBindings`; only the matching ids cross the wire. Names are the
|
|
16082
|
+
* caller's to resolve with the targeted `listAll({ deviceIds })`.
|
|
16083
|
+
*
|
|
16084
|
+
* Tier: `protected`, like its siblings `getBindings` / `getBindingsBatch` /
|
|
16085
|
+
* `getAllBindings` — which devices carry a cap is routing metadata every
|
|
16086
|
+
* signed-in client already reads, and it reveals nothing those do not.
|
|
16087
|
+
*/
|
|
16088
|
+
listDeviceIdsByCaps: method(object({ capNames: array(string().min(1)).min(1).max(16) }), array(number())),
|
|
16089
|
+
/**
|
|
16021
16090
|
* Activate (or deactivate) a wrapper addon for a (device, cap) pair — the
|
|
16022
16091
|
* per-camera function switch's ONE authority (D62).
|
|
16023
16092
|
*
|
|
@@ -18102,12 +18171,27 @@ var mqttBrokerCapability = {
|
|
|
18102
18171
|
},
|
|
18103
18172
|
methods: {
|
|
18104
18173
|
listBrokers: method(_void(), array(BrokerInfoSchema)),
|
|
18105
|
-
getBrokerConfig: method(IdInputSchema, BrokerConnectionDetailsSchema),
|
|
18106
|
-
addBroker: method(AddBrokerInputSchema, AddBrokerResultSchema, {
|
|
18107
|
-
|
|
18108
|
-
|
|
18109
|
-
|
|
18110
|
-
|
|
18174
|
+
getBrokerConfig: method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }),
|
|
18175
|
+
addBroker: method(AddBrokerInputSchema, AddBrokerResultSchema, {
|
|
18176
|
+
kind: "mutation",
|
|
18177
|
+
auth: "admin"
|
|
18178
|
+
}),
|
|
18179
|
+
removeBroker: method(IdInputSchema, _void(), {
|
|
18180
|
+
kind: "mutation",
|
|
18181
|
+
auth: "admin"
|
|
18182
|
+
}),
|
|
18183
|
+
testConnection: method(IdInputSchema, TestResultSchema$1, {
|
|
18184
|
+
kind: "mutation",
|
|
18185
|
+
auth: "admin"
|
|
18186
|
+
}),
|
|
18187
|
+
startEmbeddedBroker: method(StartEmbeddedInputSchema, StartEmbeddedResultSchema, {
|
|
18188
|
+
kind: "mutation",
|
|
18189
|
+
auth: "admin"
|
|
18190
|
+
}),
|
|
18191
|
+
stopEmbeddedBroker: method(IdInputSchema, _void(), {
|
|
18192
|
+
kind: "mutation",
|
|
18193
|
+
auth: "admin"
|
|
18194
|
+
}),
|
|
18111
18195
|
getStatus: method(_void(), StatusSchema)
|
|
18112
18196
|
}
|
|
18113
18197
|
};
|
|
@@ -18422,6 +18506,18 @@ var TargetKindSchema = object({
|
|
|
18422
18506
|
*/
|
|
18423
18507
|
iconMediaType: string().optional(),
|
|
18424
18508
|
configSchema: ConfigSchemaPassthrough,
|
|
18509
|
+
/**
|
|
18510
|
+
* The config keys that decide WHERE this kind's secrets are sent (server,
|
|
18511
|
+
* base URL, instance, chat, recipient). A save that changes any of them
|
|
18512
|
+
* while leaving a secret redacted is refused by the provider (D634), so an
|
|
18513
|
+
* editor uses this to ask for the secret on exactly those edits instead of
|
|
18514
|
+
* on every edit.
|
|
18515
|
+
*
|
|
18516
|
+
* Optional: absent from a provider that holds no secret (the Home Assistant
|
|
18517
|
+
* kinds) and from a provider older than this field — an editor that finds
|
|
18518
|
+
* it absent must assume ANY edit may need the secret.
|
|
18519
|
+
*/
|
|
18520
|
+
destinationKeys: array(string()).optional(),
|
|
18425
18521
|
supportsDiscovery: boolean(),
|
|
18426
18522
|
caps: TargetKindCapsSchema
|
|
18427
18523
|
});
|
|
@@ -18466,25 +18562,40 @@ var notificationOutputCapability = {
|
|
|
18466
18562
|
mode: "collection",
|
|
18467
18563
|
methods: {
|
|
18468
18564
|
listTargetKinds: method(object({}), array(TargetKindSchema)),
|
|
18469
|
-
listTargets: method(object({}), array(TargetSchema)),
|
|
18565
|
+
listTargets: method(object({}), array(TargetSchema), { auth: "admin" }),
|
|
18470
18566
|
discoverTargets: method(object({
|
|
18471
18567
|
kind: string(),
|
|
18472
18568
|
config: record(string(), unknown()).optional()
|
|
18473
|
-
}), array(DiscoveredTargetSchema)),
|
|
18569
|
+
}), array(DiscoveredTargetSchema), { auth: "admin" }),
|
|
18474
18570
|
send: method(object({
|
|
18475
18571
|
targetId: string(),
|
|
18476
18572
|
notification: NotificationSchema
|
|
18477
|
-
}), SendResultSchema, {
|
|
18573
|
+
}), SendResultSchema, {
|
|
18574
|
+
kind: "mutation",
|
|
18575
|
+
auth: "admin"
|
|
18576
|
+
}),
|
|
18478
18577
|
testTarget: method(object({
|
|
18479
18578
|
targetId: string(),
|
|
18480
18579
|
sample: NotificationSchema.optional()
|
|
18481
|
-
}), TestResultSchema, {
|
|
18482
|
-
|
|
18483
|
-
|
|
18580
|
+
}), TestResultSchema, {
|
|
18581
|
+
kind: "mutation",
|
|
18582
|
+
auth: "admin"
|
|
18583
|
+
}),
|
|
18584
|
+
upsertTarget: method(object({ target: TargetSchema }), TargetSchema, {
|
|
18585
|
+
kind: "mutation",
|
|
18586
|
+
auth: "admin"
|
|
18587
|
+
}),
|
|
18588
|
+
deleteTarget: method(object({ targetId: string() }), _void(), {
|
|
18589
|
+
kind: "mutation",
|
|
18590
|
+
auth: "admin"
|
|
18591
|
+
}),
|
|
18484
18592
|
setTargetEnabled: method(object({
|
|
18485
18593
|
targetId: string(),
|
|
18486
18594
|
enabled: boolean()
|
|
18487
|
-
}), _void(), {
|
|
18595
|
+
}), _void(), {
|
|
18596
|
+
kind: "mutation",
|
|
18597
|
+
auth: "admin"
|
|
18598
|
+
})
|
|
18488
18599
|
}
|
|
18489
18600
|
};
|
|
18490
18601
|
new Set([
|
|
@@ -19367,6 +19478,19 @@ var NcSystemEventConditionSchema = object({
|
|
|
19367
19478
|
* does not carry) matches no `deviceTypes` list.
|
|
19368
19479
|
*/
|
|
19369
19480
|
deviceTypes: array(string().min(1)).min(1).optional(),
|
|
19481
|
+
/**
|
|
19482
|
+
* Devices this rule NEVER speaks about, whatever else matched. Scoped to the
|
|
19483
|
+
* same kind family as `deviceIds` (`systemEventFilterApplies(kind,
|
|
19484
|
+
* 'deviceIds')`) and applied AFTER it: include first, then exclude. A
|
|
19485
|
+
* consumable subject (`consumable:<id>:<key>`) is excluded by its device id.
|
|
19486
|
+
*
|
|
19487
|
+
* It never fails closed: a subject that carries no device id is not in the
|
|
19488
|
+
* list, so it is not excluded. "Every battery except the one thermometer that
|
|
19489
|
+
* reads 0 % forever" is the question this answers — expressed as an include
|
|
19490
|
+
* list it would have to name every other battery device, and every device
|
|
19491
|
+
* adopted later would be silently left out (D636).
|
|
19492
|
+
*/
|
|
19493
|
+
excludeDeviceIds: array(number().int()).min(1).optional(),
|
|
19370
19494
|
nodeIds: array(string().min(1)).min(1).optional(),
|
|
19371
19495
|
packageNames: array(string().min(1)).min(1).optional()
|
|
19372
19496
|
});
|
|
@@ -20558,6 +20682,14 @@ var NC_CONDITION_CATALOG = [
|
|
|
20558
20682
|
value: "server-updated",
|
|
20559
20683
|
label: "Server updated"
|
|
20560
20684
|
},
|
|
20685
|
+
{
|
|
20686
|
+
value: "device-battery-low",
|
|
20687
|
+
label: "Battery low"
|
|
20688
|
+
},
|
|
20689
|
+
{
|
|
20690
|
+
value: "device-battery-normal",
|
|
20691
|
+
label: "Battery back to normal"
|
|
20692
|
+
},
|
|
20561
20693
|
{
|
|
20562
20694
|
value: "device-consumable-low",
|
|
20563
20695
|
label: "Consumable low"
|
|
@@ -28132,54 +28264,78 @@ var storageCapability = {
|
|
|
28132
28264
|
resolve: method(object({
|
|
28133
28265
|
location: StorageLocationRefSchema,
|
|
28134
28266
|
relativePath: string()
|
|
28135
|
-
}), string()),
|
|
28267
|
+
}), string(), { auth: "admin" }),
|
|
28136
28268
|
write: method(object({
|
|
28137
28269
|
location: StorageLocationRefSchema,
|
|
28138
28270
|
relativePath: string(),
|
|
28139
28271
|
data: _instanceof(Uint8Array)
|
|
28140
|
-
}), _void(), {
|
|
28272
|
+
}), _void(), {
|
|
28273
|
+
kind: "mutation",
|
|
28274
|
+
auth: "admin"
|
|
28275
|
+
}),
|
|
28141
28276
|
read: method(object({
|
|
28142
28277
|
location: StorageLocationRefSchema,
|
|
28143
28278
|
relativePath: string()
|
|
28144
|
-
}), _instanceof(Uint8Array)),
|
|
28279
|
+
}), _instanceof(Uint8Array), { auth: "admin" }),
|
|
28145
28280
|
exists: method(object({
|
|
28146
28281
|
location: StorageLocationRefSchema,
|
|
28147
28282
|
relativePath: string()
|
|
28148
|
-
}), boolean()),
|
|
28283
|
+
}), boolean(), { auth: "admin" }),
|
|
28149
28284
|
list: method(object({
|
|
28150
28285
|
location: StorageLocationRefSchema,
|
|
28151
28286
|
prefix: string().optional()
|
|
28152
|
-
}), array(string()).readonly()),
|
|
28287
|
+
}), array(string()).readonly(), { auth: "admin" }),
|
|
28153
28288
|
delete: method(object({
|
|
28154
28289
|
location: StorageLocationRefSchema,
|
|
28155
28290
|
relativePath: string()
|
|
28156
|
-
}), _void(), {
|
|
28291
|
+
}), _void(), {
|
|
28292
|
+
kind: "mutation",
|
|
28293
|
+
auth: "admin"
|
|
28294
|
+
}),
|
|
28157
28295
|
getAvailableSpace: method(object({ location: StorageLocationRefSchema }), number().nullable()),
|
|
28158
28296
|
beginUpload: method(object({
|
|
28159
28297
|
location: StorageLocationRefSchema,
|
|
28160
28298
|
relativePath: string(),
|
|
28161
28299
|
sizeBytes: number().optional()
|
|
28162
|
-
}), object({ uploadId: string() }), {
|
|
28300
|
+
}), object({ uploadId: string() }), {
|
|
28301
|
+
kind: "mutation",
|
|
28302
|
+
auth: "admin"
|
|
28303
|
+
}),
|
|
28163
28304
|
writeChunk: method(object({
|
|
28164
28305
|
uploadId: string(),
|
|
28165
28306
|
offset: number(),
|
|
28166
28307
|
data: _instanceof(Uint8Array)
|
|
28167
|
-
}), _void(), {
|
|
28168
|
-
|
|
28169
|
-
|
|
28308
|
+
}), _void(), {
|
|
28309
|
+
kind: "mutation",
|
|
28310
|
+
auth: "admin"
|
|
28311
|
+
}),
|
|
28312
|
+
finalizeUpload: method(object({ uploadId: string() }), _void(), {
|
|
28313
|
+
kind: "mutation",
|
|
28314
|
+
auth: "admin"
|
|
28315
|
+
}),
|
|
28316
|
+
abortUpload: method(object({ uploadId: string() }), _void(), {
|
|
28317
|
+
kind: "mutation",
|
|
28318
|
+
auth: "admin"
|
|
28319
|
+
}),
|
|
28170
28320
|
beginDownload: method(object({
|
|
28171
28321
|
location: StorageLocationRefSchema,
|
|
28172
28322
|
relativePath: string()
|
|
28173
28323
|
}), object({
|
|
28174
28324
|
downloadId: string(),
|
|
28175
28325
|
sizeBytes: number()
|
|
28176
|
-
}), {
|
|
28326
|
+
}), {
|
|
28327
|
+
kind: "mutation",
|
|
28328
|
+
auth: "admin"
|
|
28329
|
+
}),
|
|
28177
28330
|
readChunk: method(object({
|
|
28178
28331
|
downloadId: string(),
|
|
28179
28332
|
offset: number(),
|
|
28180
28333
|
length: number()
|
|
28181
|
-
}), _instanceof(Uint8Array)),
|
|
28182
|
-
endDownload: method(object({ downloadId: string() }), _void(), {
|
|
28334
|
+
}), _instanceof(Uint8Array), { auth: "admin" }),
|
|
28335
|
+
endDownload: method(object({ downloadId: string() }), _void(), {
|
|
28336
|
+
kind: "mutation",
|
|
28337
|
+
auth: "admin"
|
|
28338
|
+
}),
|
|
28183
28339
|
listLocations: method(object({ type: StorageLocationTypeSchema.optional() }), array(StorageLocationSchema).readonly()),
|
|
28184
28340
|
listLocationDeclarations: method(_void(), array(StorageLocationDeclarationSchema).readonly()),
|
|
28185
28341
|
upsertLocation: method(StorageLocationSchema.omit({
|
|
@@ -30267,7 +30423,67 @@ var WebrtcLadderDecisionSchema = object({
|
|
|
30267
30423
|
serverSending: boolean().nullable(),
|
|
30268
30424
|
/** Epoch ms. The overlay prints its age; a decision from 40 minutes ago
|
|
30269
30425
|
* must not read like one from this second. */
|
|
30270
|
-
at: number()
|
|
30426
|
+
at: number(),
|
|
30427
|
+
/** The broker's own cause when it is finer than `cause` can carry, e.g.
|
|
30428
|
+
* `trial-revert` (reported as `stall`/`loss` for older consumers). Optional:
|
|
30429
|
+
* an older server strips it instead of rejecting the answer. */
|
|
30430
|
+
causeDetail: string().optional()
|
|
30431
|
+
});
|
|
30432
|
+
var WebrtcClimbHoldSchema = object({
|
|
30433
|
+
/** `stall-building` — the client receives ≪ what is sent; `delivery` — the
|
|
30434
|
+
* current rung is not landing whole; `no-evidence` — no receiver feedback;
|
|
30435
|
+
* `warming` — healthy, accumulating the streak; `cooldown` — too soon after
|
|
30436
|
+
* a change; `capacity` — a MEASURED probe below the next rung's bar;
|
|
30437
|
+
* `try-unclean` — no capacity evidence, and the path is not clean enough to
|
|
30438
|
+
* try; `try-backoff` — a try reverted, waiting out its backoff; `trial` —
|
|
30439
|
+
* this rung IS a try, reverting if it does not land; `suspended` —
|
|
30440
|
+
* recorded playback on the track. */
|
|
30441
|
+
code: string(),
|
|
30442
|
+
/** The rung a climb would go to. */
|
|
30443
|
+
nextTier: CamProfileSchema,
|
|
30444
|
+
/** Bytes received ÷ bytes sent over the delivery window (≥ one GOP). */
|
|
30445
|
+
deliveryRatio: number().nullable(),
|
|
30446
|
+
deliveryWindowMs: number().nullable(),
|
|
30447
|
+
/** The ratio a climb requires. */
|
|
30448
|
+
climbDeliveryRatio: number(),
|
|
30449
|
+
/** The receiver's bandwidth estimate (REMB), kbps. Capped by what is sent. */
|
|
30450
|
+
capacityKbps: number().nullable(),
|
|
30451
|
+
/** The viewer's downlink probe for this session, kbps. */
|
|
30452
|
+
probeKbps: number().nullable(),
|
|
30453
|
+
/** The next rung's measured bitrate, kbps. */
|
|
30454
|
+
nextTierKbps: number().nullable(),
|
|
30455
|
+
capacityMargin: number(),
|
|
30456
|
+
/** The capacity a climb to `nextTier` needs, kbps (bitrate × margin, or the
|
|
30457
|
+
* client ladder threshold when the rung has measured nothing). */
|
|
30458
|
+
neededKbps: number().nullable(),
|
|
30459
|
+
/** For `try-unclean`: which clean-path condition failed (a `WebrtcTryBlocker`,
|
|
30460
|
+
* carried as a string for the same reason as `code`). */
|
|
30461
|
+
tryBlockedBy: string().nullable(),
|
|
30462
|
+
/** The delivery ratio and the loss ratio a try requires / must stay under.
|
|
30463
|
+
* Optional, like every field added to this schema after it first shipped:
|
|
30464
|
+
* the router validates output, so a REQUIRED new field makes a newer server
|
|
30465
|
+
* reject an older broker's whole answer (review m1). */
|
|
30466
|
+
tryDeliveryRatio: number().optional(),
|
|
30467
|
+
tryMaxLossRatio: number().optional(),
|
|
30468
|
+
/** For `try-backoff`: time until the next try, ms. */
|
|
30469
|
+
retryInMs: number().nullable(),
|
|
30470
|
+
/** The last try that reverted in this viewer session. */
|
|
30471
|
+
lastRevert: object({
|
|
30472
|
+
tier: CamProfileSchema,
|
|
30473
|
+
deliveryRatio: number().nullable(),
|
|
30474
|
+
stalled: boolean(),
|
|
30475
|
+
at: number()
|
|
30476
|
+
}).nullable(),
|
|
30477
|
+
/** For `trial`: how long this rung has been on trial, and for how long it must hold. */
|
|
30478
|
+
trialForMs: number().nullable(),
|
|
30479
|
+
trialMs: number().nullable(),
|
|
30480
|
+
healthyForMs: number().nullable(),
|
|
30481
|
+
requiredHealthyMs: number().nullable(),
|
|
30482
|
+
/** Epoch ms this hold's code began. */
|
|
30483
|
+
since: number(),
|
|
30484
|
+
/** The same one-line account the broker logs, e.g.
|
|
30485
|
+
* `held: delivery 0.97 over 4.0s ok, REMB 480 kbps < mid 1800 kbps × 1.2`. */
|
|
30486
|
+
summary: string()
|
|
30271
30487
|
});
|
|
30272
30488
|
/** Per-tier count of MEASURED downgrades this viewer session has suffered. */
|
|
30273
30489
|
var WebrtcTierFailureSchema = object({
|
|
@@ -30331,7 +30547,12 @@ var WebrtcSessionDebugSchema = object({
|
|
|
30331
30547
|
tierFailures: array(WebrtcTierFailureSchema),
|
|
30332
30548
|
/** Successful promotions in this viewer session (drives the progressive
|
|
30333
30549
|
* healthy timer). Null when no ladder is running. */
|
|
30334
|
-
upgradeCount: number().nullable()
|
|
30550
|
+
upgradeCount: number().nullable(),
|
|
30551
|
+
/** Why the ladder is not climbing right now. Null when no ladder runs, it
|
|
30552
|
+
* is at the top rung, or it just moved. Optional because this output is
|
|
30553
|
+
* validated by the router: a server carrying this schema must still accept
|
|
30554
|
+
* the answer of a stream-broker deployed before the field existed. */
|
|
30555
|
+
climbHold: WebrtcClimbHoldSchema.nullable().optional()
|
|
30335
30556
|
});
|
|
30336
30557
|
/**
|
|
30337
30558
|
* WebRTC session — device-scoped facade over the system `webrtc` cap.
|
|
@@ -36180,6 +36401,11 @@ var ClientNetworkStatsSchema = object({
|
|
|
36180
36401
|
jitterMs: number(),
|
|
36181
36402
|
estimatedBandwidthKbps: number(),
|
|
36182
36403
|
packetLossPercent: number().min(0).max(100),
|
|
36404
|
+
/** The viewer's latest `/adaptive-probe` reading, Mbps — whatever it read
|
|
36405
|
+
* (D635 I4). Absent when it never probed or the probe failed (unknown). */
|
|
36406
|
+
downlinkMbps: number().optional(),
|
|
36407
|
+
/** Age of that reading when this report was sent, ms. */
|
|
36408
|
+
downlinkAgeMs: number().optional(),
|
|
36183
36409
|
lastUpdated: number()
|
|
36184
36410
|
});
|
|
36185
36411
|
var DeviceNetworkStatsSchema = object({
|
|
@@ -36199,7 +36425,11 @@ var networkQualityCapability = {
|
|
|
36199
36425
|
rttMs: number().min(0).max(6e4),
|
|
36200
36426
|
jitterMs: number().min(0).max(1e4),
|
|
36201
36427
|
estimatedBandwidthKbps: number().min(0).max(1e6),
|
|
36202
|
-
packetLossPercent: number().min(0).max(100)
|
|
36428
|
+
packetLossPercent: number().min(0).max(100),
|
|
36429
|
+
/** Latest downlink probe, Mbps, whatever it read; absent = never / failed. */
|
|
36430
|
+
downlinkMbps: number().min(0).max(1e5).optional(),
|
|
36431
|
+
/** Age of that probe when this report is sent, ms. */
|
|
36432
|
+
downlinkAgeMs: number().min(0).max(864e5).optional()
|
|
36203
36433
|
}), _void(), { kind: "mutation" })
|
|
36204
36434
|
},
|
|
36205
36435
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
@@ -45875,6 +46105,12 @@ Object.freeze({
|
|
|
45875
46105
|
addonId: null,
|
|
45876
46106
|
access: "view"
|
|
45877
46107
|
},
|
|
46108
|
+
"deviceManager.listDeviceIdsByCaps": {
|
|
46109
|
+
capName: "device-manager",
|
|
46110
|
+
capScope: "system",
|
|
46111
|
+
addonId: null,
|
|
46112
|
+
access: "view"
|
|
46113
|
+
},
|
|
45878
46114
|
"deviceManager.listLocationDescriptions": {
|
|
45879
46115
|
capName: "device-manager",
|
|
45880
46116
|
capScope: "system",
|