@camstack/addon-remote-storage 1.2.50 → 1.2.52
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/s3.addon.js +1 -1
- package/dist/s3.addon.mjs +1 -1
- package/dist/sftp.addon.js +1 -1
- package/dist/sftp.addon.mjs +1 -1
- package/dist/{shared-BOy-Ilbo.js → shared-C10q8it6.js} +153 -8
- package/dist/{shared-BKw72Pim.mjs → shared-DXWSci5Y.mjs} +153 -8
- package/dist/smb.addon.js +1 -1
- package/dist/smb.addon.mjs +1 -1
- package/dist/webdav.addon.js +1 -1
- package/dist/webdav.addon.mjs +1 -1
- package/package.json +1 -1
package/dist/s3.addon.js
CHANGED
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_shared = require("./shared-
|
|
5
|
+
const require_shared = require("./shared-C10q8it6.js");
|
|
6
6
|
let node_stream = require("node:stream");
|
|
7
7
|
let _aws_sdk_client_s3 = require("@aws-sdk/client-s3");
|
|
8
8
|
let _aws_sdk_lib_storage = require("@aws-sdk/lib-storage");
|
package/dist/s3.addon.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-
|
|
1
|
+
import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-DXWSci5Y.mjs";
|
|
2
2
|
import { PassThrough } from "node:stream";
|
|
3
3
|
import { DeleteObjectCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectsV2Command, PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
|
|
4
4
|
import { Upload } from "@aws-sdk/lib-storage";
|
package/dist/sftp.addon.js
CHANGED
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_shared = require("./shared-
|
|
5
|
+
const require_shared = require("./shared-C10q8it6.js");
|
|
6
6
|
let ssh2 = require("ssh2");
|
|
7
7
|
let node_path = require("node:path");
|
|
8
8
|
node_path = require_shared.__toESM(node_path);
|
package/dist/sftp.addon.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-
|
|
1
|
+
import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-DXWSci5Y.mjs";
|
|
2
2
|
import { Client } from "ssh2";
|
|
3
3
|
import * as path from "node:path";
|
|
4
4
|
//#region src/providers/sftp/sftp-config-schema.ts
|
|
@@ -7726,7 +7726,8 @@ var OpsLogReasonSchema = _enum([
|
|
|
7726
7726
|
"quota",
|
|
7727
7727
|
"manual",
|
|
7728
7728
|
"operator",
|
|
7729
|
-
"maintenance"
|
|
7729
|
+
"maintenance",
|
|
7730
|
+
"orphaned-device"
|
|
7730
7731
|
]);
|
|
7731
7732
|
/** One audit row, shared verbatim by both domains. */
|
|
7732
7733
|
var OpsLogEntrySchema = object({
|
|
@@ -12757,10 +12758,39 @@ var DevicePersistConfigPayloadSchema = object({
|
|
|
12757
12758
|
deviceId: number(),
|
|
12758
12759
|
data: record(string(), unknown())
|
|
12759
12760
|
});
|
|
12761
|
+
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
12762
|
+
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
12763
|
+
var MigrateSwitchOutcomeSchema = _enum([
|
|
12764
|
+
"off",
|
|
12765
|
+
"on",
|
|
12766
|
+
"not-offered",
|
|
12767
|
+
"unreachable"
|
|
12768
|
+
]);
|
|
12769
|
+
var MigrateSwitchReportSchema = object({
|
|
12770
|
+
deviceId: number(),
|
|
12771
|
+
switchId: CameraSwitchIdSchema,
|
|
12772
|
+
outcome: MigrateSwitchOutcomeSchema,
|
|
12773
|
+
detail: string().optional()
|
|
12774
|
+
});
|
|
12775
|
+
var MigrateDeviceResultSchema = object({
|
|
12776
|
+
sourceId: number(),
|
|
12777
|
+
targetId: number(),
|
|
12778
|
+
switches: array(MigrateSwitchReportSchema).readonly(),
|
|
12779
|
+
/** Switches that could NOT be turned off on the source. Empty is the only
|
|
12780
|
+
* value meaning the replaced hardware is quiet. */
|
|
12781
|
+
sourceStillLive: array(CameraSwitchIdSchema).readonly(),
|
|
12782
|
+
swapped: boolean()
|
|
12783
|
+
});
|
|
12760
12784
|
method(object({
|
|
12761
12785
|
addonId: string(),
|
|
12762
12786
|
stableId: string()
|
|
12763
|
-
}), object({ id: number() }), { kind: "mutation" }), method(
|
|
12787
|
+
}), object({ id: number() }), { kind: "mutation" }), method(object({
|
|
12788
|
+
sourceId: number(),
|
|
12789
|
+
targetId: number()
|
|
12790
|
+
}), MigrateDeviceResultSchema, {
|
|
12791
|
+
kind: "mutation",
|
|
12792
|
+
auth: "admin"
|
|
12793
|
+
}), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
|
|
12764
12794
|
deviceId: number(),
|
|
12765
12795
|
name: string()
|
|
12766
12796
|
}), _void(), {
|
|
@@ -18857,6 +18887,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
18857
18887
|
deviceId: number(),
|
|
18858
18888
|
events: array(KeyEventSchema).readonly()
|
|
18859
18889
|
});
|
|
18890
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
18891
|
+
var EventDensityBucketSchema = object({
|
|
18892
|
+
bucketStart: number(),
|
|
18893
|
+
motion: number().int(),
|
|
18894
|
+
object: number().int(),
|
|
18895
|
+
audio: number().int()
|
|
18896
|
+
});
|
|
18897
|
+
/**
|
|
18898
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
18899
|
+
*
|
|
18900
|
+
* TWO facts, and the timeline draws them differently:
|
|
18901
|
+
*
|
|
18902
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
18903
|
+
* claim: read, and nothing happened in the window.
|
|
18904
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
18905
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
18906
|
+
* not quiet.
|
|
18907
|
+
*
|
|
18908
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
18909
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
18910
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
18911
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
18912
|
+
*/
|
|
18913
|
+
var EventDensityForDeviceSchema = object({
|
|
18914
|
+
deviceId: number(),
|
|
18915
|
+
read: _enum(["read", "unreadable"]),
|
|
18916
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
18917
|
+
});
|
|
18860
18918
|
object({
|
|
18861
18919
|
trackId: string(),
|
|
18862
18920
|
className: string(),
|
|
@@ -19167,12 +19225,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19167
19225
|
since: number(),
|
|
19168
19226
|
until: number(),
|
|
19169
19227
|
bucketMs: number().int().positive()
|
|
19170
|
-
}), array(object({
|
|
19171
|
-
|
|
19172
|
-
|
|
19173
|
-
|
|
19174
|
-
|
|
19175
|
-
})).readonly()), method(object({
|
|
19228
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19229
|
+
deviceIds: array(number()).min(1).max(200),
|
|
19230
|
+
since: number(),
|
|
19231
|
+
until: number(),
|
|
19232
|
+
bucketMs: number().int().positive()
|
|
19233
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19176
19234
|
deviceId: number(),
|
|
19177
19235
|
cutoffMs: number()
|
|
19178
19236
|
}), object({
|
|
@@ -26542,6 +26600,39 @@ var RecordingDaysSchema = object({
|
|
|
26542
26600
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26543
26601
|
days: array(number())
|
|
26544
26602
|
});
|
|
26603
|
+
/**
|
|
26604
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
26605
|
+
*
|
|
26606
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
26607
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
26608
|
+
* method never had to say:
|
|
26609
|
+
*
|
|
26610
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
26611
|
+
* no footage in the window", which is a real claim.
|
|
26612
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
26613
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
26614
|
+
* that emptiness means NOTHING.
|
|
26615
|
+
*
|
|
26616
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
26617
|
+
* footage when the truth is that nobody looked.
|
|
26618
|
+
*/
|
|
26619
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
26620
|
+
deviceId: number(),
|
|
26621
|
+
read: _enum(["read", "unreadable"]),
|
|
26622
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
26623
|
+
});
|
|
26624
|
+
/**
|
|
26625
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
26626
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
26627
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
26628
|
+
* the date-picker's day dots must not spell them the same.
|
|
26629
|
+
*/
|
|
26630
|
+
var RecordingDaysForDeviceSchema = object({
|
|
26631
|
+
deviceId: number(),
|
|
26632
|
+
read: _enum(["read", "unreadable"]),
|
|
26633
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26634
|
+
days: array(number()).readonly()
|
|
26635
|
+
});
|
|
26545
26636
|
var RecordingManifestSchema = object({
|
|
26546
26637
|
deviceId: number(),
|
|
26547
26638
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -26776,6 +26867,13 @@ method(object({
|
|
|
26776
26867
|
}), RecordingAvailabilitySchema, {
|
|
26777
26868
|
kind: "query",
|
|
26778
26869
|
auth: "protected"
|
|
26870
|
+
}), method(object({
|
|
26871
|
+
deviceIds: array(number()).min(1).max(200),
|
|
26872
|
+
fromMs: number(),
|
|
26873
|
+
toMs: number()
|
|
26874
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
26875
|
+
kind: "query",
|
|
26876
|
+
auth: "protected"
|
|
26779
26877
|
}), method(object({
|
|
26780
26878
|
deviceId: number(),
|
|
26781
26879
|
fromMs: number(),
|
|
@@ -26784,6 +26882,14 @@ method(object({
|
|
|
26784
26882
|
}), RecordingDaysSchema, {
|
|
26785
26883
|
kind: "query",
|
|
26786
26884
|
auth: "protected"
|
|
26885
|
+
}), method(object({
|
|
26886
|
+
deviceIds: array(number()).min(1).max(200),
|
|
26887
|
+
fromMs: number(),
|
|
26888
|
+
toMs: number(),
|
|
26889
|
+
tzOffsetMinutes: number()
|
|
26890
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
26891
|
+
kind: "query",
|
|
26892
|
+
auth: "protected"
|
|
26787
26893
|
}), method(object({
|
|
26788
26894
|
deviceId: number(),
|
|
26789
26895
|
fromMs: number(),
|
|
@@ -30247,6 +30353,12 @@ Object.freeze({
|
|
|
30247
30353
|
addonId: null,
|
|
30248
30354
|
access: "view"
|
|
30249
30355
|
},
|
|
30356
|
+
"deviceManager.migrateDevice": {
|
|
30357
|
+
capName: "device-manager",
|
|
30358
|
+
capScope: "system",
|
|
30359
|
+
addonId: null,
|
|
30360
|
+
access: "create"
|
|
30361
|
+
},
|
|
30250
30362
|
"deviceManager.persistConfig": {
|
|
30251
30363
|
capName: "device-manager",
|
|
30252
30364
|
capScope: "system",
|
|
@@ -31981,6 +32093,12 @@ Object.freeze({
|
|
|
31981
32093
|
addonId: null,
|
|
31982
32094
|
access: "view"
|
|
31983
32095
|
},
|
|
32096
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32097
|
+
capName: "pipeline-analytics",
|
|
32098
|
+
capScope: "device",
|
|
32099
|
+
addonId: null,
|
|
32100
|
+
access: "view"
|
|
32101
|
+
},
|
|
31984
32102
|
"pipelineAnalytics.getEventMedia": {
|
|
31985
32103
|
capName: "pipeline-analytics",
|
|
31986
32104
|
capScope: "device",
|
|
@@ -33103,12 +33221,24 @@ Object.freeze({
|
|
|
33103
33221
|
addonId: null,
|
|
33104
33222
|
access: "view"
|
|
33105
33223
|
},
|
|
33224
|
+
"recording.getAvailabilityBatch": {
|
|
33225
|
+
capName: "recording",
|
|
33226
|
+
capScope: "system",
|
|
33227
|
+
addonId: null,
|
|
33228
|
+
access: "view"
|
|
33229
|
+
},
|
|
33106
33230
|
"recording.getDaysWithRecordings": {
|
|
33107
33231
|
capName: "recording",
|
|
33108
33232
|
capScope: "system",
|
|
33109
33233
|
addonId: null,
|
|
33110
33234
|
access: "view"
|
|
33111
33235
|
},
|
|
33236
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
33237
|
+
capName: "recording",
|
|
33238
|
+
capScope: "system",
|
|
33239
|
+
addonId: null,
|
|
33240
|
+
access: "view"
|
|
33241
|
+
},
|
|
33112
33242
|
"recording.getDeviceConfig": {
|
|
33113
33243
|
capName: "recording",
|
|
33114
33244
|
capScope: "system",
|
|
@@ -35713,6 +35843,11 @@ Object.freeze({
|
|
|
35713
35843
|
form: "single",
|
|
35714
35844
|
optional: false
|
|
35715
35845
|
}],
|
|
35846
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
35847
|
+
name: "deviceIds",
|
|
35848
|
+
form: "array",
|
|
35849
|
+
optional: false
|
|
35850
|
+
}],
|
|
35716
35851
|
"pipelineAnalytics.getEventMedia": [{
|
|
35717
35852
|
name: "deviceId",
|
|
35718
35853
|
form: "single",
|
|
@@ -36128,11 +36263,21 @@ Object.freeze({
|
|
|
36128
36263
|
form: "single",
|
|
36129
36264
|
optional: false
|
|
36130
36265
|
}],
|
|
36266
|
+
"recording.getAvailabilityBatch": [{
|
|
36267
|
+
name: "deviceIds",
|
|
36268
|
+
form: "array",
|
|
36269
|
+
optional: false
|
|
36270
|
+
}],
|
|
36131
36271
|
"recording.getDaysWithRecordings": [{
|
|
36132
36272
|
name: "deviceId",
|
|
36133
36273
|
form: "single",
|
|
36134
36274
|
optional: false
|
|
36135
36275
|
}],
|
|
36276
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
36277
|
+
name: "deviceIds",
|
|
36278
|
+
form: "array",
|
|
36279
|
+
optional: false
|
|
36280
|
+
}],
|
|
36136
36281
|
"recording.getDeviceConfig": [{
|
|
36137
36282
|
name: "deviceId",
|
|
36138
36283
|
form: "single",
|
|
@@ -7703,7 +7703,8 @@ var OpsLogReasonSchema = _enum([
|
|
|
7703
7703
|
"quota",
|
|
7704
7704
|
"manual",
|
|
7705
7705
|
"operator",
|
|
7706
|
-
"maintenance"
|
|
7706
|
+
"maintenance",
|
|
7707
|
+
"orphaned-device"
|
|
7707
7708
|
]);
|
|
7708
7709
|
/** One audit row, shared verbatim by both domains. */
|
|
7709
7710
|
var OpsLogEntrySchema = object({
|
|
@@ -12734,10 +12735,39 @@ var DevicePersistConfigPayloadSchema = object({
|
|
|
12734
12735
|
deviceId: number(),
|
|
12735
12736
|
data: record(string(), unknown())
|
|
12736
12737
|
});
|
|
12738
|
+
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
12739
|
+
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
12740
|
+
var MigrateSwitchOutcomeSchema = _enum([
|
|
12741
|
+
"off",
|
|
12742
|
+
"on",
|
|
12743
|
+
"not-offered",
|
|
12744
|
+
"unreachable"
|
|
12745
|
+
]);
|
|
12746
|
+
var MigrateSwitchReportSchema = object({
|
|
12747
|
+
deviceId: number(),
|
|
12748
|
+
switchId: CameraSwitchIdSchema,
|
|
12749
|
+
outcome: MigrateSwitchOutcomeSchema,
|
|
12750
|
+
detail: string().optional()
|
|
12751
|
+
});
|
|
12752
|
+
var MigrateDeviceResultSchema = object({
|
|
12753
|
+
sourceId: number(),
|
|
12754
|
+
targetId: number(),
|
|
12755
|
+
switches: array(MigrateSwitchReportSchema).readonly(),
|
|
12756
|
+
/** Switches that could NOT be turned off on the source. Empty is the only
|
|
12757
|
+
* value meaning the replaced hardware is quiet. */
|
|
12758
|
+
sourceStillLive: array(CameraSwitchIdSchema).readonly(),
|
|
12759
|
+
swapped: boolean()
|
|
12760
|
+
});
|
|
12737
12761
|
method(object({
|
|
12738
12762
|
addonId: string(),
|
|
12739
12763
|
stableId: string()
|
|
12740
|
-
}), object({ id: number() }), { kind: "mutation" }), method(
|
|
12764
|
+
}), object({ id: number() }), { kind: "mutation" }), method(object({
|
|
12765
|
+
sourceId: number(),
|
|
12766
|
+
targetId: number()
|
|
12767
|
+
}), MigrateDeviceResultSchema, {
|
|
12768
|
+
kind: "mutation",
|
|
12769
|
+
auth: "admin"
|
|
12770
|
+
}), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
|
|
12741
12771
|
deviceId: number(),
|
|
12742
12772
|
name: string()
|
|
12743
12773
|
}), _void(), {
|
|
@@ -18834,6 +18864,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
18834
18864
|
deviceId: number(),
|
|
18835
18865
|
events: array(KeyEventSchema).readonly()
|
|
18836
18866
|
});
|
|
18867
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
18868
|
+
var EventDensityBucketSchema = object({
|
|
18869
|
+
bucketStart: number(),
|
|
18870
|
+
motion: number().int(),
|
|
18871
|
+
object: number().int(),
|
|
18872
|
+
audio: number().int()
|
|
18873
|
+
});
|
|
18874
|
+
/**
|
|
18875
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
18876
|
+
*
|
|
18877
|
+
* TWO facts, and the timeline draws them differently:
|
|
18878
|
+
*
|
|
18879
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
18880
|
+
* claim: read, and nothing happened in the window.
|
|
18881
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
18882
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
18883
|
+
* not quiet.
|
|
18884
|
+
*
|
|
18885
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
18886
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
18887
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
18888
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
18889
|
+
*/
|
|
18890
|
+
var EventDensityForDeviceSchema = object({
|
|
18891
|
+
deviceId: number(),
|
|
18892
|
+
read: _enum(["read", "unreadable"]),
|
|
18893
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
18894
|
+
});
|
|
18837
18895
|
object({
|
|
18838
18896
|
trackId: string(),
|
|
18839
18897
|
className: string(),
|
|
@@ -19144,12 +19202,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19144
19202
|
since: number(),
|
|
19145
19203
|
until: number(),
|
|
19146
19204
|
bucketMs: number().int().positive()
|
|
19147
|
-
}), array(object({
|
|
19148
|
-
|
|
19149
|
-
|
|
19150
|
-
|
|
19151
|
-
|
|
19152
|
-
})).readonly()), method(object({
|
|
19205
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19206
|
+
deviceIds: array(number()).min(1).max(200),
|
|
19207
|
+
since: number(),
|
|
19208
|
+
until: number(),
|
|
19209
|
+
bucketMs: number().int().positive()
|
|
19210
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19153
19211
|
deviceId: number(),
|
|
19154
19212
|
cutoffMs: number()
|
|
19155
19213
|
}), object({
|
|
@@ -26519,6 +26577,39 @@ var RecordingDaysSchema = object({
|
|
|
26519
26577
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26520
26578
|
days: array(number())
|
|
26521
26579
|
});
|
|
26580
|
+
/**
|
|
26581
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
26582
|
+
*
|
|
26583
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
26584
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
26585
|
+
* method never had to say:
|
|
26586
|
+
*
|
|
26587
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
26588
|
+
* no footage in the window", which is a real claim.
|
|
26589
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
26590
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
26591
|
+
* that emptiness means NOTHING.
|
|
26592
|
+
*
|
|
26593
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
26594
|
+
* footage when the truth is that nobody looked.
|
|
26595
|
+
*/
|
|
26596
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
26597
|
+
deviceId: number(),
|
|
26598
|
+
read: _enum(["read", "unreadable"]),
|
|
26599
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
26600
|
+
});
|
|
26601
|
+
/**
|
|
26602
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
26603
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
26604
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
26605
|
+
* the date-picker's day dots must not spell them the same.
|
|
26606
|
+
*/
|
|
26607
|
+
var RecordingDaysForDeviceSchema = object({
|
|
26608
|
+
deviceId: number(),
|
|
26609
|
+
read: _enum(["read", "unreadable"]),
|
|
26610
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26611
|
+
days: array(number()).readonly()
|
|
26612
|
+
});
|
|
26522
26613
|
var RecordingManifestSchema = object({
|
|
26523
26614
|
deviceId: number(),
|
|
26524
26615
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -26753,6 +26844,13 @@ method(object({
|
|
|
26753
26844
|
}), RecordingAvailabilitySchema, {
|
|
26754
26845
|
kind: "query",
|
|
26755
26846
|
auth: "protected"
|
|
26847
|
+
}), method(object({
|
|
26848
|
+
deviceIds: array(number()).min(1).max(200),
|
|
26849
|
+
fromMs: number(),
|
|
26850
|
+
toMs: number()
|
|
26851
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
26852
|
+
kind: "query",
|
|
26853
|
+
auth: "protected"
|
|
26756
26854
|
}), method(object({
|
|
26757
26855
|
deviceId: number(),
|
|
26758
26856
|
fromMs: number(),
|
|
@@ -26761,6 +26859,14 @@ method(object({
|
|
|
26761
26859
|
}), RecordingDaysSchema, {
|
|
26762
26860
|
kind: "query",
|
|
26763
26861
|
auth: "protected"
|
|
26862
|
+
}), method(object({
|
|
26863
|
+
deviceIds: array(number()).min(1).max(200),
|
|
26864
|
+
fromMs: number(),
|
|
26865
|
+
toMs: number(),
|
|
26866
|
+
tzOffsetMinutes: number()
|
|
26867
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
26868
|
+
kind: "query",
|
|
26869
|
+
auth: "protected"
|
|
26764
26870
|
}), method(object({
|
|
26765
26871
|
deviceId: number(),
|
|
26766
26872
|
fromMs: number(),
|
|
@@ -30224,6 +30330,12 @@ Object.freeze({
|
|
|
30224
30330
|
addonId: null,
|
|
30225
30331
|
access: "view"
|
|
30226
30332
|
},
|
|
30333
|
+
"deviceManager.migrateDevice": {
|
|
30334
|
+
capName: "device-manager",
|
|
30335
|
+
capScope: "system",
|
|
30336
|
+
addonId: null,
|
|
30337
|
+
access: "create"
|
|
30338
|
+
},
|
|
30227
30339
|
"deviceManager.persistConfig": {
|
|
30228
30340
|
capName: "device-manager",
|
|
30229
30341
|
capScope: "system",
|
|
@@ -31958,6 +32070,12 @@ Object.freeze({
|
|
|
31958
32070
|
addonId: null,
|
|
31959
32071
|
access: "view"
|
|
31960
32072
|
},
|
|
32073
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32074
|
+
capName: "pipeline-analytics",
|
|
32075
|
+
capScope: "device",
|
|
32076
|
+
addonId: null,
|
|
32077
|
+
access: "view"
|
|
32078
|
+
},
|
|
31961
32079
|
"pipelineAnalytics.getEventMedia": {
|
|
31962
32080
|
capName: "pipeline-analytics",
|
|
31963
32081
|
capScope: "device",
|
|
@@ -33080,12 +33198,24 @@ Object.freeze({
|
|
|
33080
33198
|
addonId: null,
|
|
33081
33199
|
access: "view"
|
|
33082
33200
|
},
|
|
33201
|
+
"recording.getAvailabilityBatch": {
|
|
33202
|
+
capName: "recording",
|
|
33203
|
+
capScope: "system",
|
|
33204
|
+
addonId: null,
|
|
33205
|
+
access: "view"
|
|
33206
|
+
},
|
|
33083
33207
|
"recording.getDaysWithRecordings": {
|
|
33084
33208
|
capName: "recording",
|
|
33085
33209
|
capScope: "system",
|
|
33086
33210
|
addonId: null,
|
|
33087
33211
|
access: "view"
|
|
33088
33212
|
},
|
|
33213
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
33214
|
+
capName: "recording",
|
|
33215
|
+
capScope: "system",
|
|
33216
|
+
addonId: null,
|
|
33217
|
+
access: "view"
|
|
33218
|
+
},
|
|
33089
33219
|
"recording.getDeviceConfig": {
|
|
33090
33220
|
capName: "recording",
|
|
33091
33221
|
capScope: "system",
|
|
@@ -35690,6 +35820,11 @@ Object.freeze({
|
|
|
35690
35820
|
form: "single",
|
|
35691
35821
|
optional: false
|
|
35692
35822
|
}],
|
|
35823
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
35824
|
+
name: "deviceIds",
|
|
35825
|
+
form: "array",
|
|
35826
|
+
optional: false
|
|
35827
|
+
}],
|
|
35693
35828
|
"pipelineAnalytics.getEventMedia": [{
|
|
35694
35829
|
name: "deviceId",
|
|
35695
35830
|
form: "single",
|
|
@@ -36105,11 +36240,21 @@ Object.freeze({
|
|
|
36105
36240
|
form: "single",
|
|
36106
36241
|
optional: false
|
|
36107
36242
|
}],
|
|
36243
|
+
"recording.getAvailabilityBatch": [{
|
|
36244
|
+
name: "deviceIds",
|
|
36245
|
+
form: "array",
|
|
36246
|
+
optional: false
|
|
36247
|
+
}],
|
|
36108
36248
|
"recording.getDaysWithRecordings": [{
|
|
36109
36249
|
name: "deviceId",
|
|
36110
36250
|
form: "single",
|
|
36111
36251
|
optional: false
|
|
36112
36252
|
}],
|
|
36253
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
36254
|
+
name: "deviceIds",
|
|
36255
|
+
form: "array",
|
|
36256
|
+
optional: false
|
|
36257
|
+
}],
|
|
36113
36258
|
"recording.getDeviceConfig": [{
|
|
36114
36259
|
name: "deviceId",
|
|
36115
36260
|
form: "single",
|
package/dist/smb.addon.js
CHANGED
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_shared = require("./shared-
|
|
5
|
+
const require_shared = require("./shared-C10q8it6.js");
|
|
6
6
|
let node_crypto = require("node:crypto");
|
|
7
7
|
let node_path = require("node:path");
|
|
8
8
|
node_path = require_shared.__toESM(node_path);
|
package/dist/smb.addon.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, s as storageProviderCapability } from "./shared-
|
|
1
|
+
import { c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, s as storageProviderCapability } from "./shared-DXWSci5Y.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import * as path from "node:path";
|
|
4
4
|
import * as fsp from "node:fs/promises";
|
package/dist/webdav.addon.js
CHANGED
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_shared = require("./shared-
|
|
5
|
+
const require_shared = require("./shared-C10q8it6.js");
|
|
6
6
|
let node_stream = require("node:stream");
|
|
7
7
|
let webdav = require("webdav");
|
|
8
8
|
//#region src/providers/webdav/webdav-config-schema.ts
|
package/dist/webdav.addon.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-
|
|
1
|
+
import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-DXWSci5Y.mjs";
|
|
2
2
|
import { PassThrough } from "node:stream";
|
|
3
3
|
import { AuthType, createClient } from "webdav";
|
|
4
4
|
//#region src/providers/webdav/webdav-config-schema.ts
|
package/package.json
CHANGED