@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.
@@ -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. `recordings`
8216
- * encompasses the high and mid segment profiles; `recordingsLow` is low
8217
- * segments; `eventMedia` is post-analysis blobs. */
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
- /** The durable coordinator state machine. The only phase that changes default
8237
- * locations is `repointing`, after every selected mover has completed and been
8238
- * verified. */
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({ id: string() }), _void(), {
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: "admin"
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: "admin"
24041
+ auth: "protected"
23940
24042
  }), method(object({
23941
24043
  deviceId: number(),
23942
24044
  sessionId: string()
23943
24045
  }), _void(), {
23944
24046
  kind: "mutation",
23945
- auth: "admin"
24047
+ auth: "protected"
23946
24048
  }), method(object({ deviceId: number() }), object({ sessionId: string() }), {
23947
24049
  kind: "mutation",
23948
- auth: "admin"
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: "admin"
24069
+ auth: "protected"
23968
24070
  }), method(object({ deviceId: number() }), _void(), {
23969
24071
  kind: "mutation",
23970
- auth: "admin"
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. `recordings`
8189
- * encompasses the high and mid segment profiles; `recordingsLow` is low
8190
- * segments; `eventMedia` is post-analysis blobs. */
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
- /** The durable coordinator state machine. The only phase that changes default
8210
- * locations is `repointing`, after every selected mover has completed and been
8211
- * verified. */
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({ id: string() }), _void(), {
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: "admin"
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: "admin"
24014
+ auth: "protected"
23913
24015
  }), method(object({
23914
24016
  deviceId: number(),
23915
24017
  sessionId: string()
23916
24018
  }), _void(), {
23917
24019
  kind: "mutation",
23918
- auth: "admin"
24020
+ auth: "protected"
23919
24021
  }), method(object({ deviceId: number() }), object({ sessionId: string() }), {
23920
24022
  kind: "mutation",
23921
- auth: "admin"
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: "admin"
24042
+ auth: "protected"
23941
24043
  }), method(object({ deviceId: number() }), _void(), {
23942
24044
  kind: "mutation",
23943
- auth: "admin"
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.47",
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",