@camstack/addon-provider-reolink 1.2.52 → 1.2.53
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
|
@@ -16008,7 +16008,23 @@ var NcHistoryEntrySchema = object({
|
|
|
16008
16008
|
updatedAt: number(),
|
|
16009
16009
|
/** Failure detail — present on a `dead` row. */
|
|
16010
16010
|
error: string().optional(),
|
|
16011
|
-
subject: NcHistorySubjectSchema
|
|
16011
|
+
subject: NcHistorySubjectSchema,
|
|
16012
|
+
/**
|
|
16013
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
16014
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
16015
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
16016
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
16017
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
16018
|
+
*
|
|
16019
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
16020
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
16021
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
16022
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
16023
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
16024
|
+
* Assistant export) must render as "no image right now", never as a
|
|
16025
|
+
* broken link.
|
|
16026
|
+
*/
|
|
16027
|
+
artifactIds: array(string().min(1)).optional()
|
|
16012
16028
|
});
|
|
16013
16029
|
/**
|
|
16014
16030
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16235,7 +16251,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16235
16251
|
}), method(object({}), object({
|
|
16236
16252
|
catalog: array(NcConditionDescriptorSchema),
|
|
16237
16253
|
taxonomy: NcTaxonomySchema.optional()
|
|
16238
|
-
})), 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 }), {
|
|
16254
|
+
})), 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 }), {
|
|
16239
16255
|
kind: "mutation",
|
|
16240
16256
|
caller: "required"
|
|
16241
16257
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27446,6 +27462,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27446
27462
|
/** Media ms the returned fragment covers. */
|
|
27447
27463
|
gopDurMs: number()
|
|
27448
27464
|
});
|
|
27465
|
+
/**
|
|
27466
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27467
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27468
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27469
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27470
|
+
*
|
|
27471
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27472
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27473
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27474
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27475
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27476
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27477
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27478
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27479
|
+
* bytes nothing has proven decodable.
|
|
27480
|
+
*/
|
|
27481
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27482
|
+
kind: literal("ok"),
|
|
27483
|
+
data: _instanceof(Uint8Array),
|
|
27484
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27485
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27486
|
+
gopStartMs: number(),
|
|
27487
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27488
|
+
gopDurMs: number(),
|
|
27489
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27490
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27491
|
+
reachesRequestedEnd: boolean()
|
|
27492
|
+
}), object({
|
|
27493
|
+
kind: literal("spans-multiple-segments"),
|
|
27494
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27495
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27496
|
+
segmentEndMs: number()
|
|
27497
|
+
})]);
|
|
27449
27498
|
method(object({
|
|
27450
27499
|
deviceId: number(),
|
|
27451
27500
|
fromMs: number(),
|
|
@@ -27496,6 +27545,15 @@ method(object({
|
|
|
27496
27545
|
}), ReadGopBytesResultSchema, {
|
|
27497
27546
|
kind: "query",
|
|
27498
27547
|
auth: "admin"
|
|
27548
|
+
}), method(object({
|
|
27549
|
+
deviceId: number(),
|
|
27550
|
+
profile: string(),
|
|
27551
|
+
startMs: number(),
|
|
27552
|
+
fromMs: number(),
|
|
27553
|
+
toMs: number()
|
|
27554
|
+
}), ReadWindowBytesResultSchema, {
|
|
27555
|
+
kind: "query",
|
|
27556
|
+
auth: "admin"
|
|
27499
27557
|
}), method(object({
|
|
27500
27558
|
deviceId: number(),
|
|
27501
27559
|
config: RecordingConfigSchema
|
|
@@ -33948,6 +34006,12 @@ Object.freeze({
|
|
|
33948
34006
|
addonId: null,
|
|
33949
34007
|
access: "view"
|
|
33950
34008
|
},
|
|
34009
|
+
"notificationRules.resolveArtifactUrl": {
|
|
34010
|
+
capName: "notification-rules",
|
|
34011
|
+
capScope: "system",
|
|
34012
|
+
addonId: null,
|
|
34013
|
+
access: "view"
|
|
34014
|
+
},
|
|
33951
34015
|
"notificationRules.setAlarmConfig": {
|
|
33952
34016
|
capName: "notification-rules",
|
|
33953
34017
|
capScope: "system",
|
|
@@ -35352,6 +35416,12 @@ Object.freeze({
|
|
|
35352
35416
|
addonId: null,
|
|
35353
35417
|
access: "view"
|
|
35354
35418
|
},
|
|
35419
|
+
"recording.readWindowBytes": {
|
|
35420
|
+
capName: "recording",
|
|
35421
|
+
capScope: "system",
|
|
35422
|
+
addonId: null,
|
|
35423
|
+
access: "view"
|
|
35424
|
+
},
|
|
35355
35425
|
"recording.refreshStorageLocationsForMigration": {
|
|
35356
35426
|
capName: "recording",
|
|
35357
35427
|
capScope: "system",
|
|
@@ -38182,6 +38252,11 @@ Object.freeze({
|
|
|
38182
38252
|
form: "single",
|
|
38183
38253
|
optional: false
|
|
38184
38254
|
}],
|
|
38255
|
+
"recording.readWindowBytes": [{
|
|
38256
|
+
name: "deviceId",
|
|
38257
|
+
form: "single",
|
|
38258
|
+
optional: false
|
|
38259
|
+
}],
|
|
38185
38260
|
"recording.relocateFootage": [{
|
|
38186
38261
|
name: "deviceId",
|
|
38187
38262
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -16003,7 +16003,23 @@ var NcHistoryEntrySchema = object({
|
|
|
16003
16003
|
updatedAt: number(),
|
|
16004
16004
|
/** Failure detail — present on a `dead` row. */
|
|
16005
16005
|
error: string().optional(),
|
|
16006
|
-
subject: NcHistorySubjectSchema
|
|
16006
|
+
subject: NcHistorySubjectSchema,
|
|
16007
|
+
/**
|
|
16008
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
16009
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
16010
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
16011
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
16012
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
16013
|
+
*
|
|
16014
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
16015
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
16016
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
16017
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
16018
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
16019
|
+
* Assistant export) must render as "no image right now", never as a
|
|
16020
|
+
* broken link.
|
|
16021
|
+
*/
|
|
16022
|
+
artifactIds: array(string().min(1)).optional()
|
|
16007
16023
|
});
|
|
16008
16024
|
/**
|
|
16009
16025
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16230,7 +16246,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16230
16246
|
}), method(object({}), object({
|
|
16231
16247
|
catalog: array(NcConditionDescriptorSchema),
|
|
16232
16248
|
taxonomy: NcTaxonomySchema.optional()
|
|
16233
|
-
})), 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 }), {
|
|
16249
|
+
})), 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 }), {
|
|
16234
16250
|
kind: "mutation",
|
|
16235
16251
|
caller: "required"
|
|
16236
16252
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27441,6 +27457,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27441
27457
|
/** Media ms the returned fragment covers. */
|
|
27442
27458
|
gopDurMs: number()
|
|
27443
27459
|
});
|
|
27460
|
+
/**
|
|
27461
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27462
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27463
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27464
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27465
|
+
*
|
|
27466
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27467
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27468
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27469
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27470
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27471
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27472
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27473
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27474
|
+
* bytes nothing has proven decodable.
|
|
27475
|
+
*/
|
|
27476
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27477
|
+
kind: literal("ok"),
|
|
27478
|
+
data: _instanceof(Uint8Array),
|
|
27479
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27480
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27481
|
+
gopStartMs: number(),
|
|
27482
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27483
|
+
gopDurMs: number(),
|
|
27484
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27485
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27486
|
+
reachesRequestedEnd: boolean()
|
|
27487
|
+
}), object({
|
|
27488
|
+
kind: literal("spans-multiple-segments"),
|
|
27489
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27490
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27491
|
+
segmentEndMs: number()
|
|
27492
|
+
})]);
|
|
27444
27493
|
method(object({
|
|
27445
27494
|
deviceId: number(),
|
|
27446
27495
|
fromMs: number(),
|
|
@@ -27491,6 +27540,15 @@ method(object({
|
|
|
27491
27540
|
}), ReadGopBytesResultSchema, {
|
|
27492
27541
|
kind: "query",
|
|
27493
27542
|
auth: "admin"
|
|
27543
|
+
}), method(object({
|
|
27544
|
+
deviceId: number(),
|
|
27545
|
+
profile: string(),
|
|
27546
|
+
startMs: number(),
|
|
27547
|
+
fromMs: number(),
|
|
27548
|
+
toMs: number()
|
|
27549
|
+
}), ReadWindowBytesResultSchema, {
|
|
27550
|
+
kind: "query",
|
|
27551
|
+
auth: "admin"
|
|
27494
27552
|
}), method(object({
|
|
27495
27553
|
deviceId: number(),
|
|
27496
27554
|
config: RecordingConfigSchema
|
|
@@ -33943,6 +34001,12 @@ Object.freeze({
|
|
|
33943
34001
|
addonId: null,
|
|
33944
34002
|
access: "view"
|
|
33945
34003
|
},
|
|
34004
|
+
"notificationRules.resolveArtifactUrl": {
|
|
34005
|
+
capName: "notification-rules",
|
|
34006
|
+
capScope: "system",
|
|
34007
|
+
addonId: null,
|
|
34008
|
+
access: "view"
|
|
34009
|
+
},
|
|
33946
34010
|
"notificationRules.setAlarmConfig": {
|
|
33947
34011
|
capName: "notification-rules",
|
|
33948
34012
|
capScope: "system",
|
|
@@ -35347,6 +35411,12 @@ Object.freeze({
|
|
|
35347
35411
|
addonId: null,
|
|
35348
35412
|
access: "view"
|
|
35349
35413
|
},
|
|
35414
|
+
"recording.readWindowBytes": {
|
|
35415
|
+
capName: "recording",
|
|
35416
|
+
capScope: "system",
|
|
35417
|
+
addonId: null,
|
|
35418
|
+
access: "view"
|
|
35419
|
+
},
|
|
35350
35420
|
"recording.refreshStorageLocationsForMigration": {
|
|
35351
35421
|
capName: "recording",
|
|
35352
35422
|
capScope: "system",
|
|
@@ -38177,6 +38247,11 @@ Object.freeze({
|
|
|
38177
38247
|
form: "single",
|
|
38178
38248
|
optional: false
|
|
38179
38249
|
}],
|
|
38250
|
+
"recording.readWindowBytes": [{
|
|
38251
|
+
name: "deviceId",
|
|
38252
|
+
form: "single",
|
|
38253
|
+
optional: false
|
|
38254
|
+
}],
|
|
38180
38255
|
"recording.relocateFootage": [{
|
|
38181
38256
|
name: "deviceId",
|
|
38182
38257
|
form: "single",
|