@camstack/addon-matter-broker 0.2.29 → 0.2.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +77 -2
- package/dist/addon.mjs +77 -2
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -15862,7 +15862,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15862
15862
|
updatedAt: number(),
|
|
15863
15863
|
/** Failure detail — present on a `dead` row. */
|
|
15864
15864
|
error: string$2().optional(),
|
|
15865
|
-
subject: NcHistorySubjectSchema
|
|
15865
|
+
subject: NcHistorySubjectSchema,
|
|
15866
|
+
/**
|
|
15867
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15868
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15869
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15870
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15871
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15872
|
+
*
|
|
15873
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15874
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15875
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15876
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15877
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15878
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15879
|
+
* broken link.
|
|
15880
|
+
*/
|
|
15881
|
+
artifactIds: array(string$2().min(1)).optional()
|
|
15866
15882
|
});
|
|
15867
15883
|
/**
|
|
15868
15884
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16089,7 +16105,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16089
16105
|
}), method(object({}), object({
|
|
16090
16106
|
catalog: array(NcConditionDescriptorSchema),
|
|
16091
16107
|
taxonomy: NcTaxonomySchema.optional()
|
|
16092
|
-
})), 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 }), {
|
|
16108
|
+
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({ artifactId: string$2().min(1) }), object({ url: string$2().nullable() }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
16093
16109
|
kind: "mutation",
|
|
16094
16110
|
caller: "required"
|
|
16095
16111
|
}), method(object({ snoozeId: string$2() }), object({ success: literal(true) }), {
|
|
@@ -27126,6 +27142,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27126
27142
|
/** Media ms the returned fragment covers. */
|
|
27127
27143
|
gopDurMs: number()
|
|
27128
27144
|
});
|
|
27145
|
+
/**
|
|
27146
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27147
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27148
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27149
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27150
|
+
*
|
|
27151
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27152
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27153
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27154
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27155
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27156
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27157
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27158
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27159
|
+
* bytes nothing has proven decodable.
|
|
27160
|
+
*/
|
|
27161
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27162
|
+
kind: literal("ok"),
|
|
27163
|
+
data: _instanceof(Uint8Array),
|
|
27164
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27165
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27166
|
+
gopStartMs: number(),
|
|
27167
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27168
|
+
gopDurMs: number(),
|
|
27169
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27170
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27171
|
+
reachesRequestedEnd: boolean()
|
|
27172
|
+
}), object({
|
|
27173
|
+
kind: literal("spans-multiple-segments"),
|
|
27174
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27175
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27176
|
+
segmentEndMs: number()
|
|
27177
|
+
})]);
|
|
27129
27178
|
method(object({
|
|
27130
27179
|
deviceId: number(),
|
|
27131
27180
|
fromMs: number(),
|
|
@@ -27176,6 +27225,15 @@ method(object({
|
|
|
27176
27225
|
}), ReadGopBytesResultSchema, {
|
|
27177
27226
|
kind: "query",
|
|
27178
27227
|
auth: "admin"
|
|
27228
|
+
}), method(object({
|
|
27229
|
+
deviceId: number(),
|
|
27230
|
+
profile: string$2(),
|
|
27231
|
+
startMs: number(),
|
|
27232
|
+
fromMs: number(),
|
|
27233
|
+
toMs: number()
|
|
27234
|
+
}), ReadWindowBytesResultSchema, {
|
|
27235
|
+
kind: "query",
|
|
27236
|
+
auth: "admin"
|
|
27179
27237
|
}), method(object({
|
|
27180
27238
|
deviceId: number(),
|
|
27181
27239
|
config: RecordingConfigSchema
|
|
@@ -33263,6 +33321,12 @@ Object.freeze({
|
|
|
33263
33321
|
addonId: null,
|
|
33264
33322
|
access: "view"
|
|
33265
33323
|
},
|
|
33324
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33325
|
+
capName: "notification-rules",
|
|
33326
|
+
capScope: "system",
|
|
33327
|
+
addonId: null,
|
|
33328
|
+
access: "view"
|
|
33329
|
+
},
|
|
33266
33330
|
"notificationRules.setAlarmConfig": {
|
|
33267
33331
|
capName: "notification-rules",
|
|
33268
33332
|
capScope: "system",
|
|
@@ -34667,6 +34731,12 @@ Object.freeze({
|
|
|
34667
34731
|
addonId: null,
|
|
34668
34732
|
access: "view"
|
|
34669
34733
|
},
|
|
34734
|
+
"recording.readWindowBytes": {
|
|
34735
|
+
capName: "recording",
|
|
34736
|
+
capScope: "system",
|
|
34737
|
+
addonId: null,
|
|
34738
|
+
access: "view"
|
|
34739
|
+
},
|
|
34670
34740
|
"recording.refreshStorageLocationsForMigration": {
|
|
34671
34741
|
capName: "recording",
|
|
34672
34742
|
capScope: "system",
|
|
@@ -37497,6 +37567,11 @@ Object.freeze({
|
|
|
37497
37567
|
form: "single",
|
|
37498
37568
|
optional: false
|
|
37499
37569
|
}],
|
|
37570
|
+
"recording.readWindowBytes": [{
|
|
37571
|
+
name: "deviceId",
|
|
37572
|
+
form: "single",
|
|
37573
|
+
optional: false
|
|
37574
|
+
}],
|
|
37500
37575
|
"recording.relocateFootage": [{
|
|
37501
37576
|
name: "deviceId",
|
|
37502
37577
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -15860,7 +15860,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15860
15860
|
updatedAt: number(),
|
|
15861
15861
|
/** Failure detail — present on a `dead` row. */
|
|
15862
15862
|
error: string$2().optional(),
|
|
15863
|
-
subject: NcHistorySubjectSchema
|
|
15863
|
+
subject: NcHistorySubjectSchema,
|
|
15864
|
+
/**
|
|
15865
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15866
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15867
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15868
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15869
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15870
|
+
*
|
|
15871
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15872
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15873
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15874
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15875
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15876
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15877
|
+
* broken link.
|
|
15878
|
+
*/
|
|
15879
|
+
artifactIds: array(string$2().min(1)).optional()
|
|
15864
15880
|
});
|
|
15865
15881
|
/**
|
|
15866
15882
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16087,7 +16103,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16087
16103
|
}), method(object({}), object({
|
|
16088
16104
|
catalog: array(NcConditionDescriptorSchema),
|
|
16089
16105
|
taxonomy: NcTaxonomySchema.optional()
|
|
16090
|
-
})), 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 }), {
|
|
16106
|
+
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({ artifactId: string$2().min(1) }), object({ url: string$2().nullable() }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
16091
16107
|
kind: "mutation",
|
|
16092
16108
|
caller: "required"
|
|
16093
16109
|
}), method(object({ snoozeId: string$2() }), object({ success: literal(true) }), {
|
|
@@ -27124,6 +27140,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27124
27140
|
/** Media ms the returned fragment covers. */
|
|
27125
27141
|
gopDurMs: number()
|
|
27126
27142
|
});
|
|
27143
|
+
/**
|
|
27144
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27145
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27146
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27147
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27148
|
+
*
|
|
27149
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27150
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27151
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27152
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27153
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27154
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27155
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27156
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27157
|
+
* bytes nothing has proven decodable.
|
|
27158
|
+
*/
|
|
27159
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27160
|
+
kind: literal("ok"),
|
|
27161
|
+
data: _instanceof(Uint8Array),
|
|
27162
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27163
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27164
|
+
gopStartMs: number(),
|
|
27165
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27166
|
+
gopDurMs: number(),
|
|
27167
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27168
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27169
|
+
reachesRequestedEnd: boolean()
|
|
27170
|
+
}), object({
|
|
27171
|
+
kind: literal("spans-multiple-segments"),
|
|
27172
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27173
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27174
|
+
segmentEndMs: number()
|
|
27175
|
+
})]);
|
|
27127
27176
|
method(object({
|
|
27128
27177
|
deviceId: number(),
|
|
27129
27178
|
fromMs: number(),
|
|
@@ -27174,6 +27223,15 @@ method(object({
|
|
|
27174
27223
|
}), ReadGopBytesResultSchema, {
|
|
27175
27224
|
kind: "query",
|
|
27176
27225
|
auth: "admin"
|
|
27226
|
+
}), method(object({
|
|
27227
|
+
deviceId: number(),
|
|
27228
|
+
profile: string$2(),
|
|
27229
|
+
startMs: number(),
|
|
27230
|
+
fromMs: number(),
|
|
27231
|
+
toMs: number()
|
|
27232
|
+
}), ReadWindowBytesResultSchema, {
|
|
27233
|
+
kind: "query",
|
|
27234
|
+
auth: "admin"
|
|
27177
27235
|
}), method(object({
|
|
27178
27236
|
deviceId: number(),
|
|
27179
27237
|
config: RecordingConfigSchema
|
|
@@ -33261,6 +33319,12 @@ Object.freeze({
|
|
|
33261
33319
|
addonId: null,
|
|
33262
33320
|
access: "view"
|
|
33263
33321
|
},
|
|
33322
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33323
|
+
capName: "notification-rules",
|
|
33324
|
+
capScope: "system",
|
|
33325
|
+
addonId: null,
|
|
33326
|
+
access: "view"
|
|
33327
|
+
},
|
|
33264
33328
|
"notificationRules.setAlarmConfig": {
|
|
33265
33329
|
capName: "notification-rules",
|
|
33266
33330
|
capScope: "system",
|
|
@@ -34665,6 +34729,12 @@ Object.freeze({
|
|
|
34665
34729
|
addonId: null,
|
|
34666
34730
|
access: "view"
|
|
34667
34731
|
},
|
|
34732
|
+
"recording.readWindowBytes": {
|
|
34733
|
+
capName: "recording",
|
|
34734
|
+
capScope: "system",
|
|
34735
|
+
addonId: null,
|
|
34736
|
+
access: "view"
|
|
34737
|
+
},
|
|
34668
34738
|
"recording.refreshStorageLocationsForMigration": {
|
|
34669
34739
|
capName: "recording",
|
|
34670
34740
|
capScope: "system",
|
|
@@ -37495,6 +37565,11 @@ Object.freeze({
|
|
|
37495
37565
|
form: "single",
|
|
37496
37566
|
optional: false
|
|
37497
37567
|
}],
|
|
37568
|
+
"recording.readWindowBytes": [{
|
|
37569
|
+
name: "deviceId",
|
|
37570
|
+
form: "single",
|
|
37571
|
+
optional: false
|
|
37572
|
+
}],
|
|
37498
37573
|
"recording.relocateFootage": [{
|
|
37499
37574
|
name: "deviceId",
|
|
37500
37575
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-matter-broker",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.30",
|
|
4
4
|
"description": "Matter broker addon for CamStack — owns a Matter fabric (commissioning + the long-lived controller) via the matter.js controller and brokers commissioned Matter nodes into CamStack",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|