@camstack/addon-terminal 0.1.35 → 0.1.36
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
|
@@ -15826,7 +15826,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15826
15826
|
updatedAt: number(),
|
|
15827
15827
|
/** Failure detail — present on a `dead` row. */
|
|
15828
15828
|
error: string().optional(),
|
|
15829
|
-
subject: NcHistorySubjectSchema
|
|
15829
|
+
subject: NcHistorySubjectSchema,
|
|
15830
|
+
/**
|
|
15831
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15832
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15833
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15834
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15835
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15836
|
+
*
|
|
15837
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15838
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15839
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15840
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15841
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15842
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15843
|
+
* broken link.
|
|
15844
|
+
*/
|
|
15845
|
+
artifactIds: array(string().min(1)).optional()
|
|
15830
15846
|
});
|
|
15831
15847
|
/**
|
|
15832
15848
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16053,7 +16069,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16053
16069
|
}), method(object({}), object({
|
|
16054
16070
|
catalog: array(NcConditionDescriptorSchema),
|
|
16055
16071
|
taxonomy: NcTaxonomySchema.optional()
|
|
16056
|
-
})), 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 }), {
|
|
16072
|
+
})), 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 }), {
|
|
16057
16073
|
kind: "mutation",
|
|
16058
16074
|
caller: "required"
|
|
16059
16075
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27221,6 +27237,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27221
27237
|
/** Media ms the returned fragment covers. */
|
|
27222
27238
|
gopDurMs: number()
|
|
27223
27239
|
});
|
|
27240
|
+
/**
|
|
27241
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27242
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27243
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27244
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27245
|
+
*
|
|
27246
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27247
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27248
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27249
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27250
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27251
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27252
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27253
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27254
|
+
* bytes nothing has proven decodable.
|
|
27255
|
+
*/
|
|
27256
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27257
|
+
kind: literal("ok"),
|
|
27258
|
+
data: _instanceof(Uint8Array),
|
|
27259
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27260
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27261
|
+
gopStartMs: number(),
|
|
27262
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27263
|
+
gopDurMs: number(),
|
|
27264
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27265
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27266
|
+
reachesRequestedEnd: boolean()
|
|
27267
|
+
}), object({
|
|
27268
|
+
kind: literal("spans-multiple-segments"),
|
|
27269
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27270
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27271
|
+
segmentEndMs: number()
|
|
27272
|
+
})]);
|
|
27224
27273
|
method(object({
|
|
27225
27274
|
deviceId: number(),
|
|
27226
27275
|
fromMs: number(),
|
|
@@ -27271,6 +27320,15 @@ method(object({
|
|
|
27271
27320
|
}), ReadGopBytesResultSchema, {
|
|
27272
27321
|
kind: "query",
|
|
27273
27322
|
auth: "admin"
|
|
27323
|
+
}), method(object({
|
|
27324
|
+
deviceId: number(),
|
|
27325
|
+
profile: string(),
|
|
27326
|
+
startMs: number(),
|
|
27327
|
+
fromMs: number(),
|
|
27328
|
+
toMs: number()
|
|
27329
|
+
}), ReadWindowBytesResultSchema, {
|
|
27330
|
+
kind: "query",
|
|
27331
|
+
auth: "admin"
|
|
27274
27332
|
}), method(object({
|
|
27275
27333
|
deviceId: number(),
|
|
27276
27334
|
config: RecordingConfigSchema
|
|
@@ -33356,6 +33414,12 @@ Object.freeze({
|
|
|
33356
33414
|
addonId: null,
|
|
33357
33415
|
access: "view"
|
|
33358
33416
|
},
|
|
33417
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33418
|
+
capName: "notification-rules",
|
|
33419
|
+
capScope: "system",
|
|
33420
|
+
addonId: null,
|
|
33421
|
+
access: "view"
|
|
33422
|
+
},
|
|
33359
33423
|
"notificationRules.setAlarmConfig": {
|
|
33360
33424
|
capName: "notification-rules",
|
|
33361
33425
|
capScope: "system",
|
|
@@ -34760,6 +34824,12 @@ Object.freeze({
|
|
|
34760
34824
|
addonId: null,
|
|
34761
34825
|
access: "view"
|
|
34762
34826
|
},
|
|
34827
|
+
"recording.readWindowBytes": {
|
|
34828
|
+
capName: "recording",
|
|
34829
|
+
capScope: "system",
|
|
34830
|
+
addonId: null,
|
|
34831
|
+
access: "view"
|
|
34832
|
+
},
|
|
34763
34833
|
"recording.refreshStorageLocationsForMigration": {
|
|
34764
34834
|
capName: "recording",
|
|
34765
34835
|
capScope: "system",
|
|
@@ -37590,6 +37660,11 @@ Object.freeze({
|
|
|
37590
37660
|
form: "single",
|
|
37591
37661
|
optional: false
|
|
37592
37662
|
}],
|
|
37663
|
+
"recording.readWindowBytes": [{
|
|
37664
|
+
name: "deviceId",
|
|
37665
|
+
form: "single",
|
|
37666
|
+
optional: false
|
|
37667
|
+
}],
|
|
37593
37668
|
"recording.relocateFootage": [{
|
|
37594
37669
|
name: "deviceId",
|
|
37595
37670
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -15803,7 +15803,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15803
15803
|
updatedAt: number(),
|
|
15804
15804
|
/** Failure detail — present on a `dead` row. */
|
|
15805
15805
|
error: string().optional(),
|
|
15806
|
-
subject: NcHistorySubjectSchema
|
|
15806
|
+
subject: NcHistorySubjectSchema,
|
|
15807
|
+
/**
|
|
15808
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15809
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15810
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15811
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15812
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15813
|
+
*
|
|
15814
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15815
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15816
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15817
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15818
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15819
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15820
|
+
* broken link.
|
|
15821
|
+
*/
|
|
15822
|
+
artifactIds: array(string().min(1)).optional()
|
|
15807
15823
|
});
|
|
15808
15824
|
/**
|
|
15809
15825
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16030,7 +16046,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16030
16046
|
}), method(object({}), object({
|
|
16031
16047
|
catalog: array(NcConditionDescriptorSchema),
|
|
16032
16048
|
taxonomy: NcTaxonomySchema.optional()
|
|
16033
|
-
})), 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 }), {
|
|
16049
|
+
})), 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 }), {
|
|
16034
16050
|
kind: "mutation",
|
|
16035
16051
|
caller: "required"
|
|
16036
16052
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27198,6 +27214,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27198
27214
|
/** Media ms the returned fragment covers. */
|
|
27199
27215
|
gopDurMs: number()
|
|
27200
27216
|
});
|
|
27217
|
+
/**
|
|
27218
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27219
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27220
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27221
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27222
|
+
*
|
|
27223
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27224
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27225
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27226
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27227
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27228
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27229
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27230
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27231
|
+
* bytes nothing has proven decodable.
|
|
27232
|
+
*/
|
|
27233
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27234
|
+
kind: literal("ok"),
|
|
27235
|
+
data: _instanceof(Uint8Array),
|
|
27236
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27237
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27238
|
+
gopStartMs: number(),
|
|
27239
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27240
|
+
gopDurMs: number(),
|
|
27241
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27242
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27243
|
+
reachesRequestedEnd: boolean()
|
|
27244
|
+
}), object({
|
|
27245
|
+
kind: literal("spans-multiple-segments"),
|
|
27246
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27247
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27248
|
+
segmentEndMs: number()
|
|
27249
|
+
})]);
|
|
27201
27250
|
method(object({
|
|
27202
27251
|
deviceId: number(),
|
|
27203
27252
|
fromMs: number(),
|
|
@@ -27248,6 +27297,15 @@ method(object({
|
|
|
27248
27297
|
}), ReadGopBytesResultSchema, {
|
|
27249
27298
|
kind: "query",
|
|
27250
27299
|
auth: "admin"
|
|
27300
|
+
}), method(object({
|
|
27301
|
+
deviceId: number(),
|
|
27302
|
+
profile: string(),
|
|
27303
|
+
startMs: number(),
|
|
27304
|
+
fromMs: number(),
|
|
27305
|
+
toMs: number()
|
|
27306
|
+
}), ReadWindowBytesResultSchema, {
|
|
27307
|
+
kind: "query",
|
|
27308
|
+
auth: "admin"
|
|
27251
27309
|
}), method(object({
|
|
27252
27310
|
deviceId: number(),
|
|
27253
27311
|
config: RecordingConfigSchema
|
|
@@ -33333,6 +33391,12 @@ Object.freeze({
|
|
|
33333
33391
|
addonId: null,
|
|
33334
33392
|
access: "view"
|
|
33335
33393
|
},
|
|
33394
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33395
|
+
capName: "notification-rules",
|
|
33396
|
+
capScope: "system",
|
|
33397
|
+
addonId: null,
|
|
33398
|
+
access: "view"
|
|
33399
|
+
},
|
|
33336
33400
|
"notificationRules.setAlarmConfig": {
|
|
33337
33401
|
capName: "notification-rules",
|
|
33338
33402
|
capScope: "system",
|
|
@@ -34737,6 +34801,12 @@ Object.freeze({
|
|
|
34737
34801
|
addonId: null,
|
|
34738
34802
|
access: "view"
|
|
34739
34803
|
},
|
|
34804
|
+
"recording.readWindowBytes": {
|
|
34805
|
+
capName: "recording",
|
|
34806
|
+
capScope: "system",
|
|
34807
|
+
addonId: null,
|
|
34808
|
+
access: "view"
|
|
34809
|
+
},
|
|
34740
34810
|
"recording.refreshStorageLocationsForMigration": {
|
|
34741
34811
|
capName: "recording",
|
|
34742
34812
|
capScope: "system",
|
|
@@ -37567,6 +37637,11 @@ Object.freeze({
|
|
|
37567
37637
|
form: "single",
|
|
37568
37638
|
optional: false
|
|
37569
37639
|
}],
|
|
37640
|
+
"recording.readWindowBytes": [{
|
|
37641
|
+
name: "deviceId",
|
|
37642
|
+
form: "single",
|
|
37643
|
+
optional: false
|
|
37644
|
+
}],
|
|
37570
37645
|
"recording.relocateFootage": [{
|
|
37571
37646
|
name: "deviceId",
|
|
37572
37647
|
form: "single",
|