@camstack/addon-export-alexa 1.2.47 → 1.2.49
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/export-alexa.addon.js +127 -19
- package/dist/export-alexa.addon.mjs +127 -19
- package/package.json +1 -1
|
@@ -8207,18 +8207,61 @@ var RelocateFootageInputSchema = object({
|
|
|
8207
8207
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
8208
8208
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
8209
8209
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
8210
|
+
/**
|
|
8211
|
+
* What a `relocateMedia` pass DOES. One engine, three passes — never a second
|
|
8212
|
+
* mover (the engine already walks both collections with a timestamp cursor and
|
|
8213
|
+
* already has a stamp-without-copy path).
|
|
8214
|
+
*
|
|
8215
|
+
* - `move` — the default and the historical behaviour: event-media and
|
|
8216
|
+
* retrain blobs move to `toLocationId` and their rows are
|
|
8217
|
+
* stamped. The enrolled gallery is skipped (D197).
|
|
8218
|
+
* - `seal` — ROWS ONLY, no bytes. Every row whose `locationId` is NULL is
|
|
8219
|
+
* stamped with `toLocationId`. `toLocationId` here is the id the
|
|
8220
|
+
* bytes ALREADY sit on — today's `eventMedia` default — because
|
|
8221
|
+
* a NULL row means "wherever `eventMedia` points *now*", and the
|
|
8222
|
+
* instant a repoint moves that pointer the row reads from the
|
|
8223
|
+
* new disk while its bytes are on the old one.
|
|
8224
|
+
* - `gallery` — the inverse selection of `move`: ONLY the retention-exempt
|
|
8225
|
+
* (enrolled-gallery) rows, which `move` deliberately skips.
|
|
8226
|
+
* `galleryMedia` is `cardinality: 'single'`, so this pass can
|
|
8227
|
+
* never run beside a live second location: it is stop-the-world
|
|
8228
|
+
* by construction, which is acceptable only because the gallery
|
|
8229
|
+
* is a few KB per enrolled sample.
|
|
8230
|
+
*/
|
|
8231
|
+
var MediaRelocateModeSchema = _enum([
|
|
8232
|
+
"move",
|
|
8233
|
+
"seal",
|
|
8234
|
+
"gallery"
|
|
8235
|
+
]);
|
|
8210
8236
|
var RelocateMediaInputSchema = object({
|
|
8211
8237
|
toLocationId: string(),
|
|
8212
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8238
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8239
|
+
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8240
|
+
mode: MediaRelocateModeSchema.optional()
|
|
8241
|
+
});
|
|
8242
|
+
/** How many rows still carry NO `locationId` — the population a repoint would
|
|
8243
|
+
* silently re-aim at a disk that does not hold their bytes. Zero is the only
|
|
8244
|
+
* value that permits a non-blocking `eventMedia` cutover. */
|
|
8245
|
+
var UnstampedEventMediaCountSchema = object({
|
|
8246
|
+
media: number().int().nonnegative(),
|
|
8247
|
+
retrainFrames: number().int().nonnegative(),
|
|
8248
|
+
total: number().int().nonnegative()
|
|
8213
8249
|
});
|
|
8214
8250
|
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
8215
|
-
/** The independently selectable logical storage classes
|
|
8216
|
-
*
|
|
8217
|
-
*
|
|
8251
|
+
/** The independently selectable logical storage classes — every class
|
|
8252
|
+
* `storage.listLocationDeclarations` reports, so an operator never meets a
|
|
8253
|
+
* Zod enum error where they should meet an explanation.
|
|
8254
|
+
*
|
|
8255
|
+
* `recordings` encompasses the high and mid segment profiles; `recordingsLow`
|
|
8256
|
+
* is low segments; `eventMedia` is post-analysis blobs; `galleryMedia` is the
|
|
8257
|
+
* enrolled gallery; `backups` is the system backup archive. The last two have
|
|
8258
|
+
* their own rules — see {@link StorageMigrationFindingCodeSchema}. */
|
|
8218
8259
|
var StorageMigrationClassSchema = _enum([
|
|
8219
8260
|
"recordings",
|
|
8220
8261
|
"recordingsLow",
|
|
8221
|
-
"eventMedia"
|
|
8262
|
+
"eventMedia",
|
|
8263
|
+
"backups",
|
|
8264
|
+
"galleryMedia"
|
|
8222
8265
|
]);
|
|
8223
8266
|
/** A destination is always an existing, fully-qualified location id. The
|
|
8224
8267
|
* migration API intentionally never changes a source location's `basePath`:
|
|
@@ -8226,20 +8269,56 @@ var StorageMigrationClassSchema = _enum([
|
|
|
8226
8269
|
var StorageMigrationDestinationsSchema = object({
|
|
8227
8270
|
recordings: string().min(1).optional(),
|
|
8228
8271
|
recordingsLow: string().min(1).optional(),
|
|
8229
|
-
eventMedia: string().min(1).optional()
|
|
8272
|
+
eventMedia: string().min(1).optional(),
|
|
8273
|
+
backups: string().min(1).optional(),
|
|
8274
|
+
galleryMedia: string().min(1).optional()
|
|
8230
8275
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8276
|
+
/**
|
|
8277
|
+
* How a migration sequences the cutover against the byte move.
|
|
8278
|
+
*
|
|
8279
|
+
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
8280
|
+
* resume. Recording is stopped for the whole move. Right
|
|
8281
|
+
* for a small or a cold class, and the only legal mode for
|
|
8282
|
+
* a `cardinality: 'single'` class.
|
|
8283
|
+
* - `nonBlocking` — repoint FIRST, drain behind: seal, pause, repoint,
|
|
8284
|
+
* refresh, resume, then move the past with everything
|
|
8285
|
+
* running. The pause is three bounded instants (a detach +
|
|
8286
|
+
* attach round, a write-gate drain, a lease) instead of one
|
|
8287
|
+
* bounded by bytes. 1.09 TB at 7–14 MB/s is thirty hours of
|
|
8288
|
+
* stopped recording under `blocking`; the same move is
|
|
8289
|
+
* seconds of stopped recording under `nonBlocking`.
|
|
8290
|
+
*
|
|
8291
|
+
* The mode is on the JOB, not only on the input, because `status` is where an
|
|
8292
|
+
* operator finds out which one is running.
|
|
8293
|
+
*/
|
|
8294
|
+
var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
8231
8295
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8232
8296
|
var StorageMigrationInputSchema = object({
|
|
8233
8297
|
destinations: StorageMigrationDestinationsSchema,
|
|
8234
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8298
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8299
|
+
/** Omitted = `blocking`, which stays the default. */
|
|
8300
|
+
mode: StorageMigrationModeSchema.optional()
|
|
8235
8301
|
});
|
|
8236
|
-
/**
|
|
8237
|
-
*
|
|
8238
|
-
*
|
|
8302
|
+
/**
|
|
8303
|
+
* The durable coordinator state machine.
|
|
8304
|
+
*
|
|
8305
|
+
* `blocking`:
|
|
8306
|
+
* planning → pausing → moving → verifying → repointing → refreshing → resuming → done
|
|
8307
|
+
*
|
|
8308
|
+
* `nonBlocking`:
|
|
8309
|
+
* planning → sealing → pausing → repointing → refreshing → resuming → draining → verifying → done
|
|
8310
|
+
*
|
|
8311
|
+
* Same phases, different order plus two new ones — not a second mover.
|
|
8312
|
+
* `sealing` closes the `eventMedia` NULL-row hole BEFORE anything is paused;
|
|
8313
|
+
* `draining` runs the same movers UNLEASED, after every writer is back up.
|
|
8314
|
+
* `repointing` is still the only phase that changes a default location.
|
|
8315
|
+
*/
|
|
8239
8316
|
var StorageMigrationPhaseSchema = _enum([
|
|
8240
8317
|
"planning",
|
|
8318
|
+
"sealing",
|
|
8241
8319
|
"pausing",
|
|
8242
8320
|
"moving",
|
|
8321
|
+
"draining",
|
|
8243
8322
|
"verifying",
|
|
8244
8323
|
"repointing",
|
|
8245
8324
|
"refreshing",
|
|
@@ -8264,6 +8343,9 @@ var StorageMigrationMoveSchema = object({
|
|
|
8264
8343
|
var StorageMigrationJobSchema = object({
|
|
8265
8344
|
jobId: string(),
|
|
8266
8345
|
phase: StorageMigrationPhaseSchema,
|
|
8346
|
+
/** Which order this job is running. `status` is the only place an operator
|
|
8347
|
+
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8348
|
+
mode: StorageMigrationModeSchema,
|
|
8267
8349
|
destinations: StorageMigrationDestinationsSchema,
|
|
8268
8350
|
throttleMbps: number(),
|
|
8269
8351
|
moves: array(StorageMigrationMoveSchema),
|
|
@@ -8276,13 +8358,30 @@ var StorageMigrationJobSchema = object({
|
|
|
8276
8358
|
finishedAt: number().nullable(),
|
|
8277
8359
|
error: string().nullable()
|
|
8278
8360
|
});
|
|
8361
|
+
var StorageMigrationFindingSchema = object({
|
|
8362
|
+
code: _enum([
|
|
8363
|
+
"sharesDeviceWithSource",
|
|
8364
|
+
"deviceIdentityUnknown",
|
|
8365
|
+
"unstampedEventMediaRows",
|
|
8366
|
+
"blockingOnly",
|
|
8367
|
+
"noMover"
|
|
8368
|
+
]),
|
|
8369
|
+
storageClass: StorageMigrationClassSchema,
|
|
8370
|
+
/** Human-readable, already carrying the ids and counts. */
|
|
8371
|
+
message: string()
|
|
8372
|
+
});
|
|
8279
8373
|
var StorageMigrationPlanSchema = object({
|
|
8280
8374
|
destinations: StorageMigrationDestinationsSchema,
|
|
8375
|
+
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8376
|
+
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8377
|
+
* it. */
|
|
8378
|
+
mode: StorageMigrationModeSchema,
|
|
8281
8379
|
moves: array(object({
|
|
8282
8380
|
storageClass: StorageMigrationClassSchema,
|
|
8283
8381
|
fromLocationId: string(),
|
|
8284
8382
|
toLocationId: string()
|
|
8285
|
-
}))
|
|
8383
|
+
})),
|
|
8384
|
+
findings: array(StorageMigrationFindingSchema)
|
|
8286
8385
|
});
|
|
8287
8386
|
/**
|
|
8288
8387
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -18936,7 +19035,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
18936
19035
|
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
18937
19036
|
kind: "mutation",
|
|
18938
19037
|
auth: "admin"
|
|
18939
|
-
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
19038
|
+
}), method(object({}), UnstampedEventMediaCountSchema, { auth: "admin" }), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
18940
19039
|
kind: "query",
|
|
18941
19040
|
auth: "admin"
|
|
18942
19041
|
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
@@ -20843,7 +20942,10 @@ method(object({
|
|
|
20843
20942
|
}), StorageLocationSchema, {
|
|
20844
20943
|
kind: "mutation",
|
|
20845
20944
|
auth: "admin"
|
|
20846
|
-
}), method(object({
|
|
20945
|
+
}), method(object({
|
|
20946
|
+
id: string(),
|
|
20947
|
+
force: boolean().optional()
|
|
20948
|
+
}), _void(), {
|
|
20847
20949
|
kind: "mutation",
|
|
20848
20950
|
auth: "admin"
|
|
20849
20951
|
}), method(object({ id: string() }), object({
|
|
@@ -23929,23 +24031,23 @@ DeviceType.Camera, method(object({ deviceId: number() }), object({
|
|
|
23929
24031
|
sdpOffer: string()
|
|
23930
24032
|
}), {
|
|
23931
24033
|
kind: "mutation",
|
|
23932
|
-
auth: "
|
|
24034
|
+
auth: "protected"
|
|
23933
24035
|
}), method(object({
|
|
23934
24036
|
deviceId: number(),
|
|
23935
24037
|
sessionId: string(),
|
|
23936
24038
|
sdpAnswer: string()
|
|
23937
24039
|
}), _void(), {
|
|
23938
24040
|
kind: "mutation",
|
|
23939
|
-
auth: "
|
|
24041
|
+
auth: "protected"
|
|
23940
24042
|
}), method(object({
|
|
23941
24043
|
deviceId: number(),
|
|
23942
24044
|
sessionId: string()
|
|
23943
24045
|
}), _void(), {
|
|
23944
24046
|
kind: "mutation",
|
|
23945
|
-
auth: "
|
|
24047
|
+
auth: "protected"
|
|
23946
24048
|
}), method(object({ deviceId: number() }), object({ sessionId: string() }), {
|
|
23947
24049
|
kind: "mutation",
|
|
23948
|
-
auth: "
|
|
24050
|
+
auth: "protected"
|
|
23949
24051
|
}), method(object({
|
|
23950
24052
|
deviceId: number(),
|
|
23951
24053
|
/** Audio bytes for ONE frame, base64-encoded so the payload
|
|
@@ -23964,10 +24066,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), object({
|
|
|
23964
24066
|
sequenceNumber: number().int()
|
|
23965
24067
|
}), object({ accepted: boolean() }), {
|
|
23966
24068
|
kind: "mutation",
|
|
23967
|
-
auth: "
|
|
24069
|
+
auth: "protected"
|
|
23968
24070
|
}), method(object({ deviceId: number() }), _void(), {
|
|
23969
24071
|
kind: "mutation",
|
|
23970
|
-
auth: "
|
|
24072
|
+
auth: "protected"
|
|
23971
24073
|
}), object({
|
|
23972
24074
|
deviceId: number(),
|
|
23973
24075
|
status: IntercomStatusSchema
|
|
@@ -31316,6 +31418,12 @@ Object.freeze({
|
|
|
31316
31418
|
addonId: null,
|
|
31317
31419
|
access: "create"
|
|
31318
31420
|
},
|
|
31421
|
+
"pipelineAnalytics.countUnstampedEventMedia": {
|
|
31422
|
+
capName: "pipeline-analytics",
|
|
31423
|
+
capScope: "device",
|
|
31424
|
+
addonId: null,
|
|
31425
|
+
access: "view"
|
|
31426
|
+
},
|
|
31319
31427
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
31320
31428
|
capName: "pipeline-analytics",
|
|
31321
31429
|
capScope: "device",
|
|
@@ -8180,18 +8180,61 @@ var RelocateFootageInputSchema = object({
|
|
|
8180
8180
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
8181
8181
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
8182
8182
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
8183
|
+
/**
|
|
8184
|
+
* What a `relocateMedia` pass DOES. One engine, three passes — never a second
|
|
8185
|
+
* mover (the engine already walks both collections with a timestamp cursor and
|
|
8186
|
+
* already has a stamp-without-copy path).
|
|
8187
|
+
*
|
|
8188
|
+
* - `move` — the default and the historical behaviour: event-media and
|
|
8189
|
+
* retrain blobs move to `toLocationId` and their rows are
|
|
8190
|
+
* stamped. The enrolled gallery is skipped (D197).
|
|
8191
|
+
* - `seal` — ROWS ONLY, no bytes. Every row whose `locationId` is NULL is
|
|
8192
|
+
* stamped with `toLocationId`. `toLocationId` here is the id the
|
|
8193
|
+
* bytes ALREADY sit on — today's `eventMedia` default — because
|
|
8194
|
+
* a NULL row means "wherever `eventMedia` points *now*", and the
|
|
8195
|
+
* instant a repoint moves that pointer the row reads from the
|
|
8196
|
+
* new disk while its bytes are on the old one.
|
|
8197
|
+
* - `gallery` — the inverse selection of `move`: ONLY the retention-exempt
|
|
8198
|
+
* (enrolled-gallery) rows, which `move` deliberately skips.
|
|
8199
|
+
* `galleryMedia` is `cardinality: 'single'`, so this pass can
|
|
8200
|
+
* never run beside a live second location: it is stop-the-world
|
|
8201
|
+
* by construction, which is acceptable only because the gallery
|
|
8202
|
+
* is a few KB per enrolled sample.
|
|
8203
|
+
*/
|
|
8204
|
+
var MediaRelocateModeSchema = _enum([
|
|
8205
|
+
"move",
|
|
8206
|
+
"seal",
|
|
8207
|
+
"gallery"
|
|
8208
|
+
]);
|
|
8183
8209
|
var RelocateMediaInputSchema = object({
|
|
8184
8210
|
toLocationId: string(),
|
|
8185
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8211
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8212
|
+
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8213
|
+
mode: MediaRelocateModeSchema.optional()
|
|
8214
|
+
});
|
|
8215
|
+
/** How many rows still carry NO `locationId` — the population a repoint would
|
|
8216
|
+
* silently re-aim at a disk that does not hold their bytes. Zero is the only
|
|
8217
|
+
* value that permits a non-blocking `eventMedia` cutover. */
|
|
8218
|
+
var UnstampedEventMediaCountSchema = object({
|
|
8219
|
+
media: number().int().nonnegative(),
|
|
8220
|
+
retrainFrames: number().int().nonnegative(),
|
|
8221
|
+
total: number().int().nonnegative()
|
|
8186
8222
|
});
|
|
8187
8223
|
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
8188
|
-
/** The independently selectable logical storage classes
|
|
8189
|
-
*
|
|
8190
|
-
*
|
|
8224
|
+
/** The independently selectable logical storage classes — every class
|
|
8225
|
+
* `storage.listLocationDeclarations` reports, so an operator never meets a
|
|
8226
|
+
* Zod enum error where they should meet an explanation.
|
|
8227
|
+
*
|
|
8228
|
+
* `recordings` encompasses the high and mid segment profiles; `recordingsLow`
|
|
8229
|
+
* is low segments; `eventMedia` is post-analysis blobs; `galleryMedia` is the
|
|
8230
|
+
* enrolled gallery; `backups` is the system backup archive. The last two have
|
|
8231
|
+
* their own rules — see {@link StorageMigrationFindingCodeSchema}. */
|
|
8191
8232
|
var StorageMigrationClassSchema = _enum([
|
|
8192
8233
|
"recordings",
|
|
8193
8234
|
"recordingsLow",
|
|
8194
|
-
"eventMedia"
|
|
8235
|
+
"eventMedia",
|
|
8236
|
+
"backups",
|
|
8237
|
+
"galleryMedia"
|
|
8195
8238
|
]);
|
|
8196
8239
|
/** A destination is always an existing, fully-qualified location id. The
|
|
8197
8240
|
* migration API intentionally never changes a source location's `basePath`:
|
|
@@ -8199,20 +8242,56 @@ var StorageMigrationClassSchema = _enum([
|
|
|
8199
8242
|
var StorageMigrationDestinationsSchema = object({
|
|
8200
8243
|
recordings: string().min(1).optional(),
|
|
8201
8244
|
recordingsLow: string().min(1).optional(),
|
|
8202
|
-
eventMedia: string().min(1).optional()
|
|
8245
|
+
eventMedia: string().min(1).optional(),
|
|
8246
|
+
backups: string().min(1).optional(),
|
|
8247
|
+
galleryMedia: string().min(1).optional()
|
|
8203
8248
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8249
|
+
/**
|
|
8250
|
+
* How a migration sequences the cutover against the byte move.
|
|
8251
|
+
*
|
|
8252
|
+
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
8253
|
+
* resume. Recording is stopped for the whole move. Right
|
|
8254
|
+
* for a small or a cold class, and the only legal mode for
|
|
8255
|
+
* a `cardinality: 'single'` class.
|
|
8256
|
+
* - `nonBlocking` — repoint FIRST, drain behind: seal, pause, repoint,
|
|
8257
|
+
* refresh, resume, then move the past with everything
|
|
8258
|
+
* running. The pause is three bounded instants (a detach +
|
|
8259
|
+
* attach round, a write-gate drain, a lease) instead of one
|
|
8260
|
+
* bounded by bytes. 1.09 TB at 7–14 MB/s is thirty hours of
|
|
8261
|
+
* stopped recording under `blocking`; the same move is
|
|
8262
|
+
* seconds of stopped recording under `nonBlocking`.
|
|
8263
|
+
*
|
|
8264
|
+
* The mode is on the JOB, not only on the input, because `status` is where an
|
|
8265
|
+
* operator finds out which one is running.
|
|
8266
|
+
*/
|
|
8267
|
+
var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
8204
8268
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8205
8269
|
var StorageMigrationInputSchema = object({
|
|
8206
8270
|
destinations: StorageMigrationDestinationsSchema,
|
|
8207
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8271
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8272
|
+
/** Omitted = `blocking`, which stays the default. */
|
|
8273
|
+
mode: StorageMigrationModeSchema.optional()
|
|
8208
8274
|
});
|
|
8209
|
-
/**
|
|
8210
|
-
*
|
|
8211
|
-
*
|
|
8275
|
+
/**
|
|
8276
|
+
* The durable coordinator state machine.
|
|
8277
|
+
*
|
|
8278
|
+
* `blocking`:
|
|
8279
|
+
* planning → pausing → moving → verifying → repointing → refreshing → resuming → done
|
|
8280
|
+
*
|
|
8281
|
+
* `nonBlocking`:
|
|
8282
|
+
* planning → sealing → pausing → repointing → refreshing → resuming → draining → verifying → done
|
|
8283
|
+
*
|
|
8284
|
+
* Same phases, different order plus two new ones — not a second mover.
|
|
8285
|
+
* `sealing` closes the `eventMedia` NULL-row hole BEFORE anything is paused;
|
|
8286
|
+
* `draining` runs the same movers UNLEASED, after every writer is back up.
|
|
8287
|
+
* `repointing` is still the only phase that changes a default location.
|
|
8288
|
+
*/
|
|
8212
8289
|
var StorageMigrationPhaseSchema = _enum([
|
|
8213
8290
|
"planning",
|
|
8291
|
+
"sealing",
|
|
8214
8292
|
"pausing",
|
|
8215
8293
|
"moving",
|
|
8294
|
+
"draining",
|
|
8216
8295
|
"verifying",
|
|
8217
8296
|
"repointing",
|
|
8218
8297
|
"refreshing",
|
|
@@ -8237,6 +8316,9 @@ var StorageMigrationMoveSchema = object({
|
|
|
8237
8316
|
var StorageMigrationJobSchema = object({
|
|
8238
8317
|
jobId: string(),
|
|
8239
8318
|
phase: StorageMigrationPhaseSchema,
|
|
8319
|
+
/** Which order this job is running. `status` is the only place an operator
|
|
8320
|
+
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8321
|
+
mode: StorageMigrationModeSchema,
|
|
8240
8322
|
destinations: StorageMigrationDestinationsSchema,
|
|
8241
8323
|
throttleMbps: number(),
|
|
8242
8324
|
moves: array(StorageMigrationMoveSchema),
|
|
@@ -8249,13 +8331,30 @@ var StorageMigrationJobSchema = object({
|
|
|
8249
8331
|
finishedAt: number().nullable(),
|
|
8250
8332
|
error: string().nullable()
|
|
8251
8333
|
});
|
|
8334
|
+
var StorageMigrationFindingSchema = object({
|
|
8335
|
+
code: _enum([
|
|
8336
|
+
"sharesDeviceWithSource",
|
|
8337
|
+
"deviceIdentityUnknown",
|
|
8338
|
+
"unstampedEventMediaRows",
|
|
8339
|
+
"blockingOnly",
|
|
8340
|
+
"noMover"
|
|
8341
|
+
]),
|
|
8342
|
+
storageClass: StorageMigrationClassSchema,
|
|
8343
|
+
/** Human-readable, already carrying the ids and counts. */
|
|
8344
|
+
message: string()
|
|
8345
|
+
});
|
|
8252
8346
|
var StorageMigrationPlanSchema = object({
|
|
8253
8347
|
destinations: StorageMigrationDestinationsSchema,
|
|
8348
|
+
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8349
|
+
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8350
|
+
* it. */
|
|
8351
|
+
mode: StorageMigrationModeSchema,
|
|
8254
8352
|
moves: array(object({
|
|
8255
8353
|
storageClass: StorageMigrationClassSchema,
|
|
8256
8354
|
fromLocationId: string(),
|
|
8257
8355
|
toLocationId: string()
|
|
8258
|
-
}))
|
|
8356
|
+
})),
|
|
8357
|
+
findings: array(StorageMigrationFindingSchema)
|
|
8259
8358
|
});
|
|
8260
8359
|
/**
|
|
8261
8360
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -18909,7 +19008,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
18909
19008
|
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
18910
19009
|
kind: "mutation",
|
|
18911
19010
|
auth: "admin"
|
|
18912
|
-
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
19011
|
+
}), method(object({}), UnstampedEventMediaCountSchema, { auth: "admin" }), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
18913
19012
|
kind: "query",
|
|
18914
19013
|
auth: "admin"
|
|
18915
19014
|
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
@@ -20816,7 +20915,10 @@ method(object({
|
|
|
20816
20915
|
}), StorageLocationSchema, {
|
|
20817
20916
|
kind: "mutation",
|
|
20818
20917
|
auth: "admin"
|
|
20819
|
-
}), method(object({
|
|
20918
|
+
}), method(object({
|
|
20919
|
+
id: string(),
|
|
20920
|
+
force: boolean().optional()
|
|
20921
|
+
}), _void(), {
|
|
20820
20922
|
kind: "mutation",
|
|
20821
20923
|
auth: "admin"
|
|
20822
20924
|
}), method(object({ id: string() }), object({
|
|
@@ -23902,23 +24004,23 @@ DeviceType.Camera, method(object({ deviceId: number() }), object({
|
|
|
23902
24004
|
sdpOffer: string()
|
|
23903
24005
|
}), {
|
|
23904
24006
|
kind: "mutation",
|
|
23905
|
-
auth: "
|
|
24007
|
+
auth: "protected"
|
|
23906
24008
|
}), method(object({
|
|
23907
24009
|
deviceId: number(),
|
|
23908
24010
|
sessionId: string(),
|
|
23909
24011
|
sdpAnswer: string()
|
|
23910
24012
|
}), _void(), {
|
|
23911
24013
|
kind: "mutation",
|
|
23912
|
-
auth: "
|
|
24014
|
+
auth: "protected"
|
|
23913
24015
|
}), method(object({
|
|
23914
24016
|
deviceId: number(),
|
|
23915
24017
|
sessionId: string()
|
|
23916
24018
|
}), _void(), {
|
|
23917
24019
|
kind: "mutation",
|
|
23918
|
-
auth: "
|
|
24020
|
+
auth: "protected"
|
|
23919
24021
|
}), method(object({ deviceId: number() }), object({ sessionId: string() }), {
|
|
23920
24022
|
kind: "mutation",
|
|
23921
|
-
auth: "
|
|
24023
|
+
auth: "protected"
|
|
23922
24024
|
}), method(object({
|
|
23923
24025
|
deviceId: number(),
|
|
23924
24026
|
/** Audio bytes for ONE frame, base64-encoded so the payload
|
|
@@ -23937,10 +24039,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), object({
|
|
|
23937
24039
|
sequenceNumber: number().int()
|
|
23938
24040
|
}), object({ accepted: boolean() }), {
|
|
23939
24041
|
kind: "mutation",
|
|
23940
|
-
auth: "
|
|
24042
|
+
auth: "protected"
|
|
23941
24043
|
}), method(object({ deviceId: number() }), _void(), {
|
|
23942
24044
|
kind: "mutation",
|
|
23943
|
-
auth: "
|
|
24045
|
+
auth: "protected"
|
|
23944
24046
|
}), object({
|
|
23945
24047
|
deviceId: number(),
|
|
23946
24048
|
status: IntercomStatusSchema
|
|
@@ -31289,6 +31391,12 @@ Object.freeze({
|
|
|
31289
31391
|
addonId: null,
|
|
31290
31392
|
access: "create"
|
|
31291
31393
|
},
|
|
31394
|
+
"pipelineAnalytics.countUnstampedEventMedia": {
|
|
31395
|
+
capName: "pipeline-analytics",
|
|
31396
|
+
capScope: "device",
|
|
31397
|
+
addonId: null,
|
|
31398
|
+
access: "view"
|
|
31399
|
+
},
|
|
31292
31400
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
31293
31401
|
capName: "pipeline-analytics",
|
|
31294
31402
|
capScope: "device",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-export-alexa",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.49",
|
|
4
4
|
"description": "Alexa Smart Home Skill export — hub-side OAuth provider + directive handler. The companion AWS Lambda forwards Alexa directives to this addon's /addon/export-alexa/directive endpoint.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|