@camstack/addon-remote-storage 1.2.40 → 1.2.42
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-CBMUP4jc.mjs → shared-8LifrPLV.mjs} +127 -19
- package/dist/{shared-kn1YUYmb.js → shared-DSJ7V_r6.js} +127 -19
- 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-DSJ7V_r6.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-8LifrPLV.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-DSJ7V_r6.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-8LifrPLV.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
|
|
@@ -8024,18 +8024,61 @@ var RelocateFootageInputSchema = object({
|
|
|
8024
8024
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
8025
8025
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
8026
8026
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
8027
|
+
/**
|
|
8028
|
+
* What a `relocateMedia` pass DOES. One engine, three passes — never a second
|
|
8029
|
+
* mover (the engine already walks both collections with a timestamp cursor and
|
|
8030
|
+
* already has a stamp-without-copy path).
|
|
8031
|
+
*
|
|
8032
|
+
* - `move` — the default and the historical behaviour: event-media and
|
|
8033
|
+
* retrain blobs move to `toLocationId` and their rows are
|
|
8034
|
+
* stamped. The enrolled gallery is skipped (D197).
|
|
8035
|
+
* - `seal` — ROWS ONLY, no bytes. Every row whose `locationId` is NULL is
|
|
8036
|
+
* stamped with `toLocationId`. `toLocationId` here is the id the
|
|
8037
|
+
* bytes ALREADY sit on — today's `eventMedia` default — because
|
|
8038
|
+
* a NULL row means "wherever `eventMedia` points *now*", and the
|
|
8039
|
+
* instant a repoint moves that pointer the row reads from the
|
|
8040
|
+
* new disk while its bytes are on the old one.
|
|
8041
|
+
* - `gallery` — the inverse selection of `move`: ONLY the retention-exempt
|
|
8042
|
+
* (enrolled-gallery) rows, which `move` deliberately skips.
|
|
8043
|
+
* `galleryMedia` is `cardinality: 'single'`, so this pass can
|
|
8044
|
+
* never run beside a live second location: it is stop-the-world
|
|
8045
|
+
* by construction, which is acceptable only because the gallery
|
|
8046
|
+
* is a few KB per enrolled sample.
|
|
8047
|
+
*/
|
|
8048
|
+
var MediaRelocateModeSchema = _enum([
|
|
8049
|
+
"move",
|
|
8050
|
+
"seal",
|
|
8051
|
+
"gallery"
|
|
8052
|
+
]);
|
|
8027
8053
|
var RelocateMediaInputSchema = object({
|
|
8028
8054
|
toLocationId: string(),
|
|
8029
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8055
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8056
|
+
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8057
|
+
mode: MediaRelocateModeSchema.optional()
|
|
8058
|
+
});
|
|
8059
|
+
/** How many rows still carry NO `locationId` — the population a repoint would
|
|
8060
|
+
* silently re-aim at a disk that does not hold their bytes. Zero is the only
|
|
8061
|
+
* value that permits a non-blocking `eventMedia` cutover. */
|
|
8062
|
+
var UnstampedEventMediaCountSchema = object({
|
|
8063
|
+
media: number().int().nonnegative(),
|
|
8064
|
+
retrainFrames: number().int().nonnegative(),
|
|
8065
|
+
total: number().int().nonnegative()
|
|
8030
8066
|
});
|
|
8031
8067
|
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
8032
|
-
/** The independently selectable logical storage classes
|
|
8033
|
-
*
|
|
8034
|
-
*
|
|
8068
|
+
/** The independently selectable logical storage classes — every class
|
|
8069
|
+
* `storage.listLocationDeclarations` reports, so an operator never meets a
|
|
8070
|
+
* Zod enum error where they should meet an explanation.
|
|
8071
|
+
*
|
|
8072
|
+
* `recordings` encompasses the high and mid segment profiles; `recordingsLow`
|
|
8073
|
+
* is low segments; `eventMedia` is post-analysis blobs; `galleryMedia` is the
|
|
8074
|
+
* enrolled gallery; `backups` is the system backup archive. The last two have
|
|
8075
|
+
* their own rules — see {@link StorageMigrationFindingCodeSchema}. */
|
|
8035
8076
|
var StorageMigrationClassSchema = _enum([
|
|
8036
8077
|
"recordings",
|
|
8037
8078
|
"recordingsLow",
|
|
8038
|
-
"eventMedia"
|
|
8079
|
+
"eventMedia",
|
|
8080
|
+
"backups",
|
|
8081
|
+
"galleryMedia"
|
|
8039
8082
|
]);
|
|
8040
8083
|
/** A destination is always an existing, fully-qualified location id. The
|
|
8041
8084
|
* migration API intentionally never changes a source location's `basePath`:
|
|
@@ -8043,20 +8086,56 @@ var StorageMigrationClassSchema = _enum([
|
|
|
8043
8086
|
var StorageMigrationDestinationsSchema = object({
|
|
8044
8087
|
recordings: string().min(1).optional(),
|
|
8045
8088
|
recordingsLow: string().min(1).optional(),
|
|
8046
|
-
eventMedia: string().min(1).optional()
|
|
8089
|
+
eventMedia: string().min(1).optional(),
|
|
8090
|
+
backups: string().min(1).optional(),
|
|
8091
|
+
galleryMedia: string().min(1).optional()
|
|
8047
8092
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8093
|
+
/**
|
|
8094
|
+
* How a migration sequences the cutover against the byte move.
|
|
8095
|
+
*
|
|
8096
|
+
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
8097
|
+
* resume. Recording is stopped for the whole move. Right
|
|
8098
|
+
* for a small or a cold class, and the only legal mode for
|
|
8099
|
+
* a `cardinality: 'single'` class.
|
|
8100
|
+
* - `nonBlocking` — repoint FIRST, drain behind: seal, pause, repoint,
|
|
8101
|
+
* refresh, resume, then move the past with everything
|
|
8102
|
+
* running. The pause is three bounded instants (a detach +
|
|
8103
|
+
* attach round, a write-gate drain, a lease) instead of one
|
|
8104
|
+
* bounded by bytes. 1.09 TB at 7–14 MB/s is thirty hours of
|
|
8105
|
+
* stopped recording under `blocking`; the same move is
|
|
8106
|
+
* seconds of stopped recording under `nonBlocking`.
|
|
8107
|
+
*
|
|
8108
|
+
* The mode is on the JOB, not only on the input, because `status` is where an
|
|
8109
|
+
* operator finds out which one is running.
|
|
8110
|
+
*/
|
|
8111
|
+
var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
8048
8112
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8049
8113
|
var StorageMigrationInputSchema = object({
|
|
8050
8114
|
destinations: StorageMigrationDestinationsSchema,
|
|
8051
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8115
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8116
|
+
/** Omitted = `blocking`, which stays the default. */
|
|
8117
|
+
mode: StorageMigrationModeSchema.optional()
|
|
8052
8118
|
});
|
|
8053
|
-
/**
|
|
8054
|
-
*
|
|
8055
|
-
*
|
|
8119
|
+
/**
|
|
8120
|
+
* The durable coordinator state machine.
|
|
8121
|
+
*
|
|
8122
|
+
* `blocking`:
|
|
8123
|
+
* planning → pausing → moving → verifying → repointing → refreshing → resuming → done
|
|
8124
|
+
*
|
|
8125
|
+
* `nonBlocking`:
|
|
8126
|
+
* planning → sealing → pausing → repointing → refreshing → resuming → draining → verifying → done
|
|
8127
|
+
*
|
|
8128
|
+
* Same phases, different order plus two new ones — not a second mover.
|
|
8129
|
+
* `sealing` closes the `eventMedia` NULL-row hole BEFORE anything is paused;
|
|
8130
|
+
* `draining` runs the same movers UNLEASED, after every writer is back up.
|
|
8131
|
+
* `repointing` is still the only phase that changes a default location.
|
|
8132
|
+
*/
|
|
8056
8133
|
var StorageMigrationPhaseSchema = _enum([
|
|
8057
8134
|
"planning",
|
|
8135
|
+
"sealing",
|
|
8058
8136
|
"pausing",
|
|
8059
8137
|
"moving",
|
|
8138
|
+
"draining",
|
|
8060
8139
|
"verifying",
|
|
8061
8140
|
"repointing",
|
|
8062
8141
|
"refreshing",
|
|
@@ -8081,6 +8160,9 @@ var StorageMigrationMoveSchema = object({
|
|
|
8081
8160
|
var StorageMigrationJobSchema = object({
|
|
8082
8161
|
jobId: string(),
|
|
8083
8162
|
phase: StorageMigrationPhaseSchema,
|
|
8163
|
+
/** Which order this job is running. `status` is the only place an operator
|
|
8164
|
+
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8165
|
+
mode: StorageMigrationModeSchema,
|
|
8084
8166
|
destinations: StorageMigrationDestinationsSchema,
|
|
8085
8167
|
throttleMbps: number(),
|
|
8086
8168
|
moves: array(StorageMigrationMoveSchema),
|
|
@@ -8093,13 +8175,30 @@ var StorageMigrationJobSchema = object({
|
|
|
8093
8175
|
finishedAt: number().nullable(),
|
|
8094
8176
|
error: string().nullable()
|
|
8095
8177
|
});
|
|
8178
|
+
var StorageMigrationFindingSchema = object({
|
|
8179
|
+
code: _enum([
|
|
8180
|
+
"sharesDeviceWithSource",
|
|
8181
|
+
"deviceIdentityUnknown",
|
|
8182
|
+
"unstampedEventMediaRows",
|
|
8183
|
+
"blockingOnly",
|
|
8184
|
+
"noMover"
|
|
8185
|
+
]),
|
|
8186
|
+
storageClass: StorageMigrationClassSchema,
|
|
8187
|
+
/** Human-readable, already carrying the ids and counts. */
|
|
8188
|
+
message: string()
|
|
8189
|
+
});
|
|
8096
8190
|
var StorageMigrationPlanSchema = object({
|
|
8097
8191
|
destinations: StorageMigrationDestinationsSchema,
|
|
8192
|
+
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8193
|
+
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8194
|
+
* it. */
|
|
8195
|
+
mode: StorageMigrationModeSchema,
|
|
8098
8196
|
moves: array(object({
|
|
8099
8197
|
storageClass: StorageMigrationClassSchema,
|
|
8100
8198
|
fromLocationId: string(),
|
|
8101
8199
|
toLocationId: string()
|
|
8102
|
-
}))
|
|
8200
|
+
})),
|
|
8201
|
+
findings: array(StorageMigrationFindingSchema)
|
|
8103
8202
|
});
|
|
8104
8203
|
/**
|
|
8105
8204
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -18610,7 +18709,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
18610
18709
|
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
18611
18710
|
kind: "mutation",
|
|
18612
18711
|
auth: "admin"
|
|
18613
|
-
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
18712
|
+
}), method(object({}), UnstampedEventMediaCountSchema, { auth: "admin" }), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
18614
18713
|
kind: "query",
|
|
18615
18714
|
auth: "admin"
|
|
18616
18715
|
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
@@ -20517,7 +20616,10 @@ method(object({
|
|
|
20517
20616
|
}), StorageLocationSchema, {
|
|
20518
20617
|
kind: "mutation",
|
|
20519
20618
|
auth: "admin"
|
|
20520
|
-
}), method(object({
|
|
20619
|
+
}), method(object({
|
|
20620
|
+
id: string(),
|
|
20621
|
+
force: boolean().optional()
|
|
20622
|
+
}), _void(), {
|
|
20521
20623
|
kind: "mutation",
|
|
20522
20624
|
auth: "admin"
|
|
20523
20625
|
}), method(object({ id: string() }), object({
|
|
@@ -23663,23 +23765,23 @@ DeviceType.Camera, method(object({ deviceId: number() }), object({
|
|
|
23663
23765
|
sdpOffer: string()
|
|
23664
23766
|
}), {
|
|
23665
23767
|
kind: "mutation",
|
|
23666
|
-
auth: "
|
|
23768
|
+
auth: "protected"
|
|
23667
23769
|
}), method(object({
|
|
23668
23770
|
deviceId: number(),
|
|
23669
23771
|
sessionId: string(),
|
|
23670
23772
|
sdpAnswer: string()
|
|
23671
23773
|
}), _void(), {
|
|
23672
23774
|
kind: "mutation",
|
|
23673
|
-
auth: "
|
|
23775
|
+
auth: "protected"
|
|
23674
23776
|
}), method(object({
|
|
23675
23777
|
deviceId: number(),
|
|
23676
23778
|
sessionId: string()
|
|
23677
23779
|
}), _void(), {
|
|
23678
23780
|
kind: "mutation",
|
|
23679
|
-
auth: "
|
|
23781
|
+
auth: "protected"
|
|
23680
23782
|
}), method(object({ deviceId: number() }), object({ sessionId: string() }), {
|
|
23681
23783
|
kind: "mutation",
|
|
23682
|
-
auth: "
|
|
23784
|
+
auth: "protected"
|
|
23683
23785
|
}), method(object({
|
|
23684
23786
|
deviceId: number(),
|
|
23685
23787
|
/** Audio bytes for ONE frame, base64-encoded so the payload
|
|
@@ -23698,10 +23800,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), object({
|
|
|
23698
23800
|
sequenceNumber: number().int()
|
|
23699
23801
|
}), object({ accepted: boolean() }), {
|
|
23700
23802
|
kind: "mutation",
|
|
23701
|
-
auth: "
|
|
23803
|
+
auth: "protected"
|
|
23702
23804
|
}), method(object({ deviceId: number() }), _void(), {
|
|
23703
23805
|
kind: "mutation",
|
|
23704
|
-
auth: "
|
|
23806
|
+
auth: "protected"
|
|
23705
23807
|
}), object({
|
|
23706
23808
|
deviceId: number(),
|
|
23707
23809
|
status: IntercomStatusSchema
|
|
@@ -31050,6 +31152,12 @@ Object.freeze({
|
|
|
31050
31152
|
addonId: null,
|
|
31051
31153
|
access: "create"
|
|
31052
31154
|
},
|
|
31155
|
+
"pipelineAnalytics.countUnstampedEventMedia": {
|
|
31156
|
+
capName: "pipeline-analytics",
|
|
31157
|
+
capScope: "device",
|
|
31158
|
+
addonId: null,
|
|
31159
|
+
access: "view"
|
|
31160
|
+
},
|
|
31053
31161
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
31054
31162
|
capName: "pipeline-analytics",
|
|
31055
31163
|
capScope: "device",
|
|
@@ -8047,18 +8047,61 @@ var RelocateFootageInputSchema = object({
|
|
|
8047
8047
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
8048
8048
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
8049
8049
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
8050
|
+
/**
|
|
8051
|
+
* What a `relocateMedia` pass DOES. One engine, three passes — never a second
|
|
8052
|
+
* mover (the engine already walks both collections with a timestamp cursor and
|
|
8053
|
+
* already has a stamp-without-copy path).
|
|
8054
|
+
*
|
|
8055
|
+
* - `move` — the default and the historical behaviour: event-media and
|
|
8056
|
+
* retrain blobs move to `toLocationId` and their rows are
|
|
8057
|
+
* stamped. The enrolled gallery is skipped (D197).
|
|
8058
|
+
* - `seal` — ROWS ONLY, no bytes. Every row whose `locationId` is NULL is
|
|
8059
|
+
* stamped with `toLocationId`. `toLocationId` here is the id the
|
|
8060
|
+
* bytes ALREADY sit on — today's `eventMedia` default — because
|
|
8061
|
+
* a NULL row means "wherever `eventMedia` points *now*", and the
|
|
8062
|
+
* instant a repoint moves that pointer the row reads from the
|
|
8063
|
+
* new disk while its bytes are on the old one.
|
|
8064
|
+
* - `gallery` — the inverse selection of `move`: ONLY the retention-exempt
|
|
8065
|
+
* (enrolled-gallery) rows, which `move` deliberately skips.
|
|
8066
|
+
* `galleryMedia` is `cardinality: 'single'`, so this pass can
|
|
8067
|
+
* never run beside a live second location: it is stop-the-world
|
|
8068
|
+
* by construction, which is acceptable only because the gallery
|
|
8069
|
+
* is a few KB per enrolled sample.
|
|
8070
|
+
*/
|
|
8071
|
+
var MediaRelocateModeSchema = _enum([
|
|
8072
|
+
"move",
|
|
8073
|
+
"seal",
|
|
8074
|
+
"gallery"
|
|
8075
|
+
]);
|
|
8050
8076
|
var RelocateMediaInputSchema = object({
|
|
8051
8077
|
toLocationId: string(),
|
|
8052
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8078
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8079
|
+
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8080
|
+
mode: MediaRelocateModeSchema.optional()
|
|
8081
|
+
});
|
|
8082
|
+
/** How many rows still carry NO `locationId` — the population a repoint would
|
|
8083
|
+
* silently re-aim at a disk that does not hold their bytes. Zero is the only
|
|
8084
|
+
* value that permits a non-blocking `eventMedia` cutover. */
|
|
8085
|
+
var UnstampedEventMediaCountSchema = object({
|
|
8086
|
+
media: number().int().nonnegative(),
|
|
8087
|
+
retrainFrames: number().int().nonnegative(),
|
|
8088
|
+
total: number().int().nonnegative()
|
|
8053
8089
|
});
|
|
8054
8090
|
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
8055
|
-
/** The independently selectable logical storage classes
|
|
8056
|
-
*
|
|
8057
|
-
*
|
|
8091
|
+
/** The independently selectable logical storage classes — every class
|
|
8092
|
+
* `storage.listLocationDeclarations` reports, so an operator never meets a
|
|
8093
|
+
* Zod enum error where they should meet an explanation.
|
|
8094
|
+
*
|
|
8095
|
+
* `recordings` encompasses the high and mid segment profiles; `recordingsLow`
|
|
8096
|
+
* is low segments; `eventMedia` is post-analysis blobs; `galleryMedia` is the
|
|
8097
|
+
* enrolled gallery; `backups` is the system backup archive. The last two have
|
|
8098
|
+
* their own rules — see {@link StorageMigrationFindingCodeSchema}. */
|
|
8058
8099
|
var StorageMigrationClassSchema = _enum([
|
|
8059
8100
|
"recordings",
|
|
8060
8101
|
"recordingsLow",
|
|
8061
|
-
"eventMedia"
|
|
8102
|
+
"eventMedia",
|
|
8103
|
+
"backups",
|
|
8104
|
+
"galleryMedia"
|
|
8062
8105
|
]);
|
|
8063
8106
|
/** A destination is always an existing, fully-qualified location id. The
|
|
8064
8107
|
* migration API intentionally never changes a source location's `basePath`:
|
|
@@ -8066,20 +8109,56 @@ var StorageMigrationClassSchema = _enum([
|
|
|
8066
8109
|
var StorageMigrationDestinationsSchema = object({
|
|
8067
8110
|
recordings: string().min(1).optional(),
|
|
8068
8111
|
recordingsLow: string().min(1).optional(),
|
|
8069
|
-
eventMedia: string().min(1).optional()
|
|
8112
|
+
eventMedia: string().min(1).optional(),
|
|
8113
|
+
backups: string().min(1).optional(),
|
|
8114
|
+
galleryMedia: string().min(1).optional()
|
|
8070
8115
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8116
|
+
/**
|
|
8117
|
+
* How a migration sequences the cutover against the byte move.
|
|
8118
|
+
*
|
|
8119
|
+
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
8120
|
+
* resume. Recording is stopped for the whole move. Right
|
|
8121
|
+
* for a small or a cold class, and the only legal mode for
|
|
8122
|
+
* a `cardinality: 'single'` class.
|
|
8123
|
+
* - `nonBlocking` — repoint FIRST, drain behind: seal, pause, repoint,
|
|
8124
|
+
* refresh, resume, then move the past with everything
|
|
8125
|
+
* running. The pause is three bounded instants (a detach +
|
|
8126
|
+
* attach round, a write-gate drain, a lease) instead of one
|
|
8127
|
+
* bounded by bytes. 1.09 TB at 7–14 MB/s is thirty hours of
|
|
8128
|
+
* stopped recording under `blocking`; the same move is
|
|
8129
|
+
* seconds of stopped recording under `nonBlocking`.
|
|
8130
|
+
*
|
|
8131
|
+
* The mode is on the JOB, not only on the input, because `status` is where an
|
|
8132
|
+
* operator finds out which one is running.
|
|
8133
|
+
*/
|
|
8134
|
+
var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
8071
8135
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8072
8136
|
var StorageMigrationInputSchema = object({
|
|
8073
8137
|
destinations: StorageMigrationDestinationsSchema,
|
|
8074
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8138
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8139
|
+
/** Omitted = `blocking`, which stays the default. */
|
|
8140
|
+
mode: StorageMigrationModeSchema.optional()
|
|
8075
8141
|
});
|
|
8076
|
-
/**
|
|
8077
|
-
*
|
|
8078
|
-
*
|
|
8142
|
+
/**
|
|
8143
|
+
* The durable coordinator state machine.
|
|
8144
|
+
*
|
|
8145
|
+
* `blocking`:
|
|
8146
|
+
* planning → pausing → moving → verifying → repointing → refreshing → resuming → done
|
|
8147
|
+
*
|
|
8148
|
+
* `nonBlocking`:
|
|
8149
|
+
* planning → sealing → pausing → repointing → refreshing → resuming → draining → verifying → done
|
|
8150
|
+
*
|
|
8151
|
+
* Same phases, different order plus two new ones — not a second mover.
|
|
8152
|
+
* `sealing` closes the `eventMedia` NULL-row hole BEFORE anything is paused;
|
|
8153
|
+
* `draining` runs the same movers UNLEASED, after every writer is back up.
|
|
8154
|
+
* `repointing` is still the only phase that changes a default location.
|
|
8155
|
+
*/
|
|
8079
8156
|
var StorageMigrationPhaseSchema = _enum([
|
|
8080
8157
|
"planning",
|
|
8158
|
+
"sealing",
|
|
8081
8159
|
"pausing",
|
|
8082
8160
|
"moving",
|
|
8161
|
+
"draining",
|
|
8083
8162
|
"verifying",
|
|
8084
8163
|
"repointing",
|
|
8085
8164
|
"refreshing",
|
|
@@ -8104,6 +8183,9 @@ var StorageMigrationMoveSchema = object({
|
|
|
8104
8183
|
var StorageMigrationJobSchema = object({
|
|
8105
8184
|
jobId: string(),
|
|
8106
8185
|
phase: StorageMigrationPhaseSchema,
|
|
8186
|
+
/** Which order this job is running. `status` is the only place an operator
|
|
8187
|
+
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8188
|
+
mode: StorageMigrationModeSchema,
|
|
8107
8189
|
destinations: StorageMigrationDestinationsSchema,
|
|
8108
8190
|
throttleMbps: number(),
|
|
8109
8191
|
moves: array(StorageMigrationMoveSchema),
|
|
@@ -8116,13 +8198,30 @@ var StorageMigrationJobSchema = object({
|
|
|
8116
8198
|
finishedAt: number().nullable(),
|
|
8117
8199
|
error: string().nullable()
|
|
8118
8200
|
});
|
|
8201
|
+
var StorageMigrationFindingSchema = object({
|
|
8202
|
+
code: _enum([
|
|
8203
|
+
"sharesDeviceWithSource",
|
|
8204
|
+
"deviceIdentityUnknown",
|
|
8205
|
+
"unstampedEventMediaRows",
|
|
8206
|
+
"blockingOnly",
|
|
8207
|
+
"noMover"
|
|
8208
|
+
]),
|
|
8209
|
+
storageClass: StorageMigrationClassSchema,
|
|
8210
|
+
/** Human-readable, already carrying the ids and counts. */
|
|
8211
|
+
message: string()
|
|
8212
|
+
});
|
|
8119
8213
|
var StorageMigrationPlanSchema = object({
|
|
8120
8214
|
destinations: StorageMigrationDestinationsSchema,
|
|
8215
|
+
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8216
|
+
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8217
|
+
* it. */
|
|
8218
|
+
mode: StorageMigrationModeSchema,
|
|
8121
8219
|
moves: array(object({
|
|
8122
8220
|
storageClass: StorageMigrationClassSchema,
|
|
8123
8221
|
fromLocationId: string(),
|
|
8124
8222
|
toLocationId: string()
|
|
8125
|
-
}))
|
|
8223
|
+
})),
|
|
8224
|
+
findings: array(StorageMigrationFindingSchema)
|
|
8126
8225
|
});
|
|
8127
8226
|
/**
|
|
8128
8227
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -18633,7 +18732,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
18633
18732
|
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
18634
18733
|
kind: "mutation",
|
|
18635
18734
|
auth: "admin"
|
|
18636
|
-
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
18735
|
+
}), method(object({}), UnstampedEventMediaCountSchema, { auth: "admin" }), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
18637
18736
|
kind: "query",
|
|
18638
18737
|
auth: "admin"
|
|
18639
18738
|
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
@@ -20540,7 +20639,10 @@ method(object({
|
|
|
20540
20639
|
}), StorageLocationSchema, {
|
|
20541
20640
|
kind: "mutation",
|
|
20542
20641
|
auth: "admin"
|
|
20543
|
-
}), method(object({
|
|
20642
|
+
}), method(object({
|
|
20643
|
+
id: string(),
|
|
20644
|
+
force: boolean().optional()
|
|
20645
|
+
}), _void(), {
|
|
20544
20646
|
kind: "mutation",
|
|
20545
20647
|
auth: "admin"
|
|
20546
20648
|
}), method(object({ id: string() }), object({
|
|
@@ -23686,23 +23788,23 @@ DeviceType.Camera, method(object({ deviceId: number() }), object({
|
|
|
23686
23788
|
sdpOffer: string()
|
|
23687
23789
|
}), {
|
|
23688
23790
|
kind: "mutation",
|
|
23689
|
-
auth: "
|
|
23791
|
+
auth: "protected"
|
|
23690
23792
|
}), method(object({
|
|
23691
23793
|
deviceId: number(),
|
|
23692
23794
|
sessionId: string(),
|
|
23693
23795
|
sdpAnswer: string()
|
|
23694
23796
|
}), _void(), {
|
|
23695
23797
|
kind: "mutation",
|
|
23696
|
-
auth: "
|
|
23798
|
+
auth: "protected"
|
|
23697
23799
|
}), method(object({
|
|
23698
23800
|
deviceId: number(),
|
|
23699
23801
|
sessionId: string()
|
|
23700
23802
|
}), _void(), {
|
|
23701
23803
|
kind: "mutation",
|
|
23702
|
-
auth: "
|
|
23804
|
+
auth: "protected"
|
|
23703
23805
|
}), method(object({ deviceId: number() }), object({ sessionId: string() }), {
|
|
23704
23806
|
kind: "mutation",
|
|
23705
|
-
auth: "
|
|
23807
|
+
auth: "protected"
|
|
23706
23808
|
}), method(object({
|
|
23707
23809
|
deviceId: number(),
|
|
23708
23810
|
/** Audio bytes for ONE frame, base64-encoded so the payload
|
|
@@ -23721,10 +23823,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), object({
|
|
|
23721
23823
|
sequenceNumber: number().int()
|
|
23722
23824
|
}), object({ accepted: boolean() }), {
|
|
23723
23825
|
kind: "mutation",
|
|
23724
|
-
auth: "
|
|
23826
|
+
auth: "protected"
|
|
23725
23827
|
}), method(object({ deviceId: number() }), _void(), {
|
|
23726
23828
|
kind: "mutation",
|
|
23727
|
-
auth: "
|
|
23829
|
+
auth: "protected"
|
|
23728
23830
|
}), object({
|
|
23729
23831
|
deviceId: number(),
|
|
23730
23832
|
status: IntercomStatusSchema
|
|
@@ -31073,6 +31175,12 @@ Object.freeze({
|
|
|
31073
31175
|
addonId: null,
|
|
31074
31176
|
access: "create"
|
|
31075
31177
|
},
|
|
31178
|
+
"pipelineAnalytics.countUnstampedEventMedia": {
|
|
31179
|
+
capName: "pipeline-analytics",
|
|
31180
|
+
capScope: "device",
|
|
31181
|
+
addonId: null,
|
|
31182
|
+
access: "view"
|
|
31183
|
+
},
|
|
31076
31184
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
31077
31185
|
capName: "pipeline-analytics",
|
|
31078
31186
|
capScope: "device",
|
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-DSJ7V_r6.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-8LifrPLV.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