@camstack/addon-provider-petkit 0.2.30 → 0.2.31
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
|
@@ -16901,7 +16901,23 @@ var NcHistoryEntrySchema = object({
|
|
|
16901
16901
|
updatedAt: number(),
|
|
16902
16902
|
/** Failure detail — present on a `dead` row. */
|
|
16903
16903
|
error: string().optional(),
|
|
16904
|
-
subject: NcHistorySubjectSchema
|
|
16904
|
+
subject: NcHistorySubjectSchema,
|
|
16905
|
+
/**
|
|
16906
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
16907
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
16908
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
16909
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
16910
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
16911
|
+
*
|
|
16912
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
16913
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
16914
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
16915
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
16916
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
16917
|
+
* Assistant export) must render as "no image right now", never as a
|
|
16918
|
+
* broken link.
|
|
16919
|
+
*/
|
|
16920
|
+
artifactIds: array(string().min(1)).optional()
|
|
16905
16921
|
});
|
|
16906
16922
|
/**
|
|
16907
16923
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -17128,7 +17144,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
17128
17144
|
}), method(object({}), object({
|
|
17129
17145
|
catalog: array(NcConditionDescriptorSchema),
|
|
17130
17146
|
taxonomy: NcTaxonomySchema.optional()
|
|
17131
|
-
})), 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 }), {
|
|
17147
|
+
})), 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 }), {
|
|
17132
17148
|
kind: "mutation",
|
|
17133
17149
|
caller: "required"
|
|
17134
17150
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -28156,6 +28172,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
28156
28172
|
/** Media ms the returned fragment covers. */
|
|
28157
28173
|
gopDurMs: number()
|
|
28158
28174
|
});
|
|
28175
|
+
/**
|
|
28176
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
28177
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
28178
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
28179
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
28180
|
+
*
|
|
28181
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
28182
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
28183
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
28184
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
28185
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
28186
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
28187
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
28188
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
28189
|
+
* bytes nothing has proven decodable.
|
|
28190
|
+
*/
|
|
28191
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
28192
|
+
kind: literal("ok"),
|
|
28193
|
+
data: _instanceof(Uint8Array),
|
|
28194
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
28195
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
28196
|
+
gopStartMs: number(),
|
|
28197
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
28198
|
+
gopDurMs: number(),
|
|
28199
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
28200
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
28201
|
+
reachesRequestedEnd: boolean()
|
|
28202
|
+
}), object({
|
|
28203
|
+
kind: literal("spans-multiple-segments"),
|
|
28204
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
28205
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
28206
|
+
segmentEndMs: number()
|
|
28207
|
+
})]);
|
|
28159
28208
|
method(object({
|
|
28160
28209
|
deviceId: number(),
|
|
28161
28210
|
fromMs: number(),
|
|
@@ -28206,6 +28255,15 @@ method(object({
|
|
|
28206
28255
|
}), ReadGopBytesResultSchema, {
|
|
28207
28256
|
kind: "query",
|
|
28208
28257
|
auth: "admin"
|
|
28258
|
+
}), method(object({
|
|
28259
|
+
deviceId: number(),
|
|
28260
|
+
profile: string(),
|
|
28261
|
+
startMs: number(),
|
|
28262
|
+
fromMs: number(),
|
|
28263
|
+
toMs: number()
|
|
28264
|
+
}), ReadWindowBytesResultSchema, {
|
|
28265
|
+
kind: "query",
|
|
28266
|
+
auth: "admin"
|
|
28209
28267
|
}), method(object({
|
|
28210
28268
|
deviceId: number(),
|
|
28211
28269
|
config: RecordingConfigSchema
|
|
@@ -34293,6 +34351,12 @@ Object.freeze({
|
|
|
34293
34351
|
addonId: null,
|
|
34294
34352
|
access: "view"
|
|
34295
34353
|
},
|
|
34354
|
+
"notificationRules.resolveArtifactUrl": {
|
|
34355
|
+
capName: "notification-rules",
|
|
34356
|
+
capScope: "system",
|
|
34357
|
+
addonId: null,
|
|
34358
|
+
access: "view"
|
|
34359
|
+
},
|
|
34296
34360
|
"notificationRules.setAlarmConfig": {
|
|
34297
34361
|
capName: "notification-rules",
|
|
34298
34362
|
capScope: "system",
|
|
@@ -35697,6 +35761,12 @@ Object.freeze({
|
|
|
35697
35761
|
addonId: null,
|
|
35698
35762
|
access: "view"
|
|
35699
35763
|
},
|
|
35764
|
+
"recording.readWindowBytes": {
|
|
35765
|
+
capName: "recording",
|
|
35766
|
+
capScope: "system",
|
|
35767
|
+
addonId: null,
|
|
35768
|
+
access: "view"
|
|
35769
|
+
},
|
|
35700
35770
|
"recording.refreshStorageLocationsForMigration": {
|
|
35701
35771
|
capName: "recording",
|
|
35702
35772
|
capScope: "system",
|
|
@@ -38527,6 +38597,11 @@ Object.freeze({
|
|
|
38527
38597
|
form: "single",
|
|
38528
38598
|
optional: false
|
|
38529
38599
|
}],
|
|
38600
|
+
"recording.readWindowBytes": [{
|
|
38601
|
+
name: "deviceId",
|
|
38602
|
+
form: "single",
|
|
38603
|
+
optional: false
|
|
38604
|
+
}],
|
|
38530
38605
|
"recording.relocateFootage": [{
|
|
38531
38606
|
name: "deviceId",
|
|
38532
38607
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -16900,7 +16900,23 @@ var NcHistoryEntrySchema = object({
|
|
|
16900
16900
|
updatedAt: number(),
|
|
16901
16901
|
/** Failure detail — present on a `dead` row. */
|
|
16902
16902
|
error: string().optional(),
|
|
16903
|
-
subject: NcHistorySubjectSchema
|
|
16903
|
+
subject: NcHistorySubjectSchema,
|
|
16904
|
+
/**
|
|
16905
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
16906
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
16907
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
16908
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
16909
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
16910
|
+
*
|
|
16911
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
16912
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
16913
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
16914
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
16915
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
16916
|
+
* Assistant export) must render as "no image right now", never as a
|
|
16917
|
+
* broken link.
|
|
16918
|
+
*/
|
|
16919
|
+
artifactIds: array(string().min(1)).optional()
|
|
16904
16920
|
});
|
|
16905
16921
|
/**
|
|
16906
16922
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -17127,7 +17143,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
17127
17143
|
}), method(object({}), object({
|
|
17128
17144
|
catalog: array(NcConditionDescriptorSchema),
|
|
17129
17145
|
taxonomy: NcTaxonomySchema.optional()
|
|
17130
|
-
})), 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 }), {
|
|
17146
|
+
})), 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 }), {
|
|
17131
17147
|
kind: "mutation",
|
|
17132
17148
|
caller: "required"
|
|
17133
17149
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -28155,6 +28171,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
28155
28171
|
/** Media ms the returned fragment covers. */
|
|
28156
28172
|
gopDurMs: number()
|
|
28157
28173
|
});
|
|
28174
|
+
/**
|
|
28175
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
28176
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
28177
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
28178
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
28179
|
+
*
|
|
28180
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
28181
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
28182
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
28183
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
28184
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
28185
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
28186
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
28187
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
28188
|
+
* bytes nothing has proven decodable.
|
|
28189
|
+
*/
|
|
28190
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
28191
|
+
kind: literal("ok"),
|
|
28192
|
+
data: _instanceof(Uint8Array),
|
|
28193
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
28194
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
28195
|
+
gopStartMs: number(),
|
|
28196
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
28197
|
+
gopDurMs: number(),
|
|
28198
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
28199
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
28200
|
+
reachesRequestedEnd: boolean()
|
|
28201
|
+
}), object({
|
|
28202
|
+
kind: literal("spans-multiple-segments"),
|
|
28203
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
28204
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
28205
|
+
segmentEndMs: number()
|
|
28206
|
+
})]);
|
|
28158
28207
|
method(object({
|
|
28159
28208
|
deviceId: number(),
|
|
28160
28209
|
fromMs: number(),
|
|
@@ -28205,6 +28254,15 @@ method(object({
|
|
|
28205
28254
|
}), ReadGopBytesResultSchema, {
|
|
28206
28255
|
kind: "query",
|
|
28207
28256
|
auth: "admin"
|
|
28257
|
+
}), method(object({
|
|
28258
|
+
deviceId: number(),
|
|
28259
|
+
profile: string(),
|
|
28260
|
+
startMs: number(),
|
|
28261
|
+
fromMs: number(),
|
|
28262
|
+
toMs: number()
|
|
28263
|
+
}), ReadWindowBytesResultSchema, {
|
|
28264
|
+
kind: "query",
|
|
28265
|
+
auth: "admin"
|
|
28208
28266
|
}), method(object({
|
|
28209
28267
|
deviceId: number(),
|
|
28210
28268
|
config: RecordingConfigSchema
|
|
@@ -34292,6 +34350,12 @@ Object.freeze({
|
|
|
34292
34350
|
addonId: null,
|
|
34293
34351
|
access: "view"
|
|
34294
34352
|
},
|
|
34353
|
+
"notificationRules.resolveArtifactUrl": {
|
|
34354
|
+
capName: "notification-rules",
|
|
34355
|
+
capScope: "system",
|
|
34356
|
+
addonId: null,
|
|
34357
|
+
access: "view"
|
|
34358
|
+
},
|
|
34295
34359
|
"notificationRules.setAlarmConfig": {
|
|
34296
34360
|
capName: "notification-rules",
|
|
34297
34361
|
capScope: "system",
|
|
@@ -35696,6 +35760,12 @@ Object.freeze({
|
|
|
35696
35760
|
addonId: null,
|
|
35697
35761
|
access: "view"
|
|
35698
35762
|
},
|
|
35763
|
+
"recording.readWindowBytes": {
|
|
35764
|
+
capName: "recording",
|
|
35765
|
+
capScope: "system",
|
|
35766
|
+
addonId: null,
|
|
35767
|
+
access: "view"
|
|
35768
|
+
},
|
|
35699
35769
|
"recording.refreshStorageLocationsForMigration": {
|
|
35700
35770
|
capName: "recording",
|
|
35701
35771
|
capScope: "system",
|
|
@@ -38526,6 +38596,11 @@ Object.freeze({
|
|
|
38526
38596
|
form: "single",
|
|
38527
38597
|
optional: false
|
|
38528
38598
|
}],
|
|
38599
|
+
"recording.readWindowBytes": [{
|
|
38600
|
+
name: "deviceId",
|
|
38601
|
+
form: "single",
|
|
38602
|
+
optional: false
|
|
38603
|
+
}],
|
|
38529
38604
|
"recording.relocateFootage": [{
|
|
38530
38605
|
name: "deviceId",
|
|
38531
38606
|
form: "single",
|
package/package.json
CHANGED