@camstack/addon-decoder-nodeav 1.2.29 → 1.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/index.js +77 -2
- package/dist/index.mjs +77 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -15610,7 +15610,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15610
15610
|
updatedAt: number(),
|
|
15611
15611
|
/** Failure detail — present on a `dead` row. */
|
|
15612
15612
|
error: string().optional(),
|
|
15613
|
-
subject: NcHistorySubjectSchema
|
|
15613
|
+
subject: NcHistorySubjectSchema,
|
|
15614
|
+
/**
|
|
15615
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15616
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15617
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15618
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15619
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15620
|
+
*
|
|
15621
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15622
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15623
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15624
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15625
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15626
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15627
|
+
* broken link.
|
|
15628
|
+
*/
|
|
15629
|
+
artifactIds: array(string().min(1)).optional()
|
|
15614
15630
|
});
|
|
15615
15631
|
/**
|
|
15616
15632
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -15837,7 +15853,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
15837
15853
|
}), method(object({}), object({
|
|
15838
15854
|
catalog: array(NcConditionDescriptorSchema),
|
|
15839
15855
|
taxonomy: NcTaxonomySchema.optional()
|
|
15840
|
-
})), 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 }), {
|
|
15856
|
+
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({ artifactId: string().min(1) }), object({ url: string().nullable() }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
15841
15857
|
kind: "mutation",
|
|
15842
15858
|
caller: "required"
|
|
15843
15859
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -25129,6 +25145,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
25129
25145
|
/** Media ms the returned fragment covers. */
|
|
25130
25146
|
gopDurMs: number()
|
|
25131
25147
|
});
|
|
25148
|
+
/**
|
|
25149
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
25150
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
25151
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
25152
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
25153
|
+
*
|
|
25154
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
25155
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
25156
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
25157
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
25158
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
25159
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
25160
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
25161
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
25162
|
+
* bytes nothing has proven decodable.
|
|
25163
|
+
*/
|
|
25164
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
25165
|
+
kind: literal("ok"),
|
|
25166
|
+
data: _instanceof(Uint8Array),
|
|
25167
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
25168
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
25169
|
+
gopStartMs: number(),
|
|
25170
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
25171
|
+
gopDurMs: number(),
|
|
25172
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
25173
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
25174
|
+
reachesRequestedEnd: boolean()
|
|
25175
|
+
}), object({
|
|
25176
|
+
kind: literal("spans-multiple-segments"),
|
|
25177
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
25178
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
25179
|
+
segmentEndMs: number()
|
|
25180
|
+
})]);
|
|
25132
25181
|
method(object({
|
|
25133
25182
|
deviceId: number(),
|
|
25134
25183
|
fromMs: number(),
|
|
@@ -25179,6 +25228,15 @@ method(object({
|
|
|
25179
25228
|
}), ReadGopBytesResultSchema, {
|
|
25180
25229
|
kind: "query",
|
|
25181
25230
|
auth: "admin"
|
|
25231
|
+
}), method(object({
|
|
25232
|
+
deviceId: number(),
|
|
25233
|
+
profile: string(),
|
|
25234
|
+
startMs: number(),
|
|
25235
|
+
fromMs: number(),
|
|
25236
|
+
toMs: number()
|
|
25237
|
+
}), ReadWindowBytesResultSchema, {
|
|
25238
|
+
kind: "query",
|
|
25239
|
+
auth: "admin"
|
|
25182
25240
|
}), method(object({
|
|
25183
25241
|
deviceId: number(),
|
|
25184
25242
|
config: RecordingConfigSchema
|
|
@@ -29597,6 +29655,12 @@ Object.freeze({
|
|
|
29597
29655
|
addonId: null,
|
|
29598
29656
|
access: "view"
|
|
29599
29657
|
},
|
|
29658
|
+
"notificationRules.resolveArtifactUrl": {
|
|
29659
|
+
capName: "notification-rules",
|
|
29660
|
+
capScope: "system",
|
|
29661
|
+
addonId: null,
|
|
29662
|
+
access: "view"
|
|
29663
|
+
},
|
|
29600
29664
|
"notificationRules.setAlarmConfig": {
|
|
29601
29665
|
capName: "notification-rules",
|
|
29602
29666
|
capScope: "system",
|
|
@@ -31001,6 +31065,12 @@ Object.freeze({
|
|
|
31001
31065
|
addonId: null,
|
|
31002
31066
|
access: "view"
|
|
31003
31067
|
},
|
|
31068
|
+
"recording.readWindowBytes": {
|
|
31069
|
+
capName: "recording",
|
|
31070
|
+
capScope: "system",
|
|
31071
|
+
addonId: null,
|
|
31072
|
+
access: "view"
|
|
31073
|
+
},
|
|
31004
31074
|
"recording.refreshStorageLocationsForMigration": {
|
|
31005
31075
|
capName: "recording",
|
|
31006
31076
|
capScope: "system",
|
|
@@ -33831,6 +33901,11 @@ Object.freeze({
|
|
|
33831
33901
|
form: "single",
|
|
33832
33902
|
optional: false
|
|
33833
33903
|
}],
|
|
33904
|
+
"recording.readWindowBytes": [{
|
|
33905
|
+
name: "deviceId",
|
|
33906
|
+
form: "single",
|
|
33907
|
+
optional: false
|
|
33908
|
+
}],
|
|
33834
33909
|
"recording.relocateFootage": [{
|
|
33835
33910
|
name: "deviceId",
|
|
33836
33911
|
form: "single",
|
package/dist/index.mjs
CHANGED
|
@@ -15606,7 +15606,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15606
15606
|
updatedAt: number(),
|
|
15607
15607
|
/** Failure detail — present on a `dead` row. */
|
|
15608
15608
|
error: string().optional(),
|
|
15609
|
-
subject: NcHistorySubjectSchema
|
|
15609
|
+
subject: NcHistorySubjectSchema,
|
|
15610
|
+
/**
|
|
15611
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15612
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15613
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15614
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15615
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15616
|
+
*
|
|
15617
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15618
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15619
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15620
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15621
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15622
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15623
|
+
* broken link.
|
|
15624
|
+
*/
|
|
15625
|
+
artifactIds: array(string().min(1)).optional()
|
|
15610
15626
|
});
|
|
15611
15627
|
/**
|
|
15612
15628
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -15833,7 +15849,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
15833
15849
|
}), method(object({}), object({
|
|
15834
15850
|
catalog: array(NcConditionDescriptorSchema),
|
|
15835
15851
|
taxonomy: NcTaxonomySchema.optional()
|
|
15836
|
-
})), 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 }), {
|
|
15852
|
+
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({ artifactId: string().min(1) }), object({ url: string().nullable() }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
15837
15853
|
kind: "mutation",
|
|
15838
15854
|
caller: "required"
|
|
15839
15855
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -25125,6 +25141,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
25125
25141
|
/** Media ms the returned fragment covers. */
|
|
25126
25142
|
gopDurMs: number()
|
|
25127
25143
|
});
|
|
25144
|
+
/**
|
|
25145
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
25146
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
25147
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
25148
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
25149
|
+
*
|
|
25150
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
25151
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
25152
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
25153
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
25154
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
25155
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
25156
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
25157
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
25158
|
+
* bytes nothing has proven decodable.
|
|
25159
|
+
*/
|
|
25160
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
25161
|
+
kind: literal("ok"),
|
|
25162
|
+
data: _instanceof(Uint8Array),
|
|
25163
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
25164
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
25165
|
+
gopStartMs: number(),
|
|
25166
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
25167
|
+
gopDurMs: number(),
|
|
25168
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
25169
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
25170
|
+
reachesRequestedEnd: boolean()
|
|
25171
|
+
}), object({
|
|
25172
|
+
kind: literal("spans-multiple-segments"),
|
|
25173
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
25174
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
25175
|
+
segmentEndMs: number()
|
|
25176
|
+
})]);
|
|
25128
25177
|
method(object({
|
|
25129
25178
|
deviceId: number(),
|
|
25130
25179
|
fromMs: number(),
|
|
@@ -25175,6 +25224,15 @@ method(object({
|
|
|
25175
25224
|
}), ReadGopBytesResultSchema, {
|
|
25176
25225
|
kind: "query",
|
|
25177
25226
|
auth: "admin"
|
|
25227
|
+
}), method(object({
|
|
25228
|
+
deviceId: number(),
|
|
25229
|
+
profile: string(),
|
|
25230
|
+
startMs: number(),
|
|
25231
|
+
fromMs: number(),
|
|
25232
|
+
toMs: number()
|
|
25233
|
+
}), ReadWindowBytesResultSchema, {
|
|
25234
|
+
kind: "query",
|
|
25235
|
+
auth: "admin"
|
|
25178
25236
|
}), method(object({
|
|
25179
25237
|
deviceId: number(),
|
|
25180
25238
|
config: RecordingConfigSchema
|
|
@@ -29593,6 +29651,12 @@ Object.freeze({
|
|
|
29593
29651
|
addonId: null,
|
|
29594
29652
|
access: "view"
|
|
29595
29653
|
},
|
|
29654
|
+
"notificationRules.resolveArtifactUrl": {
|
|
29655
|
+
capName: "notification-rules",
|
|
29656
|
+
capScope: "system",
|
|
29657
|
+
addonId: null,
|
|
29658
|
+
access: "view"
|
|
29659
|
+
},
|
|
29596
29660
|
"notificationRules.setAlarmConfig": {
|
|
29597
29661
|
capName: "notification-rules",
|
|
29598
29662
|
capScope: "system",
|
|
@@ -30997,6 +31061,12 @@ Object.freeze({
|
|
|
30997
31061
|
addonId: null,
|
|
30998
31062
|
access: "view"
|
|
30999
31063
|
},
|
|
31064
|
+
"recording.readWindowBytes": {
|
|
31065
|
+
capName: "recording",
|
|
31066
|
+
capScope: "system",
|
|
31067
|
+
addonId: null,
|
|
31068
|
+
access: "view"
|
|
31069
|
+
},
|
|
31000
31070
|
"recording.refreshStorageLocationsForMigration": {
|
|
31001
31071
|
capName: "recording",
|
|
31002
31072
|
capScope: "system",
|
|
@@ -33827,6 +33897,11 @@ Object.freeze({
|
|
|
33827
33897
|
form: "single",
|
|
33828
33898
|
optional: false
|
|
33829
33899
|
}],
|
|
33900
|
+
"recording.readWindowBytes": [{
|
|
33901
|
+
name: "deviceId",
|
|
33902
|
+
form: "single",
|
|
33903
|
+
optional: false
|
|
33904
|
+
}],
|
|
33830
33905
|
"recording.relocateFootage": [{
|
|
33831
33906
|
name: "deviceId",
|
|
33832
33907
|
form: "single",
|