@camstack/addon-provider-wyze 0.2.34 → 0.2.35
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
|
@@ -15831,7 +15831,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15831
15831
|
updatedAt: number(),
|
|
15832
15832
|
/** Failure detail — present on a `dead` row. */
|
|
15833
15833
|
error: string().optional(),
|
|
15834
|
-
subject: NcHistorySubjectSchema
|
|
15834
|
+
subject: NcHistorySubjectSchema,
|
|
15835
|
+
/**
|
|
15836
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15837
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15838
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15839
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15840
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15841
|
+
*
|
|
15842
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15843
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15844
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15845
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15846
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15847
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15848
|
+
* broken link.
|
|
15849
|
+
*/
|
|
15850
|
+
artifactIds: array(string().min(1)).optional()
|
|
15835
15851
|
});
|
|
15836
15852
|
/**
|
|
15837
15853
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16058,7 +16074,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16058
16074
|
}), method(object({}), object({
|
|
16059
16075
|
catalog: array(NcConditionDescriptorSchema),
|
|
16060
16076
|
taxonomy: NcTaxonomySchema.optional()
|
|
16061
|
-
})), 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 }), {
|
|
16077
|
+
})), 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 }), {
|
|
16062
16078
|
kind: "mutation",
|
|
16063
16079
|
caller: "required"
|
|
16064
16080
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27190,6 +27206,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27190
27206
|
/** Media ms the returned fragment covers. */
|
|
27191
27207
|
gopDurMs: number()
|
|
27192
27208
|
});
|
|
27209
|
+
/**
|
|
27210
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27211
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27212
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27213
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27214
|
+
*
|
|
27215
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27216
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27217
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27218
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27219
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27220
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27221
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27222
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27223
|
+
* bytes nothing has proven decodable.
|
|
27224
|
+
*/
|
|
27225
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27226
|
+
kind: literal("ok"),
|
|
27227
|
+
data: _instanceof(Uint8Array),
|
|
27228
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27229
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27230
|
+
gopStartMs: number(),
|
|
27231
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27232
|
+
gopDurMs: number(),
|
|
27233
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27234
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27235
|
+
reachesRequestedEnd: boolean()
|
|
27236
|
+
}), object({
|
|
27237
|
+
kind: literal("spans-multiple-segments"),
|
|
27238
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27239
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27240
|
+
segmentEndMs: number()
|
|
27241
|
+
})]);
|
|
27193
27242
|
method(object({
|
|
27194
27243
|
deviceId: number(),
|
|
27195
27244
|
fromMs: number(),
|
|
@@ -27240,6 +27289,15 @@ method(object({
|
|
|
27240
27289
|
}), ReadGopBytesResultSchema, {
|
|
27241
27290
|
kind: "query",
|
|
27242
27291
|
auth: "admin"
|
|
27292
|
+
}), method(object({
|
|
27293
|
+
deviceId: number(),
|
|
27294
|
+
profile: string(),
|
|
27295
|
+
startMs: number(),
|
|
27296
|
+
fromMs: number(),
|
|
27297
|
+
toMs: number()
|
|
27298
|
+
}), ReadWindowBytesResultSchema, {
|
|
27299
|
+
kind: "query",
|
|
27300
|
+
auth: "admin"
|
|
27243
27301
|
}), method(object({
|
|
27244
27302
|
deviceId: number(),
|
|
27245
27303
|
config: RecordingConfigSchema
|
|
@@ -33327,6 +33385,12 @@ Object.freeze({
|
|
|
33327
33385
|
addonId: null,
|
|
33328
33386
|
access: "view"
|
|
33329
33387
|
},
|
|
33388
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33389
|
+
capName: "notification-rules",
|
|
33390
|
+
capScope: "system",
|
|
33391
|
+
addonId: null,
|
|
33392
|
+
access: "view"
|
|
33393
|
+
},
|
|
33330
33394
|
"notificationRules.setAlarmConfig": {
|
|
33331
33395
|
capName: "notification-rules",
|
|
33332
33396
|
capScope: "system",
|
|
@@ -34731,6 +34795,12 @@ Object.freeze({
|
|
|
34731
34795
|
addonId: null,
|
|
34732
34796
|
access: "view"
|
|
34733
34797
|
},
|
|
34798
|
+
"recording.readWindowBytes": {
|
|
34799
|
+
capName: "recording",
|
|
34800
|
+
capScope: "system",
|
|
34801
|
+
addonId: null,
|
|
34802
|
+
access: "view"
|
|
34803
|
+
},
|
|
34734
34804
|
"recording.refreshStorageLocationsForMigration": {
|
|
34735
34805
|
capName: "recording",
|
|
34736
34806
|
capScope: "system",
|
|
@@ -37561,6 +37631,11 @@ Object.freeze({
|
|
|
37561
37631
|
form: "single",
|
|
37562
37632
|
optional: false
|
|
37563
37633
|
}],
|
|
37634
|
+
"recording.readWindowBytes": [{
|
|
37635
|
+
name: "deviceId",
|
|
37636
|
+
form: "single",
|
|
37637
|
+
optional: false
|
|
37638
|
+
}],
|
|
37564
37639
|
"recording.relocateFootage": [{
|
|
37565
37640
|
name: "deviceId",
|
|
37566
37641
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -15810,7 +15810,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15810
15810
|
updatedAt: number(),
|
|
15811
15811
|
/** Failure detail — present on a `dead` row. */
|
|
15812
15812
|
error: string().optional(),
|
|
15813
|
-
subject: NcHistorySubjectSchema
|
|
15813
|
+
subject: NcHistorySubjectSchema,
|
|
15814
|
+
/**
|
|
15815
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15816
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15817
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15818
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15819
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15820
|
+
*
|
|
15821
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15822
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15823
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15824
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15825
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15826
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15827
|
+
* broken link.
|
|
15828
|
+
*/
|
|
15829
|
+
artifactIds: array(string().min(1)).optional()
|
|
15814
15830
|
});
|
|
15815
15831
|
/**
|
|
15816
15832
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16037,7 +16053,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16037
16053
|
}), method(object({}), object({
|
|
16038
16054
|
catalog: array(NcConditionDescriptorSchema),
|
|
16039
16055
|
taxonomy: NcTaxonomySchema.optional()
|
|
16040
|
-
})), 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 }), {
|
|
16056
|
+
})), 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 }), {
|
|
16041
16057
|
kind: "mutation",
|
|
16042
16058
|
caller: "required"
|
|
16043
16059
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27169,6 +27185,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27169
27185
|
/** Media ms the returned fragment covers. */
|
|
27170
27186
|
gopDurMs: number()
|
|
27171
27187
|
});
|
|
27188
|
+
/**
|
|
27189
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27190
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27191
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27192
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27193
|
+
*
|
|
27194
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27195
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27196
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27197
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27198
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27199
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27200
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27201
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27202
|
+
* bytes nothing has proven decodable.
|
|
27203
|
+
*/
|
|
27204
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27205
|
+
kind: literal("ok"),
|
|
27206
|
+
data: _instanceof(Uint8Array),
|
|
27207
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27208
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27209
|
+
gopStartMs: number(),
|
|
27210
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27211
|
+
gopDurMs: number(),
|
|
27212
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27213
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27214
|
+
reachesRequestedEnd: boolean()
|
|
27215
|
+
}), object({
|
|
27216
|
+
kind: literal("spans-multiple-segments"),
|
|
27217
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27218
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27219
|
+
segmentEndMs: number()
|
|
27220
|
+
})]);
|
|
27172
27221
|
method(object({
|
|
27173
27222
|
deviceId: number(),
|
|
27174
27223
|
fromMs: number(),
|
|
@@ -27219,6 +27268,15 @@ method(object({
|
|
|
27219
27268
|
}), ReadGopBytesResultSchema, {
|
|
27220
27269
|
kind: "query",
|
|
27221
27270
|
auth: "admin"
|
|
27271
|
+
}), method(object({
|
|
27272
|
+
deviceId: number(),
|
|
27273
|
+
profile: string(),
|
|
27274
|
+
startMs: number(),
|
|
27275
|
+
fromMs: number(),
|
|
27276
|
+
toMs: number()
|
|
27277
|
+
}), ReadWindowBytesResultSchema, {
|
|
27278
|
+
kind: "query",
|
|
27279
|
+
auth: "admin"
|
|
27222
27280
|
}), method(object({
|
|
27223
27281
|
deviceId: number(),
|
|
27224
27282
|
config: RecordingConfigSchema
|
|
@@ -33306,6 +33364,12 @@ Object.freeze({
|
|
|
33306
33364
|
addonId: null,
|
|
33307
33365
|
access: "view"
|
|
33308
33366
|
},
|
|
33367
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33368
|
+
capName: "notification-rules",
|
|
33369
|
+
capScope: "system",
|
|
33370
|
+
addonId: null,
|
|
33371
|
+
access: "view"
|
|
33372
|
+
},
|
|
33309
33373
|
"notificationRules.setAlarmConfig": {
|
|
33310
33374
|
capName: "notification-rules",
|
|
33311
33375
|
capScope: "system",
|
|
@@ -34710,6 +34774,12 @@ Object.freeze({
|
|
|
34710
34774
|
addonId: null,
|
|
34711
34775
|
access: "view"
|
|
34712
34776
|
},
|
|
34777
|
+
"recording.readWindowBytes": {
|
|
34778
|
+
capName: "recording",
|
|
34779
|
+
capScope: "system",
|
|
34780
|
+
addonId: null,
|
|
34781
|
+
access: "view"
|
|
34782
|
+
},
|
|
34713
34783
|
"recording.refreshStorageLocationsForMigration": {
|
|
34714
34784
|
capName: "recording",
|
|
34715
34785
|
capScope: "system",
|
|
@@ -37540,6 +37610,11 @@ Object.freeze({
|
|
|
37540
37610
|
form: "single",
|
|
37541
37611
|
optional: false
|
|
37542
37612
|
}],
|
|
37613
|
+
"recording.readWindowBytes": [{
|
|
37614
|
+
name: "deviceId",
|
|
37615
|
+
form: "single",
|
|
37616
|
+
optional: false
|
|
37617
|
+
}],
|
|
37543
37618
|
"recording.relocateFootage": [{
|
|
37544
37619
|
name: "deviceId",
|
|
37545
37620
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-wyze",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.35",
|
|
4
4
|
"description": "Wyze camera device-provider addon for CamStack — wraps the @apocaliss92/wyze-bridge-js P2P/DTLS client, feeding the stream-broker via the pull-rfc4571 lazy-publish path (a structural twin of addon-provider-reolink)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|