@camstack/ui-library 1.2.198 → 1.2.200
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/index.cjs
CHANGED
|
@@ -7178,12 +7178,6 @@ var useDoorbellApplyDeviceSettingsPatch = trpc.doorbell.applyDeviceSettingsPatch
|
|
|
7178
7178
|
var useEnumSensorGetStatus = trpc.enumSensor.getStatus.useQuery;
|
|
7179
7179
|
/** Generated alias around `trpc.eventEmitter.getStatus.useQuery`. */
|
|
7180
7180
|
var useEventEmitterGetStatus = trpc.eventEmitter.getStatus.useQuery;
|
|
7181
|
-
/** Generated alias around `trpc.events.getEvents.useQuery`. */
|
|
7182
|
-
var useEventsGetEvents = trpc.events.getEvents.useQuery;
|
|
7183
|
-
/** Generated alias around `trpc.events.getEventThumbnail.useQuery`. */
|
|
7184
|
-
var useEventsGetEventThumbnail = trpc.events.getEventThumbnail.useQuery;
|
|
7185
|
-
/** Generated alias around `trpc.events.getEventClipUrl.useQuery`. */
|
|
7186
|
-
var useEventsGetEventClipUrl = trpc.events.getEventClipUrl.useQuery;
|
|
7187
7181
|
/** Generated alias around `trpc.faceGallery.listIdentities.useQuery`. */
|
|
7188
7182
|
var useFaceGalleryListIdentities = trpc.faceGallery.listIdentities.useQuery;
|
|
7189
7183
|
/** Generated alias around `trpc.faceGallery.createIdentity.useMutation`. */
|
|
@@ -7588,6 +7582,10 @@ var useNotificationRulesSetDeviceMuted = trpc.notificationRules.setDeviceMuted.u
|
|
|
7588
7582
|
var useNotificationRulesTestRule = trpc.notificationRules.testRule.useMutation;
|
|
7589
7583
|
/** Generated alias around `trpc.notificationRules.getConditionCatalog.useQuery`. */
|
|
7590
7584
|
var useNotificationRulesGetConditionCatalog = trpc.notificationRules.getConditionCatalog.useQuery;
|
|
7585
|
+
/** Generated alias around `trpc.notificationRules.getTemplateCatalog.useQuery`. */
|
|
7586
|
+
var useNotificationRulesGetTemplateCatalog = trpc.notificationRules.getTemplateCatalog.useQuery;
|
|
7587
|
+
/** Generated alias around `trpc.notificationRules.previewTemplate.useMutation`. */
|
|
7588
|
+
var useNotificationRulesPreviewTemplate = trpc.notificationRules.previewTemplate.useMutation;
|
|
7591
7589
|
/** Generated alias around `trpc.notificationRules.getHistory.useQuery`. */
|
|
7592
7590
|
var useNotificationRulesGetHistory = trpc.notificationRules.getHistory.useQuery;
|
|
7593
7591
|
/** Generated alias around `trpc.notificationRules.resolveArtifactUrl.useQuery`. */
|
|
@@ -8092,80 +8090,84 @@ var usePtzAutotrackGetSettings = trpc.ptzAutotrack.getSettings.useQuery;
|
|
|
8092
8090
|
var usePtzAutotrackSetSettings = trpc.ptzAutotrack.setSettings.useMutation;
|
|
8093
8091
|
/** Generated alias around `trpc.reboot.reboot.useMutation`. */
|
|
8094
8092
|
var useRebootReboot = trpc.reboot.reboot.useMutation;
|
|
8093
|
+
/** Generated alias around `trpc.recording.listSources.useQuery`. */
|
|
8094
|
+
var useRecordingListSources = trpc.recording.listSources.useQuery;
|
|
8095
8095
|
/** Generated alias around `trpc.recording.getAvailability.useQuery`. */
|
|
8096
8096
|
var useRecordingGetAvailability = trpc.recording.getAvailability.useQuery;
|
|
8097
|
-
/** Generated alias around `trpc.recording.getAvailabilityBatch.useQuery`. */
|
|
8098
|
-
var useRecordingGetAvailabilityBatch = trpc.recording.getAvailabilityBatch.useQuery;
|
|
8099
8097
|
/** Generated alias around `trpc.recording.getDaysWithRecordings.useQuery`. */
|
|
8100
8098
|
var useRecordingGetDaysWithRecordings = trpc.recording.getDaysWithRecordings.useQuery;
|
|
8101
|
-
/** Generated alias around `trpc.recording.
|
|
8102
|
-
var
|
|
8103
|
-
/** Generated alias around `trpc.recording.
|
|
8104
|
-
var
|
|
8105
|
-
/** Generated alias around `trpc.
|
|
8106
|
-
var
|
|
8107
|
-
/** Generated alias around `trpc.
|
|
8108
|
-
var
|
|
8109
|
-
/** Generated alias around `trpc.
|
|
8110
|
-
var
|
|
8111
|
-
/** Generated alias around `trpc.
|
|
8112
|
-
var
|
|
8113
|
-
/** Generated alias around `trpc.
|
|
8114
|
-
var
|
|
8115
|
-
/** Generated alias around `trpc.
|
|
8116
|
-
var
|
|
8117
|
-
/** Generated alias around `trpc.
|
|
8118
|
-
var
|
|
8119
|
-
/** Generated alias around `trpc.
|
|
8120
|
-
var
|
|
8121
|
-
/** Generated alias around `trpc.
|
|
8122
|
-
var
|
|
8123
|
-
/** Generated alias around `trpc.
|
|
8124
|
-
var
|
|
8125
|
-
/** Generated alias around `trpc.
|
|
8126
|
-
var
|
|
8127
|
-
/** Generated alias around `trpc.
|
|
8128
|
-
var
|
|
8129
|
-
/** Generated alias around `trpc.
|
|
8130
|
-
var
|
|
8131
|
-
/** Generated alias around `trpc.
|
|
8132
|
-
var
|
|
8133
|
-
/** Generated alias around `trpc.
|
|
8134
|
-
var
|
|
8135
|
-
/** Generated alias around `trpc.
|
|
8136
|
-
var
|
|
8137
|
-
/** Generated alias around `trpc.
|
|
8138
|
-
var
|
|
8139
|
-
/** Generated alias around `trpc.
|
|
8140
|
-
var
|
|
8141
|
-
/** Generated alias around `trpc.
|
|
8142
|
-
var
|
|
8143
|
-
/** Generated alias around `trpc.
|
|
8144
|
-
var
|
|
8145
|
-
/** Generated alias around `trpc.
|
|
8146
|
-
var
|
|
8147
|
-
/** Generated alias around `trpc.
|
|
8148
|
-
var
|
|
8149
|
-
/** Generated alias around `trpc.
|
|
8150
|
-
var
|
|
8151
|
-
/** Generated alias around `trpc.
|
|
8152
|
-
var
|
|
8153
|
-
/** Generated alias around `trpc.
|
|
8154
|
-
var
|
|
8155
|
-
/** Generated alias around `trpc.
|
|
8156
|
-
var
|
|
8157
|
-
/** Generated alias around `trpc.
|
|
8158
|
-
var
|
|
8159
|
-
/** Generated alias around `trpc.
|
|
8160
|
-
var
|
|
8161
|
-
/** Generated alias around `trpc.
|
|
8162
|
-
var
|
|
8163
|
-
/** Generated alias around `trpc.
|
|
8164
|
-
var
|
|
8165
|
-
/** Generated alias around `trpc.
|
|
8166
|
-
var
|
|
8167
|
-
/** Generated alias around `trpc.
|
|
8168
|
-
var
|
|
8099
|
+
/** Generated alias around `trpc.recording.getPlayback.useQuery`. */
|
|
8100
|
+
var useRecordingGetPlayback = trpc.recording.getPlayback.useQuery;
|
|
8101
|
+
/** Generated alias around `trpc.recording.getPlaybackOptions.useQuery`. */
|
|
8102
|
+
var useRecordingGetPlaybackOptions = trpc.recording.getPlaybackOptions.useQuery;
|
|
8103
|
+
/** Generated alias around `trpc.recordingArchive.getAvailabilityBatch.useQuery`. */
|
|
8104
|
+
var useRecordingArchiveGetAvailabilityBatch = trpc.recordingArchive.getAvailabilityBatch.useQuery;
|
|
8105
|
+
/** Generated alias around `trpc.recordingArchive.getDaysWithRecordingsBatch.useQuery`. */
|
|
8106
|
+
var useRecordingArchiveGetDaysWithRecordingsBatch = trpc.recordingArchive.getDaysWithRecordingsBatch.useQuery;
|
|
8107
|
+
/** Generated alias around `trpc.recordingArchive.getStorageUsage.useQuery`. */
|
|
8108
|
+
var useRecordingArchiveGetStorageUsage = trpc.recordingArchive.getStorageUsage.useQuery;
|
|
8109
|
+
/** Generated alias around `trpc.recordingArchive.getDeviceConfig.useQuery`. */
|
|
8110
|
+
var useRecordingArchiveGetDeviceConfig = trpc.recordingArchive.getDeviceConfig.useQuery;
|
|
8111
|
+
/** Generated alias around `trpc.recordingArchive.locateSegment.useQuery`. */
|
|
8112
|
+
var useRecordingArchiveLocateSegment = trpc.recordingArchive.locateSegment.useQuery;
|
|
8113
|
+
/** Generated alias around `trpc.recordingArchive.readSegmentBytes.useQuery`. */
|
|
8114
|
+
var useRecordingArchiveReadSegmentBytes = trpc.recordingArchive.readSegmentBytes.useQuery;
|
|
8115
|
+
/** Generated alias around `trpc.recordingArchive.readGopBytes.useQuery`. */
|
|
8116
|
+
var useRecordingArchiveReadGopBytes = trpc.recordingArchive.readGopBytes.useQuery;
|
|
8117
|
+
/** Generated alias around `trpc.recordingArchive.readWindowBytes.useQuery`. */
|
|
8118
|
+
var useRecordingArchiveReadWindowBytes = trpc.recordingArchive.readWindowBytes.useQuery;
|
|
8119
|
+
/** Generated alias around `trpc.recordingArchive.setDeviceConfig.useMutation`. */
|
|
8120
|
+
var useRecordingArchiveSetDeviceConfig = trpc.recordingArchive.setDeviceConfig.useMutation;
|
|
8121
|
+
/** Generated alias around `trpc.recordingArchive.rescanStorage.useMutation`. */
|
|
8122
|
+
var useRecordingArchiveRescanStorage = trpc.recordingArchive.rescanStorage.useMutation;
|
|
8123
|
+
/** Generated alias around `trpc.recordingArchive.pruneFootage.useMutation`. */
|
|
8124
|
+
var useRecordingArchivePruneFootage = trpc.recordingArchive.pruneFootage.useMutation;
|
|
8125
|
+
/** Generated alias around `trpc.recordingArchive.deleteFootprint.useMutation`. */
|
|
8126
|
+
var useRecordingArchiveDeleteFootprint = trpc.recordingArchive.deleteFootprint.useMutation;
|
|
8127
|
+
/** Generated alias around `trpc.recordingArchive.listOpsLog.useQuery`. */
|
|
8128
|
+
var useRecordingArchiveListOpsLog = trpc.recordingArchive.listOpsLog.useQuery;
|
|
8129
|
+
/** Generated alias around `trpc.recordingArchive.renderGif.useMutation`. */
|
|
8130
|
+
var useRecordingArchiveRenderGif = trpc.recordingArchive.renderGif.useMutation;
|
|
8131
|
+
/** Generated alias around `trpc.recordingArchive.renderClip.useMutation`. */
|
|
8132
|
+
var useRecordingArchiveRenderClip = trpc.recordingArchive.renderClip.useMutation;
|
|
8133
|
+
/** Generated alias around `trpc.recordingArchive.pauseForStorageMigration.useMutation`. */
|
|
8134
|
+
var useRecordingArchivePauseForStorageMigration = trpc.recordingArchive.pauseForStorageMigration.useMutation;
|
|
8135
|
+
/** Generated alias around `trpc.recordingArchive.resumeForStorageMigration.useMutation`. */
|
|
8136
|
+
var useRecordingArchiveResumeForStorageMigration = trpc.recordingArchive.resumeForStorageMigration.useMutation;
|
|
8137
|
+
/** Generated alias around `trpc.recordingArchive.refreshStorageLocationsForMigration.useMutation`. */
|
|
8138
|
+
var useRecordingArchiveRefreshStorageLocationsForMigration = trpc.recordingArchive.refreshStorageLocationsForMigration.useMutation;
|
|
8139
|
+
/** Generated alias around `trpc.recordingArchive.startStorageMigrationMove.useMutation`. */
|
|
8140
|
+
var useRecordingArchiveStartStorageMigrationMove = trpc.recordingArchive.startStorageMigrationMove.useMutation;
|
|
8141
|
+
/** Generated alias around `trpc.recordingArchive.getStorageMigrationMoveStatus.useQuery`. */
|
|
8142
|
+
var useRecordingArchiveGetStorageMigrationMoveStatus = trpc.recordingArchive.getStorageMigrationMoveStatus.useQuery;
|
|
8143
|
+
/** Generated alias around `trpc.recordingArchive.cancelStorageMigrationMove.useMutation`. */
|
|
8144
|
+
var useRecordingArchiveCancelStorageMigrationMove = trpc.recordingArchive.cancelStorageMigrationMove.useMutation;
|
|
8145
|
+
/** Generated alias around `trpc.recordingArchive.relocateFootage.useMutation`. */
|
|
8146
|
+
var useRecordingArchiveRelocateFootage = trpc.recordingArchive.relocateFootage.useMutation;
|
|
8147
|
+
/** Generated alias around `trpc.recordingArchive.listRelocateJobs.useQuery`. */
|
|
8148
|
+
var useRecordingArchiveListRelocateJobs = trpc.recordingArchive.listRelocateJobs.useQuery;
|
|
8149
|
+
/** Generated alias around `trpc.recordingArchive.getRelocateResidue.useQuery`. */
|
|
8150
|
+
var useRecordingArchiveGetRelocateResidue = trpc.recordingArchive.getRelocateResidue.useQuery;
|
|
8151
|
+
/** Generated alias around `trpc.recordingArchive.reconcileLedgerAgainstDisk.useMutation`. */
|
|
8152
|
+
var useRecordingArchiveReconcileLedgerAgainstDisk = trpc.recordingArchive.reconcileLedgerAgainstDisk.useMutation;
|
|
8153
|
+
/** Generated alias around `trpc.recordingArchive.cancelRelocateJob.useMutation`. */
|
|
8154
|
+
var useRecordingArchiveCancelRelocateJob = trpc.recordingArchive.cancelRelocateJob.useMutation;
|
|
8155
|
+
/** Generated alias around `trpc.recordingArchive.planStorageRebalance.useQuery`. */
|
|
8156
|
+
var useRecordingArchivePlanStorageRebalance = trpc.recordingArchive.planStorageRebalance.useQuery;
|
|
8157
|
+
/** Generated alias around `trpc.recordingArchive.startStorageRebalance.useMutation`. */
|
|
8158
|
+
var useRecordingArchiveStartStorageRebalance = trpc.recordingArchive.startStorageRebalance.useMutation;
|
|
8159
|
+
/** Generated alias around `trpc.recordingArchive.getPlacement.useQuery`. */
|
|
8160
|
+
var useRecordingArchiveGetPlacement = trpc.recordingArchive.getPlacement.useQuery;
|
|
8161
|
+
/** Generated alias around `trpc.recordingArchive.setDevicePlacement.useMutation`. */
|
|
8162
|
+
var useRecordingArchiveSetDevicePlacement = trpc.recordingArchive.setDevicePlacement.useMutation;
|
|
8163
|
+
/** Generated alias around `trpc.recordingArchive.getStatus.useQuery`. */
|
|
8164
|
+
var useRecordingArchiveGetStatus = trpc.recordingArchive.getStatus.useQuery;
|
|
8165
|
+
/** Generated alias around `trpc.recordingArchive.getDeviceSettingsContribution.useQuery`. */
|
|
8166
|
+
var useRecordingArchiveGetDeviceSettingsContribution = trpc.recordingArchive.getDeviceSettingsContribution.useQuery;
|
|
8167
|
+
/** Generated alias around `trpc.recordingArchive.getDeviceLiveContribution.useQuery`. */
|
|
8168
|
+
var useRecordingArchiveGetDeviceLiveContribution = trpc.recordingArchive.getDeviceLiveContribution.useQuery;
|
|
8169
|
+
/** Generated alias around `trpc.recordingArchive.applyDeviceSettingsPatch.useMutation`. */
|
|
8170
|
+
var useRecordingArchiveApplyDeviceSettingsPatch = trpc.recordingArchive.applyDeviceSettingsPatch.useMutation;
|
|
8169
8171
|
/** Generated alias around `trpc.recordingExport.createExport.useMutation`. */
|
|
8170
8172
|
var useRecordingExportCreateExport = trpc.recordingExport.createExport.useMutation;
|
|
8171
8173
|
/** Generated alias around `trpc.recordingExport.listExports.useQuery`. */
|
|
@@ -23007,55 +23009,6 @@ function useScrubController(sink, isPlayerLive = () => false) {
|
|
|
23007
23009
|
};
|
|
23008
23010
|
}
|
|
23009
23011
|
//#endregion
|
|
23010
|
-
//#region src/composites/cap-settings/recording-spans.ts
|
|
23011
|
-
/**
|
|
23012
|
-
* Merge availability ranges (across every profile) into the union of distinct
|
|
23013
|
-
* time windows, ascending by start. Overlapping or touching intervals coalesce;
|
|
23014
|
-
* zero/negative-length inputs are dropped. Newest-first ordering is the caller's
|
|
23015
|
-
* concern (it reverses for display).
|
|
23016
|
-
*/
|
|
23017
|
-
function mergeAvailabilitySpans(ranges) {
|
|
23018
|
-
const sorted = ranges.filter((r) => r.endMs > r.startMs).map((r) => ({
|
|
23019
|
-
startMs: r.startMs,
|
|
23020
|
-
endMs: r.endMs
|
|
23021
|
-
})).toSorted((a, b) => a.startMs - b.startMs);
|
|
23022
|
-
const out = [];
|
|
23023
|
-
for (const r of sorted) {
|
|
23024
|
-
const last = out[out.length - 1];
|
|
23025
|
-
if (last && r.startMs <= last.endMs) {
|
|
23026
|
-
if (r.endMs > last.endMs) out[out.length - 1] = {
|
|
23027
|
-
startMs: last.startMs,
|
|
23028
|
-
endMs: r.endMs
|
|
23029
|
-
};
|
|
23030
|
-
} else out.push(r);
|
|
23031
|
-
}
|
|
23032
|
-
return out;
|
|
23033
|
-
}
|
|
23034
|
-
/**
|
|
23035
|
-
* Pick the right unit for a byte count and render it with a sensible number of
|
|
23036
|
-
* significant digits (binary prefixes, matching recording sizes elsewhere).
|
|
23037
|
-
* KB and up render one decimal under 100, none above; bytes never get a decimal.
|
|
23038
|
-
*/
|
|
23039
|
-
function formatBytes(bytes) {
|
|
23040
|
-
if (!Number.isFinite(bytes) || bytes < 0) return "—";
|
|
23041
|
-
if (bytes < 1024) return `${Math.round(bytes)} B`;
|
|
23042
|
-
const units = [
|
|
23043
|
-
"KB",
|
|
23044
|
-
"MB",
|
|
23045
|
-
"GB",
|
|
23046
|
-
"TB",
|
|
23047
|
-
"PB"
|
|
23048
|
-
];
|
|
23049
|
-
let value = bytes / 1024;
|
|
23050
|
-
let unit = "KB";
|
|
23051
|
-
for (const u of units) {
|
|
23052
|
-
unit = u;
|
|
23053
|
-
if (value < 1024) break;
|
|
23054
|
-
value /= 1024;
|
|
23055
|
-
}
|
|
23056
|
-
return `${value >= 100 ? Math.round(value).toString() : value.toFixed(1)} ${unit}`;
|
|
23057
|
-
}
|
|
23058
|
-
//#endregion
|
|
23059
23012
|
//#region src/composites/cap-settings/CoverageTrack.tsx
|
|
23060
23013
|
function CoverageTrack({ windowFrom, windowTo, spans, playheadMs, onSeek, onScrubStart, onScrubMove, onScrubEnd }) {
|
|
23061
23014
|
const [hoverInfo, setHoverInfo] = (0, react$1.useState)(null);
|
|
@@ -23290,6 +23243,55 @@ function EventBucketStrip({ clips, loading, busyKey, onPlay, enabledKinds, onTog
|
|
|
23290
23243
|
});
|
|
23291
23244
|
}
|
|
23292
23245
|
//#endregion
|
|
23246
|
+
//#region src/composites/cap-settings/recording-spans.ts
|
|
23247
|
+
/**
|
|
23248
|
+
* Merge availability ranges (across every profile) into the union of distinct
|
|
23249
|
+
* time windows, ascending by start. Overlapping or touching intervals coalesce;
|
|
23250
|
+
* zero/negative-length inputs are dropped. Newest-first ordering is the caller's
|
|
23251
|
+
* concern (it reverses for display).
|
|
23252
|
+
*/
|
|
23253
|
+
function mergeAvailabilitySpans(ranges) {
|
|
23254
|
+
const sorted = ranges.filter((r) => r.endMs > r.startMs).map((r) => ({
|
|
23255
|
+
startMs: r.startMs,
|
|
23256
|
+
endMs: r.endMs
|
|
23257
|
+
})).toSorted((a, b) => a.startMs - b.startMs);
|
|
23258
|
+
const out = [];
|
|
23259
|
+
for (const r of sorted) {
|
|
23260
|
+
const last = out[out.length - 1];
|
|
23261
|
+
if (last && r.startMs <= last.endMs) {
|
|
23262
|
+
if (r.endMs > last.endMs) out[out.length - 1] = {
|
|
23263
|
+
startMs: last.startMs,
|
|
23264
|
+
endMs: r.endMs
|
|
23265
|
+
};
|
|
23266
|
+
} else out.push(r);
|
|
23267
|
+
}
|
|
23268
|
+
return out;
|
|
23269
|
+
}
|
|
23270
|
+
/**
|
|
23271
|
+
* Pick the right unit for a byte count and render it with a sensible number of
|
|
23272
|
+
* significant digits (binary prefixes, matching recording sizes elsewhere).
|
|
23273
|
+
* KB and up render one decimal under 100, none above; bytes never get a decimal.
|
|
23274
|
+
*/
|
|
23275
|
+
function formatBytes(bytes) {
|
|
23276
|
+
if (!Number.isFinite(bytes) || bytes < 0) return "—";
|
|
23277
|
+
if (bytes < 1024) return `${Math.round(bytes)} B`;
|
|
23278
|
+
const units = [
|
|
23279
|
+
"KB",
|
|
23280
|
+
"MB",
|
|
23281
|
+
"GB",
|
|
23282
|
+
"TB",
|
|
23283
|
+
"PB"
|
|
23284
|
+
];
|
|
23285
|
+
let value = bytes / 1024;
|
|
23286
|
+
let unit = "KB";
|
|
23287
|
+
for (const u of units) {
|
|
23288
|
+
unit = u;
|
|
23289
|
+
if (value < 1024) break;
|
|
23290
|
+
value /= 1024;
|
|
23291
|
+
}
|
|
23292
|
+
return `${value >= 100 ? Math.round(value).toString() : value.toFixed(1)} ${unit}`;
|
|
23293
|
+
}
|
|
23294
|
+
//#endregion
|
|
23293
23295
|
//#region src/composites/cap-settings/RecordingTimeline.tsx
|
|
23294
23296
|
var ALL_KINDS = [
|
|
23295
23297
|
"motion",
|
|
@@ -23401,6 +23403,7 @@ function RecordingTimeline({ deviceId }) {
|
|
|
23401
23403
|
const bucketMs = bucketMsForSpan(view.toMs - view.fromMs);
|
|
23402
23404
|
const availabilityQuery = useRecordingGetAvailability({
|
|
23403
23405
|
deviceId,
|
|
23406
|
+
provider: _camstack_types.RECORDING_SOURCE_CAMSTACK_ADDON,
|
|
23404
23407
|
fromMs: view.fromMs,
|
|
23405
23408
|
toMs: view.toMs
|
|
23406
23409
|
});
|
|
@@ -23410,7 +23413,8 @@ function RecordingTimeline({ deviceId }) {
|
|
|
23410
23413
|
until: view.toMs,
|
|
23411
23414
|
bucketMs
|
|
23412
23415
|
});
|
|
23413
|
-
const
|
|
23416
|
+
const availabilityUnreadable = availabilityQuery.data?.read === "unreadable";
|
|
23417
|
+
const ranges = availabilityQuery.data?.read === "read" ? availabilityQuery.data.ranges : EMPTY_RANGES;
|
|
23414
23418
|
const spans = (0, react$1.useMemo)(() => mergeAvailabilitySpans(ranges), [ranges]);
|
|
23415
23419
|
const buckets = (0, react$1.useMemo)(() => densityRowsToBuckets(eventDensityQuery.data ?? [], view.fromMs, bucketMs), [
|
|
23416
23420
|
eventDensityQuery.data,
|
|
@@ -23490,18 +23494,19 @@ function RecordingTimeline({ deviceId }) {
|
|
|
23490
23494
|
setBusyKey(key);
|
|
23491
23495
|
setPlaybackError(null);
|
|
23492
23496
|
try {
|
|
23493
|
-
const
|
|
23497
|
+
const playback = await system.trpcClient.recording.getPlayback.query({
|
|
23494
23498
|
deviceId,
|
|
23499
|
+
provider: _camstack_types.RECORDING_SOURCE_CAMSTACK_ADDON,
|
|
23495
23500
|
fromMs,
|
|
23496
23501
|
toMs
|
|
23497
23502
|
});
|
|
23498
|
-
if (manifest
|
|
23503
|
+
if (playback.kind === "hls" && playback.manifest.playbackUrl) {
|
|
23499
23504
|
setPlayheadMs(headMs);
|
|
23500
23505
|
vod.play({
|
|
23501
|
-
url: manifest.playbackUrl,
|
|
23506
|
+
url: playback.manifest.playbackUrl,
|
|
23502
23507
|
label
|
|
23503
23508
|
});
|
|
23504
|
-
} else setPlaybackError("No playable footage for this selection.");
|
|
23509
|
+
} else setPlaybackError(playback.kind === "none" ? `No playable footage for this selection — ${playback.reason}` : "No playable footage for this selection.");
|
|
23505
23510
|
} catch {
|
|
23506
23511
|
setPlaybackError("Could not load this recording.");
|
|
23507
23512
|
} finally {
|
|
@@ -23567,6 +23572,10 @@ function RecordingTimeline({ deviceId }) {
|
|
|
23567
23572
|
variant: "warning",
|
|
23568
23573
|
message: "Recorder unavailable — the recording service may not be running for this node."
|
|
23569
23574
|
}) : null,
|
|
23575
|
+
availabilityUnreadable ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBox, {
|
|
23576
|
+
variant: "warning",
|
|
23577
|
+
message: "CamStack could not be asked about this camera's recordings — this bar shows nothing, which is not the same as no footage."
|
|
23578
|
+
}) : null,
|
|
23570
23579
|
playbackError ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBox, {
|
|
23571
23580
|
variant: "warning",
|
|
23572
23581
|
message: playbackError
|
|
@@ -23687,13 +23696,13 @@ function RecordingTimeline({ deviceId }) {
|
|
|
23687
23696
|
var DAY_MS$1 = 1440 * 60 * 1e3;
|
|
23688
23697
|
function RecordingPanel({ deviceId }) {
|
|
23689
23698
|
const queryClient = (0, _tanstack_react_query.useQueryClient)();
|
|
23690
|
-
const statusQuery =
|
|
23691
|
-
const configQuery =
|
|
23699
|
+
const statusQuery = useRecordingArchiveGetStatus({ deviceId });
|
|
23700
|
+
const configQuery = useRecordingArchiveGetDeviceConfig({ deviceId });
|
|
23692
23701
|
const cameraLocation = useDeviceManagerGetDevice({ deviceId }).data?.location ?? null;
|
|
23693
23702
|
const bindingsQuery = useDeviceManagerGetBindings({ deviceId });
|
|
23694
23703
|
const deviceSignal = bindingsQuery.status === "pending" ? "pending" : bindingsQuery.status === "error" ? "unknown" : bindingsQuery.data.entries.some((e) => e.capName === "recording-signal") ? "present" : "absent";
|
|
23695
|
-
const setConfig =
|
|
23696
|
-
const rescanStorage =
|
|
23704
|
+
const setConfig = useRecordingArchiveSetDeviceConfig();
|
|
23705
|
+
const rescanStorage = useRecordingArchiveRescanStorage();
|
|
23697
23706
|
const { data: profileSlots } = useStreamBrokerListAllProfileSlots(void 0, { staleTime: 3e4 });
|
|
23698
23707
|
const availableProfiles = (0, react$1.useMemo)(() => (0, _camstack_types.selectAssignedProfileSlots)(profileSlots ?? [], deviceId).map((s) => s.profile), [profileSlots, deviceId]);
|
|
23699
23708
|
const saveConfig = (config) => {
|
|
@@ -23717,6 +23726,7 @@ function RecordingPanel({ deviceId }) {
|
|
|
23717
23726
|
const toMs = (0, react$1.useMemo)(() => Date.now(), []);
|
|
23718
23727
|
const availabilityQuery = useRecordingGetAvailability({
|
|
23719
23728
|
deviceId,
|
|
23729
|
+
provider: _camstack_types.RECORDING_SOURCE_CAMSTACK_ADDON,
|
|
23720
23730
|
fromMs: toMs - DAY_MS$1,
|
|
23721
23731
|
toMs
|
|
23722
23732
|
});
|
|
@@ -23724,7 +23734,8 @@ function RecordingPanel({ deviceId }) {
|
|
|
23724
23734
|
const status = parsedStatus?.success ? parsedStatus.data : null;
|
|
23725
23735
|
const parsedConfig = configQuery.data ? _camstack_types.RecordingConfigSchema.safeParse(configQuery.data) : null;
|
|
23726
23736
|
const resolvedConfig = parsedConfig?.success ? parsedConfig.data : null;
|
|
23727
|
-
const
|
|
23737
|
+
const availabilityUnreadable = availabilityQuery.data?.read === "unreadable";
|
|
23738
|
+
const ranges = availabilityQuery.data?.read === "read" ? availabilityQuery.data.ranges : [];
|
|
23728
23739
|
const recordedMs = ranges.reduce((acc, r) => acc + Math.max(0, r.endMs - r.startMs), 0);
|
|
23729
23740
|
const isRecording = status?.enabled === true && status.activeMode === "continuous";
|
|
23730
23741
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -23783,8 +23794,8 @@ function RecordingPanel({ deviceId }) {
|
|
|
23783
23794
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(WidgetMetricCard, {
|
|
23784
23795
|
label: "Recorded (24h)",
|
|
23785
23796
|
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Clock, { className: "h-3.5 w-3.5" }),
|
|
23786
|
-
footer: `${ranges.length} segment range${ranges.length === 1 ? "" : "s"}`,
|
|
23787
|
-
children: availabilityQuery.isLoading ? "…" : formatDurationMs(recordedMs)
|
|
23797
|
+
footer: availabilityUnreadable ? "nobody could look" : `${ranges.length} segment range${ranges.length === 1 ? "" : "s"}`,
|
|
23798
|
+
children: availabilityQuery.isLoading ? "…" : availabilityUnreadable ? "—" : formatDurationMs(recordedMs)
|
|
23788
23799
|
})
|
|
23789
23800
|
]
|
|
23790
23801
|
}),
|
|
@@ -37370,11 +37381,13 @@ function useOptimisticSlice(realSlice, opts) {
|
|
|
37370
37381
|
]);
|
|
37371
37382
|
if (!enabled) return {
|
|
37372
37383
|
display: realSlice,
|
|
37373
|
-
applyOptimistic: () => {}
|
|
37384
|
+
applyOptimistic: () => {},
|
|
37385
|
+
rollback: () => {}
|
|
37374
37386
|
};
|
|
37375
37387
|
return {
|
|
37376
37388
|
display: override !== void 0 ? override : realSlice,
|
|
37377
|
-
applyOptimistic
|
|
37389
|
+
applyOptimistic,
|
|
37390
|
+
rollback: clearOverride
|
|
37378
37391
|
};
|
|
37379
37392
|
}
|
|
37380
37393
|
//#endregion
|
|
@@ -44929,10 +44942,25 @@ function AlarmSegments({ state, availableModes, busy, onDisarm, onArm }) {
|
|
|
44929
44942
|
}, mode))]
|
|
44930
44943
|
});
|
|
44931
44944
|
}
|
|
44945
|
+
function messageOf(err) {
|
|
44946
|
+
return err instanceof Error ? err.message : String(err);
|
|
44947
|
+
}
|
|
44932
44948
|
/**
|
|
44933
44949
|
* Subscribes to the alarm-panel cap ONCE and exposes the disarm/arm handlers
|
|
44934
44950
|
* with optimistic state updates. Both the hero and the inline control consume
|
|
44935
44951
|
* this, so the cap is never double-subscribed.
|
|
44952
|
+
*
|
|
44953
|
+
* A rejected `arm`/`disarm` (the panel refusing, per D630) is never swallowed:
|
|
44954
|
+
* the optimistic patch is rolled back to the real slice and the rejection's
|
|
44955
|
+
* message is surfaced through `error`, which callers render. `error` also
|
|
44956
|
+
* clears on its own the next time a real slice arrives — a fresh server push
|
|
44957
|
+
* means the refusal is no longer the last word on the panel's state.
|
|
44958
|
+
*
|
|
44959
|
+
* A rejection is only ever the LATEST press's business. Each call captures a
|
|
44960
|
+
* fresh token; if a second press starts before the first's promise settles,
|
|
44961
|
+
* the first press's eventual rejection must not roll back or error over the
|
|
44962
|
+
* second press's still-pending optimistic state — the token check makes a
|
|
44963
|
+
* stale rejection a no-op instead.
|
|
44936
44964
|
*/
|
|
44937
44965
|
function useAlarmControl(trpc, deviceId, optimistic) {
|
|
44938
44966
|
const { cap, slice, available } = useDeviceCapability({
|
|
@@ -44941,24 +44969,42 @@ function useAlarmControl(trpc, deviceId, optimistic) {
|
|
|
44941
44969
|
cap: (d) => d.alarmPanel,
|
|
44942
44970
|
slice: (d) => d.state.alarmPanel
|
|
44943
44971
|
});
|
|
44944
|
-
const { display, applyOptimistic } = useOptimisticSlice(slice, { enabled: optimistic ?? true });
|
|
44972
|
+
const { display, applyOptimistic, rollback } = useOptimisticSlice(slice, { enabled: optimistic ?? true });
|
|
44973
|
+
const [error, setError] = (0, react$1.useState)(null);
|
|
44974
|
+
const clearError = () => setError(null);
|
|
44975
|
+
const latestCallRef = (0, react$1.useRef)(0);
|
|
44976
|
+
(0, react$1.useEffect)(() => {
|
|
44977
|
+
setError(null);
|
|
44978
|
+
}, [slice]);
|
|
44945
44979
|
const busy = !available;
|
|
44946
44980
|
const handleDisarm = () => {
|
|
44947
44981
|
if (cap === void 0 || busy) return;
|
|
44982
|
+
const call = ++latestCallRef.current;
|
|
44948
44983
|
applyOptimistic({ state: "disarming" });
|
|
44949
|
-
cap.disarm({})
|
|
44984
|
+
cap.disarm({}).catch((err) => {
|
|
44985
|
+
if (latestCallRef.current !== call) return;
|
|
44986
|
+
rollback();
|
|
44987
|
+
setError(messageOf(err));
|
|
44988
|
+
});
|
|
44950
44989
|
};
|
|
44951
44990
|
const handleArm = (mode) => {
|
|
44952
44991
|
if (cap === void 0 || busy) return;
|
|
44992
|
+
const call = ++latestCallRef.current;
|
|
44953
44993
|
applyOptimistic({ state: "arming" });
|
|
44954
|
-
cap.arm({ mode })
|
|
44994
|
+
cap.arm({ mode }).catch((err) => {
|
|
44995
|
+
if (latestCallRef.current !== call) return;
|
|
44996
|
+
rollback();
|
|
44997
|
+
setError(messageOf(err));
|
|
44998
|
+
});
|
|
44955
44999
|
};
|
|
44956
45000
|
return {
|
|
44957
45001
|
display,
|
|
44958
45002
|
capPresent: cap !== void 0,
|
|
44959
45003
|
busy,
|
|
44960
45004
|
handleDisarm,
|
|
44961
|
-
handleArm
|
|
45005
|
+
handleArm,
|
|
45006
|
+
error,
|
|
45007
|
+
clearError
|
|
44962
45008
|
};
|
|
44963
45009
|
}
|
|
44964
45010
|
/**
|
|
@@ -44979,41 +45025,59 @@ function useAlarmControl(trpc, deviceId, optimistic) {
|
|
|
44979
45025
|
* of sizing makes it. So the row shows what a row is for — **the state** — and
|
|
44980
45026
|
* offers the modes through a select, which is one line at any width. The four
|
|
44981
45027
|
* segments live in the hero, where there is room for them.
|
|
45028
|
+
*
|
|
45029
|
+
* A refusal (D630) still has to be visible here, one line or not — it is a
|
|
45030
|
+
* small danger badge (icon only, `title` carries the full message, same
|
|
45031
|
+
* pattern as `OfflineBadge`) appended after the select. It never grows the
|
|
45032
|
+
* row past one line.
|
|
44982
45033
|
*/
|
|
44983
45034
|
function AlarmInlineControl({ trpc, deviceId, optimistic }) {
|
|
44984
|
-
const { display, capPresent, busy, handleDisarm, handleArm } = useAlarmControl(trpc, deviceId, optimistic);
|
|
45035
|
+
const { display, capPresent, busy, handleDisarm, handleArm, error } = useAlarmControl(trpc, deviceId, optimistic);
|
|
44985
45036
|
if (!capPresent) return null;
|
|
44986
45037
|
if (display === void 0) return null;
|
|
44987
45038
|
const config = ALARM_STATE_CONFIG[display.state];
|
|
44988
45039
|
const current = isArmedState(display.state) ? display.state.replace("armed_", "") : "";
|
|
44989
45040
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
44990
45041
|
className: "flex min-w-0 items-center gap-2",
|
|
44991
|
-
children: [
|
|
44992
|
-
|
|
44993
|
-
|
|
44994
|
-
|
|
44995
|
-
|
|
44996
|
-
|
|
44997
|
-
|
|
44998
|
-
|
|
44999
|
-
|
|
45000
|
-
|
|
45001
|
-
|
|
45002
|
-
|
|
45003
|
-
e.stopPropagation()
|
|
45004
|
-
|
|
45005
|
-
|
|
45006
|
-
|
|
45007
|
-
|
|
45008
|
-
|
|
45009
|
-
|
|
45010
|
-
|
|
45011
|
-
children: "
|
|
45012
|
-
|
|
45013
|
-
|
|
45014
|
-
|
|
45015
|
-
|
|
45016
|
-
|
|
45042
|
+
children: [
|
|
45043
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
45044
|
+
className: cn("inline-flex shrink-0 items-center gap-1 rounded-md border px-1.5 py-0.5 text-[11px] font-medium whitespace-nowrap", config.colorClass, isTransitioningState(display.state) && "animate-pulse"),
|
|
45045
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AlarmGlyph, {
|
|
45046
|
+
icon: config.icon,
|
|
45047
|
+
sizeClass: "h-3 w-3"
|
|
45048
|
+
}), config.label]
|
|
45049
|
+
}),
|
|
45050
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
45051
|
+
"aria-label": "Alarm mode",
|
|
45052
|
+
disabled: busy,
|
|
45053
|
+
value: current,
|
|
45054
|
+
onClick: (e) => e.stopPropagation(),
|
|
45055
|
+
onChange: (e) => {
|
|
45056
|
+
e.stopPropagation();
|
|
45057
|
+
const next = e.target.value;
|
|
45058
|
+
if (next === "") handleDisarm();
|
|
45059
|
+
else handleArm(next);
|
|
45060
|
+
},
|
|
45061
|
+
className: cn("min-w-0 shrink rounded-md border border-border bg-surface-subtle px-1.5 py-0.5 text-xs text-foreground-muted", busy && "cursor-not-allowed opacity-40"),
|
|
45062
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
45063
|
+
value: "",
|
|
45064
|
+
children: "Disarm"
|
|
45065
|
+
}), display.availableModes.map((mode) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
45066
|
+
value: mode,
|
|
45067
|
+
children: ARM_MODE_LABEL[mode]
|
|
45068
|
+
}, mode))]
|
|
45069
|
+
}),
|
|
45070
|
+
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
45071
|
+
"data-testid": "alarm-inline-error",
|
|
45072
|
+
role: "alert",
|
|
45073
|
+
title: error,
|
|
45074
|
+
className: "inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-danger/10 text-danger",
|
|
45075
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ShieldAlert, {
|
|
45076
|
+
className: "h-3 w-3",
|
|
45077
|
+
"aria-hidden": "true"
|
|
45078
|
+
})
|
|
45079
|
+
})
|
|
45080
|
+
]
|
|
45017
45081
|
});
|
|
45018
45082
|
}
|
|
45019
45083
|
/**
|
|
@@ -45030,32 +45094,54 @@ function AlarmInlineControl({ trpc, deviceId, optimistic }) {
|
|
|
45030
45094
|
* PIN entry (when `requiresCode`) is deferred to a later task; the segments
|
|
45031
45095
|
* call arm/disarm without a code, and the provider rejects when a code is
|
|
45032
45096
|
* required — surfaced upstream.
|
|
45097
|
+
*
|
|
45098
|
+
* A refusal (D630: an open device, a required code, …) is never a swallowed
|
|
45099
|
+
* promise — `useAlarmControl` rolls the optimistic state back and hands the
|
|
45100
|
+
* rejection's message back as `error`, rendered below the segments.
|
|
45033
45101
|
*/
|
|
45034
45102
|
function AlarmHeroCard({ trpc, deviceId, optimistic }) {
|
|
45035
|
-
const { display, capPresent, busy, handleDisarm, handleArm } = useAlarmControl(trpc, deviceId, optimistic);
|
|
45103
|
+
const { display, capPresent, busy, handleDisarm, handleArm, error, clearError } = useAlarmControl(trpc, deviceId, optimistic);
|
|
45036
45104
|
if (!capPresent) return null;
|
|
45037
45105
|
if (display === void 0) return null;
|
|
45038
45106
|
const config = ALARM_STATE_CONFIG[display.state];
|
|
45039
45107
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
45040
45108
|
className: "flex flex-col items-stretch gap-4 rounded-lg border border-border bg-surface p-6",
|
|
45041
|
-
children: [
|
|
45042
|
-
|
|
45043
|
-
|
|
45044
|
-
|
|
45045
|
-
|
|
45046
|
-
|
|
45047
|
-
|
|
45048
|
-
|
|
45049
|
-
|
|
45050
|
-
|
|
45051
|
-
|
|
45052
|
-
|
|
45053
|
-
|
|
45054
|
-
|
|
45055
|
-
|
|
45056
|
-
|
|
45057
|
-
|
|
45058
|
-
|
|
45109
|
+
children: [
|
|
45110
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
45111
|
+
className: "flex flex-col items-center gap-2",
|
|
45112
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
45113
|
+
"data-testid": "alarm-state",
|
|
45114
|
+
"data-state": display.state,
|
|
45115
|
+
className: cn("flex h-16 w-16 items-center justify-center rounded-full border-2", config.colorClass, isTransitioningState(display.state) && "animate-pulse"),
|
|
45116
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AlarmGlyph, { icon: config.icon })
|
|
45117
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
45118
|
+
className: cn("text-sm font-medium", config.colorClass, "border-0 bg-transparent"),
|
|
45119
|
+
children: config.label
|
|
45120
|
+
})]
|
|
45121
|
+
}),
|
|
45122
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AlarmSegments, {
|
|
45123
|
+
state: display.state,
|
|
45124
|
+
availableModes: display.availableModes,
|
|
45125
|
+
busy,
|
|
45126
|
+
onDisarm: handleDisarm,
|
|
45127
|
+
onArm: handleArm
|
|
45128
|
+
}),
|
|
45129
|
+
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
45130
|
+
"data-testid": "alarm-error",
|
|
45131
|
+
role: "alert",
|
|
45132
|
+
className: "flex items-start justify-between gap-2 rounded-md border border-danger/30 bg-danger/10 px-3 py-2 text-sm text-danger",
|
|
45133
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: error }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
45134
|
+
type: "button",
|
|
45135
|
+
"aria-label": "Dismiss",
|
|
45136
|
+
onClick: (e) => {
|
|
45137
|
+
e.stopPropagation();
|
|
45138
|
+
clearError();
|
|
45139
|
+
},
|
|
45140
|
+
className: "shrink-0 font-medium text-danger/80 hover:text-danger",
|
|
45141
|
+
children: "×"
|
|
45142
|
+
})]
|
|
45143
|
+
})
|
|
45144
|
+
]
|
|
45059
45145
|
});
|
|
45060
45146
|
}
|
|
45061
45147
|
//#endregion
|
|
@@ -56457,9 +56543,6 @@ exports.useEventEmitterGetStatus = useEventEmitterGetStatus;
|
|
|
56457
56543
|
exports.useEventInvalidation = useEventInvalidation;
|
|
56458
56544
|
exports.useEventStreamLatest = useEventStreamLatest;
|
|
56459
56545
|
exports.useEventStreamMap = useEventStreamMap;
|
|
56460
|
-
exports.useEventsGetEventClipUrl = useEventsGetEventClipUrl;
|
|
56461
|
-
exports.useEventsGetEventThumbnail = useEventsGetEventThumbnail;
|
|
56462
|
-
exports.useEventsGetEvents = useEventsGetEvents;
|
|
56463
56546
|
exports.useFaceGalleryAssignFace = useFaceGalleryAssignFace;
|
|
56464
56547
|
exports.useFaceGalleryAssignFaces = useFaceGalleryAssignFaces;
|
|
56465
56548
|
exports.useFaceGalleryAuditIdentitySamples = useFaceGalleryAuditIdentitySamples;
|
|
@@ -56665,9 +56748,11 @@ exports.useNotificationRulesGetClipRetentionAsks = useNotificationRulesGetClipRe
|
|
|
56665
56748
|
exports.useNotificationRulesGetConditionCatalog = useNotificationRulesGetConditionCatalog;
|
|
56666
56749
|
exports.useNotificationRulesGetHistory = useNotificationRulesGetHistory;
|
|
56667
56750
|
exports.useNotificationRulesGetRule = useNotificationRulesGetRule;
|
|
56751
|
+
exports.useNotificationRulesGetTemplateCatalog = useNotificationRulesGetTemplateCatalog;
|
|
56668
56752
|
exports.useNotificationRulesListDeviceMutes = useNotificationRulesListDeviceMutes;
|
|
56669
56753
|
exports.useNotificationRulesListRules = useNotificationRulesListRules;
|
|
56670
56754
|
exports.useNotificationRulesListSnoozes = useNotificationRulesListSnoozes;
|
|
56755
|
+
exports.useNotificationRulesPreviewTemplate = useNotificationRulesPreviewTemplate;
|
|
56671
56756
|
exports.useNotificationRulesResolveArtifactUrl = useNotificationRulesResolveArtifactUrl;
|
|
56672
56757
|
exports.useNotificationRulesSetAlarmConfig = useNotificationRulesSetAlarmConfig;
|
|
56673
56758
|
exports.useNotificationRulesSetDeviceMuted = useNotificationRulesSetDeviceMuted;
|
|
@@ -56929,10 +57014,40 @@ exports.usePtzSetHomeReturn = usePtzSetHomeReturn;
|
|
|
56929
57014
|
exports.usePtzStop = usePtzStop;
|
|
56930
57015
|
exports.useRebootReboot = useRebootReboot;
|
|
56931
57016
|
exports.useRecordedPlayback = useRecordedPlayback;
|
|
56932
|
-
exports.
|
|
56933
|
-
exports.
|
|
56934
|
-
exports.
|
|
56935
|
-
exports.
|
|
57017
|
+
exports.useRecordingArchiveApplyDeviceSettingsPatch = useRecordingArchiveApplyDeviceSettingsPatch;
|
|
57018
|
+
exports.useRecordingArchiveCancelRelocateJob = useRecordingArchiveCancelRelocateJob;
|
|
57019
|
+
exports.useRecordingArchiveCancelStorageMigrationMove = useRecordingArchiveCancelStorageMigrationMove;
|
|
57020
|
+
exports.useRecordingArchiveDeleteFootprint = useRecordingArchiveDeleteFootprint;
|
|
57021
|
+
exports.useRecordingArchiveGetAvailabilityBatch = useRecordingArchiveGetAvailabilityBatch;
|
|
57022
|
+
exports.useRecordingArchiveGetDaysWithRecordingsBatch = useRecordingArchiveGetDaysWithRecordingsBatch;
|
|
57023
|
+
exports.useRecordingArchiveGetDeviceConfig = useRecordingArchiveGetDeviceConfig;
|
|
57024
|
+
exports.useRecordingArchiveGetDeviceLiveContribution = useRecordingArchiveGetDeviceLiveContribution;
|
|
57025
|
+
exports.useRecordingArchiveGetDeviceSettingsContribution = useRecordingArchiveGetDeviceSettingsContribution;
|
|
57026
|
+
exports.useRecordingArchiveGetPlacement = useRecordingArchiveGetPlacement;
|
|
57027
|
+
exports.useRecordingArchiveGetRelocateResidue = useRecordingArchiveGetRelocateResidue;
|
|
57028
|
+
exports.useRecordingArchiveGetStatus = useRecordingArchiveGetStatus;
|
|
57029
|
+
exports.useRecordingArchiveGetStorageMigrationMoveStatus = useRecordingArchiveGetStorageMigrationMoveStatus;
|
|
57030
|
+
exports.useRecordingArchiveGetStorageUsage = useRecordingArchiveGetStorageUsage;
|
|
57031
|
+
exports.useRecordingArchiveListOpsLog = useRecordingArchiveListOpsLog;
|
|
57032
|
+
exports.useRecordingArchiveListRelocateJobs = useRecordingArchiveListRelocateJobs;
|
|
57033
|
+
exports.useRecordingArchiveLocateSegment = useRecordingArchiveLocateSegment;
|
|
57034
|
+
exports.useRecordingArchivePauseForStorageMigration = useRecordingArchivePauseForStorageMigration;
|
|
57035
|
+
exports.useRecordingArchivePlanStorageRebalance = useRecordingArchivePlanStorageRebalance;
|
|
57036
|
+
exports.useRecordingArchivePruneFootage = useRecordingArchivePruneFootage;
|
|
57037
|
+
exports.useRecordingArchiveReadGopBytes = useRecordingArchiveReadGopBytes;
|
|
57038
|
+
exports.useRecordingArchiveReadSegmentBytes = useRecordingArchiveReadSegmentBytes;
|
|
57039
|
+
exports.useRecordingArchiveReadWindowBytes = useRecordingArchiveReadWindowBytes;
|
|
57040
|
+
exports.useRecordingArchiveReconcileLedgerAgainstDisk = useRecordingArchiveReconcileLedgerAgainstDisk;
|
|
57041
|
+
exports.useRecordingArchiveRefreshStorageLocationsForMigration = useRecordingArchiveRefreshStorageLocationsForMigration;
|
|
57042
|
+
exports.useRecordingArchiveRelocateFootage = useRecordingArchiveRelocateFootage;
|
|
57043
|
+
exports.useRecordingArchiveRenderClip = useRecordingArchiveRenderClip;
|
|
57044
|
+
exports.useRecordingArchiveRenderGif = useRecordingArchiveRenderGif;
|
|
57045
|
+
exports.useRecordingArchiveRescanStorage = useRecordingArchiveRescanStorage;
|
|
57046
|
+
exports.useRecordingArchiveResumeForStorageMigration = useRecordingArchiveResumeForStorageMigration;
|
|
57047
|
+
exports.useRecordingArchiveSetDeviceConfig = useRecordingArchiveSetDeviceConfig;
|
|
57048
|
+
exports.useRecordingArchiveSetDevicePlacement = useRecordingArchiveSetDevicePlacement;
|
|
57049
|
+
exports.useRecordingArchiveStartStorageMigrationMove = useRecordingArchiveStartStorageMigrationMove;
|
|
57050
|
+
exports.useRecordingArchiveStartStorageRebalance = useRecordingArchiveStartStorageRebalance;
|
|
56936
57051
|
exports.useRecordingExportCancelExport = useRecordingExportCancelExport;
|
|
56937
57052
|
exports.useRecordingExportCreateExport = useRecordingExportCreateExport;
|
|
56938
57053
|
exports.useRecordingExportDeleteExport = useRecordingExportDeleteExport;
|
|
@@ -56941,42 +57056,14 @@ exports.useRecordingExportGetExport = useRecordingExportGetExport;
|
|
|
56941
57056
|
exports.useRecordingExportListExports = useRecordingExportListExports;
|
|
56942
57057
|
exports.useRecordingExportReadExportBytes = useRecordingExportReadExportBytes;
|
|
56943
57058
|
exports.useRecordingGetAvailability = useRecordingGetAvailability;
|
|
56944
|
-
exports.useRecordingGetAvailabilityBatch = useRecordingGetAvailabilityBatch;
|
|
56945
57059
|
exports.useRecordingGetDaysWithRecordings = useRecordingGetDaysWithRecordings;
|
|
56946
|
-
exports.
|
|
56947
|
-
exports.
|
|
56948
|
-
exports.
|
|
56949
|
-
exports.useRecordingGetDeviceSettingsContribution = useRecordingGetDeviceSettingsContribution;
|
|
56950
|
-
exports.useRecordingGetPlacement = useRecordingGetPlacement;
|
|
56951
|
-
exports.useRecordingGetPlaybackManifest = useRecordingGetPlaybackManifest;
|
|
56952
|
-
exports.useRecordingGetRelocateResidue = useRecordingGetRelocateResidue;
|
|
56953
|
-
exports.useRecordingGetStatus = useRecordingGetStatus;
|
|
56954
|
-
exports.useRecordingGetStorageMigrationMoveStatus = useRecordingGetStorageMigrationMoveStatus;
|
|
56955
|
-
exports.useRecordingGetStorageUsage = useRecordingGetStorageUsage;
|
|
56956
|
-
exports.useRecordingListOpsLog = useRecordingListOpsLog;
|
|
56957
|
-
exports.useRecordingListRelocateJobs = useRecordingListRelocateJobs;
|
|
56958
|
-
exports.useRecordingLocateSegment = useRecordingLocateSegment;
|
|
57060
|
+
exports.useRecordingGetPlayback = useRecordingGetPlayback;
|
|
57061
|
+
exports.useRecordingGetPlaybackOptions = useRecordingGetPlaybackOptions;
|
|
57062
|
+
exports.useRecordingListSources = useRecordingListSources;
|
|
56959
57063
|
exports.useRecordingOnboardGetOptions = useRecordingOnboardGetOptions;
|
|
56960
57064
|
exports.useRecordingOnboardGetStatus = useRecordingOnboardGetStatus;
|
|
56961
57065
|
exports.useRecordingOnboardSetSettings = useRecordingOnboardSetSettings;
|
|
56962
|
-
exports.useRecordingPauseForStorageMigration = useRecordingPauseForStorageMigration;
|
|
56963
|
-
exports.useRecordingPlanStorageRebalance = useRecordingPlanStorageRebalance;
|
|
56964
|
-
exports.useRecordingPruneFootage = useRecordingPruneFootage;
|
|
56965
|
-
exports.useRecordingReadGopBytes = useRecordingReadGopBytes;
|
|
56966
|
-
exports.useRecordingReadSegmentBytes = useRecordingReadSegmentBytes;
|
|
56967
|
-
exports.useRecordingReadWindowBytes = useRecordingReadWindowBytes;
|
|
56968
|
-
exports.useRecordingReconcileLedgerAgainstDisk = useRecordingReconcileLedgerAgainstDisk;
|
|
56969
|
-
exports.useRecordingRefreshStorageLocationsForMigration = useRecordingRefreshStorageLocationsForMigration;
|
|
56970
|
-
exports.useRecordingRelocateFootage = useRecordingRelocateFootage;
|
|
56971
|
-
exports.useRecordingRenderClip = useRecordingRenderClip;
|
|
56972
|
-
exports.useRecordingRenderGif = useRecordingRenderGif;
|
|
56973
|
-
exports.useRecordingRescanStorage = useRecordingRescanStorage;
|
|
56974
|
-
exports.useRecordingResumeForStorageMigration = useRecordingResumeForStorageMigration;
|
|
56975
|
-
exports.useRecordingSetDeviceConfig = useRecordingSetDeviceConfig;
|
|
56976
|
-
exports.useRecordingSetDevicePlacement = useRecordingSetDevicePlacement;
|
|
56977
57066
|
exports.useRecordingSignalGetStatus = useRecordingSignalGetStatus;
|
|
56978
|
-
exports.useRecordingStartStorageMigrationMove = useRecordingStartStorageMigrationMove;
|
|
56979
|
-
exports.useRecordingStartStorageRebalance = useRecordingStartStorageRebalance;
|
|
56980
57067
|
exports.useRemoteComponent = useRemoteComponent;
|
|
56981
57068
|
exports.useRoleDisplayDefaults = useRoleDisplayDefaults;
|
|
56982
57069
|
exports.useSceneMonitorCaptureReference = useSceneMonitorCaptureReference;
|