@camstack/addon-smtp-nodemailer 1.2.41 → 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/smtp.addon.js +121 -13
- package/dist/smtp.addon.mjs +121 -13
- package/package.json +1 -1
package/dist/smtp.addon.js
CHANGED
|
@@ -8060,18 +8060,61 @@ var RelocateFootageInputSchema = object({
|
|
|
8060
8060
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
8061
8061
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
8062
8062
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
8063
|
+
/**
|
|
8064
|
+
* What a `relocateMedia` pass DOES. One engine, three passes — never a second
|
|
8065
|
+
* mover (the engine already walks both collections with a timestamp cursor and
|
|
8066
|
+
* already has a stamp-without-copy path).
|
|
8067
|
+
*
|
|
8068
|
+
* - `move` — the default and the historical behaviour: event-media and
|
|
8069
|
+
* retrain blobs move to `toLocationId` and their rows are
|
|
8070
|
+
* stamped. The enrolled gallery is skipped (D197).
|
|
8071
|
+
* - `seal` — ROWS ONLY, no bytes. Every row whose `locationId` is NULL is
|
|
8072
|
+
* stamped with `toLocationId`. `toLocationId` here is the id the
|
|
8073
|
+
* bytes ALREADY sit on — today's `eventMedia` default — because
|
|
8074
|
+
* a NULL row means "wherever `eventMedia` points *now*", and the
|
|
8075
|
+
* instant a repoint moves that pointer the row reads from the
|
|
8076
|
+
* new disk while its bytes are on the old one.
|
|
8077
|
+
* - `gallery` — the inverse selection of `move`: ONLY the retention-exempt
|
|
8078
|
+
* (enrolled-gallery) rows, which `move` deliberately skips.
|
|
8079
|
+
* `galleryMedia` is `cardinality: 'single'`, so this pass can
|
|
8080
|
+
* never run beside a live second location: it is stop-the-world
|
|
8081
|
+
* by construction, which is acceptable only because the gallery
|
|
8082
|
+
* is a few KB per enrolled sample.
|
|
8083
|
+
*/
|
|
8084
|
+
var MediaRelocateModeSchema = _enum([
|
|
8085
|
+
"move",
|
|
8086
|
+
"seal",
|
|
8087
|
+
"gallery"
|
|
8088
|
+
]);
|
|
8063
8089
|
var RelocateMediaInputSchema = object({
|
|
8064
8090
|
toLocationId: string(),
|
|
8065
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8091
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8092
|
+
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8093
|
+
mode: MediaRelocateModeSchema.optional()
|
|
8094
|
+
});
|
|
8095
|
+
/** How many rows still carry NO `locationId` — the population a repoint would
|
|
8096
|
+
* silently re-aim at a disk that does not hold their bytes. Zero is the only
|
|
8097
|
+
* value that permits a non-blocking `eventMedia` cutover. */
|
|
8098
|
+
var UnstampedEventMediaCountSchema = object({
|
|
8099
|
+
media: number().int().nonnegative(),
|
|
8100
|
+
retrainFrames: number().int().nonnegative(),
|
|
8101
|
+
total: number().int().nonnegative()
|
|
8066
8102
|
});
|
|
8067
8103
|
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
8068
|
-
/** The independently selectable logical storage classes
|
|
8069
|
-
*
|
|
8070
|
-
*
|
|
8104
|
+
/** The independently selectable logical storage classes — every class
|
|
8105
|
+
* `storage.listLocationDeclarations` reports, so an operator never meets a
|
|
8106
|
+
* Zod enum error where they should meet an explanation.
|
|
8107
|
+
*
|
|
8108
|
+
* `recordings` encompasses the high and mid segment profiles; `recordingsLow`
|
|
8109
|
+
* is low segments; `eventMedia` is post-analysis blobs; `galleryMedia` is the
|
|
8110
|
+
* enrolled gallery; `backups` is the system backup archive. The last two have
|
|
8111
|
+
* their own rules — see {@link StorageMigrationFindingCodeSchema}. */
|
|
8071
8112
|
var StorageMigrationClassSchema = _enum([
|
|
8072
8113
|
"recordings",
|
|
8073
8114
|
"recordingsLow",
|
|
8074
|
-
"eventMedia"
|
|
8115
|
+
"eventMedia",
|
|
8116
|
+
"backups",
|
|
8117
|
+
"galleryMedia"
|
|
8075
8118
|
]);
|
|
8076
8119
|
/** A destination is always an existing, fully-qualified location id. The
|
|
8077
8120
|
* migration API intentionally never changes a source location's `basePath`:
|
|
@@ -8079,20 +8122,56 @@ var StorageMigrationClassSchema = _enum([
|
|
|
8079
8122
|
var StorageMigrationDestinationsSchema = object({
|
|
8080
8123
|
recordings: string().min(1).optional(),
|
|
8081
8124
|
recordingsLow: string().min(1).optional(),
|
|
8082
|
-
eventMedia: string().min(1).optional()
|
|
8125
|
+
eventMedia: string().min(1).optional(),
|
|
8126
|
+
backups: string().min(1).optional(),
|
|
8127
|
+
galleryMedia: string().min(1).optional()
|
|
8083
8128
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8129
|
+
/**
|
|
8130
|
+
* How a migration sequences the cutover against the byte move.
|
|
8131
|
+
*
|
|
8132
|
+
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
8133
|
+
* resume. Recording is stopped for the whole move. Right
|
|
8134
|
+
* for a small or a cold class, and the only legal mode for
|
|
8135
|
+
* a `cardinality: 'single'` class.
|
|
8136
|
+
* - `nonBlocking` — repoint FIRST, drain behind: seal, pause, repoint,
|
|
8137
|
+
* refresh, resume, then move the past with everything
|
|
8138
|
+
* running. The pause is three bounded instants (a detach +
|
|
8139
|
+
* attach round, a write-gate drain, a lease) instead of one
|
|
8140
|
+
* bounded by bytes. 1.09 TB at 7–14 MB/s is thirty hours of
|
|
8141
|
+
* stopped recording under `blocking`; the same move is
|
|
8142
|
+
* seconds of stopped recording under `nonBlocking`.
|
|
8143
|
+
*
|
|
8144
|
+
* The mode is on the JOB, not only on the input, because `status` is where an
|
|
8145
|
+
* operator finds out which one is running.
|
|
8146
|
+
*/
|
|
8147
|
+
var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
8084
8148
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8085
8149
|
var StorageMigrationInputSchema = object({
|
|
8086
8150
|
destinations: StorageMigrationDestinationsSchema,
|
|
8087
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8151
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8152
|
+
/** Omitted = `blocking`, which stays the default. */
|
|
8153
|
+
mode: StorageMigrationModeSchema.optional()
|
|
8088
8154
|
});
|
|
8089
|
-
/**
|
|
8090
|
-
*
|
|
8091
|
-
*
|
|
8155
|
+
/**
|
|
8156
|
+
* The durable coordinator state machine.
|
|
8157
|
+
*
|
|
8158
|
+
* `blocking`:
|
|
8159
|
+
* planning → pausing → moving → verifying → repointing → refreshing → resuming → done
|
|
8160
|
+
*
|
|
8161
|
+
* `nonBlocking`:
|
|
8162
|
+
* planning → sealing → pausing → repointing → refreshing → resuming → draining → verifying → done
|
|
8163
|
+
*
|
|
8164
|
+
* Same phases, different order plus two new ones — not a second mover.
|
|
8165
|
+
* `sealing` closes the `eventMedia` NULL-row hole BEFORE anything is paused;
|
|
8166
|
+
* `draining` runs the same movers UNLEASED, after every writer is back up.
|
|
8167
|
+
* `repointing` is still the only phase that changes a default location.
|
|
8168
|
+
*/
|
|
8092
8169
|
var StorageMigrationPhaseSchema = _enum([
|
|
8093
8170
|
"planning",
|
|
8171
|
+
"sealing",
|
|
8094
8172
|
"pausing",
|
|
8095
8173
|
"moving",
|
|
8174
|
+
"draining",
|
|
8096
8175
|
"verifying",
|
|
8097
8176
|
"repointing",
|
|
8098
8177
|
"refreshing",
|
|
@@ -8117,6 +8196,9 @@ var StorageMigrationMoveSchema = object({
|
|
|
8117
8196
|
var StorageMigrationJobSchema = object({
|
|
8118
8197
|
jobId: string(),
|
|
8119
8198
|
phase: StorageMigrationPhaseSchema,
|
|
8199
|
+
/** Which order this job is running. `status` is the only place an operator
|
|
8200
|
+
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8201
|
+
mode: StorageMigrationModeSchema,
|
|
8120
8202
|
destinations: StorageMigrationDestinationsSchema,
|
|
8121
8203
|
throttleMbps: number(),
|
|
8122
8204
|
moves: array(StorageMigrationMoveSchema),
|
|
@@ -8129,13 +8211,30 @@ var StorageMigrationJobSchema = object({
|
|
|
8129
8211
|
finishedAt: number().nullable(),
|
|
8130
8212
|
error: string().nullable()
|
|
8131
8213
|
});
|
|
8214
|
+
var StorageMigrationFindingSchema = object({
|
|
8215
|
+
code: _enum([
|
|
8216
|
+
"sharesDeviceWithSource",
|
|
8217
|
+
"deviceIdentityUnknown",
|
|
8218
|
+
"unstampedEventMediaRows",
|
|
8219
|
+
"blockingOnly",
|
|
8220
|
+
"noMover"
|
|
8221
|
+
]),
|
|
8222
|
+
storageClass: StorageMigrationClassSchema,
|
|
8223
|
+
/** Human-readable, already carrying the ids and counts. */
|
|
8224
|
+
message: string()
|
|
8225
|
+
});
|
|
8132
8226
|
var StorageMigrationPlanSchema = object({
|
|
8133
8227
|
destinations: StorageMigrationDestinationsSchema,
|
|
8228
|
+
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8229
|
+
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8230
|
+
* it. */
|
|
8231
|
+
mode: StorageMigrationModeSchema,
|
|
8134
8232
|
moves: array(object({
|
|
8135
8233
|
storageClass: StorageMigrationClassSchema,
|
|
8136
8234
|
fromLocationId: string(),
|
|
8137
8235
|
toLocationId: string()
|
|
8138
|
-
}))
|
|
8236
|
+
})),
|
|
8237
|
+
findings: array(StorageMigrationFindingSchema)
|
|
8139
8238
|
});
|
|
8140
8239
|
/**
|
|
8141
8240
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -18646,7 +18745,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
18646
18745
|
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
18647
18746
|
kind: "mutation",
|
|
18648
18747
|
auth: "admin"
|
|
18649
|
-
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
18748
|
+
}), method(object({}), UnstampedEventMediaCountSchema, { auth: "admin" }), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
18650
18749
|
kind: "query",
|
|
18651
18750
|
auth: "admin"
|
|
18652
18751
|
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
@@ -20566,7 +20665,10 @@ method(object({
|
|
|
20566
20665
|
}), StorageLocationSchema, {
|
|
20567
20666
|
kind: "mutation",
|
|
20568
20667
|
auth: "admin"
|
|
20569
|
-
}), method(object({
|
|
20668
|
+
}), method(object({
|
|
20669
|
+
id: string(),
|
|
20670
|
+
force: boolean().optional()
|
|
20671
|
+
}), _void(), {
|
|
20570
20672
|
kind: "mutation",
|
|
20571
20673
|
auth: "admin"
|
|
20572
20674
|
}), method(object({ id: string() }), object({
|
|
@@ -31039,6 +31141,12 @@ Object.freeze({
|
|
|
31039
31141
|
addonId: null,
|
|
31040
31142
|
access: "create"
|
|
31041
31143
|
},
|
|
31144
|
+
"pipelineAnalytics.countUnstampedEventMedia": {
|
|
31145
|
+
capName: "pipeline-analytics",
|
|
31146
|
+
capScope: "device",
|
|
31147
|
+
addonId: null,
|
|
31148
|
+
access: "view"
|
|
31149
|
+
},
|
|
31042
31150
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
31043
31151
|
capName: "pipeline-analytics",
|
|
31044
31152
|
capScope: "device",
|
package/dist/smtp.addon.mjs
CHANGED
|
@@ -8058,18 +8058,61 @@ var RelocateFootageInputSchema = object({
|
|
|
8058
8058
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
8059
8059
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
8060
8060
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
8061
|
+
/**
|
|
8062
|
+
* What a `relocateMedia` pass DOES. One engine, three passes — never a second
|
|
8063
|
+
* mover (the engine already walks both collections with a timestamp cursor and
|
|
8064
|
+
* already has a stamp-without-copy path).
|
|
8065
|
+
*
|
|
8066
|
+
* - `move` — the default and the historical behaviour: event-media and
|
|
8067
|
+
* retrain blobs move to `toLocationId` and their rows are
|
|
8068
|
+
* stamped. The enrolled gallery is skipped (D197).
|
|
8069
|
+
* - `seal` — ROWS ONLY, no bytes. Every row whose `locationId` is NULL is
|
|
8070
|
+
* stamped with `toLocationId`. `toLocationId` here is the id the
|
|
8071
|
+
* bytes ALREADY sit on — today's `eventMedia` default — because
|
|
8072
|
+
* a NULL row means "wherever `eventMedia` points *now*", and the
|
|
8073
|
+
* instant a repoint moves that pointer the row reads from the
|
|
8074
|
+
* new disk while its bytes are on the old one.
|
|
8075
|
+
* - `gallery` — the inverse selection of `move`: ONLY the retention-exempt
|
|
8076
|
+
* (enrolled-gallery) rows, which `move` deliberately skips.
|
|
8077
|
+
* `galleryMedia` is `cardinality: 'single'`, so this pass can
|
|
8078
|
+
* never run beside a live second location: it is stop-the-world
|
|
8079
|
+
* by construction, which is acceptable only because the gallery
|
|
8080
|
+
* is a few KB per enrolled sample.
|
|
8081
|
+
*/
|
|
8082
|
+
var MediaRelocateModeSchema = _enum([
|
|
8083
|
+
"move",
|
|
8084
|
+
"seal",
|
|
8085
|
+
"gallery"
|
|
8086
|
+
]);
|
|
8061
8087
|
var RelocateMediaInputSchema = object({
|
|
8062
8088
|
toLocationId: string(),
|
|
8063
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8089
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8090
|
+
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8091
|
+
mode: MediaRelocateModeSchema.optional()
|
|
8092
|
+
});
|
|
8093
|
+
/** How many rows still carry NO `locationId` — the population a repoint would
|
|
8094
|
+
* silently re-aim at a disk that does not hold their bytes. Zero is the only
|
|
8095
|
+
* value that permits a non-blocking `eventMedia` cutover. */
|
|
8096
|
+
var UnstampedEventMediaCountSchema = object({
|
|
8097
|
+
media: number().int().nonnegative(),
|
|
8098
|
+
retrainFrames: number().int().nonnegative(),
|
|
8099
|
+
total: number().int().nonnegative()
|
|
8064
8100
|
});
|
|
8065
8101
|
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
8066
|
-
/** The independently selectable logical storage classes
|
|
8067
|
-
*
|
|
8068
|
-
*
|
|
8102
|
+
/** The independently selectable logical storage classes — every class
|
|
8103
|
+
* `storage.listLocationDeclarations` reports, so an operator never meets a
|
|
8104
|
+
* Zod enum error where they should meet an explanation.
|
|
8105
|
+
*
|
|
8106
|
+
* `recordings` encompasses the high and mid segment profiles; `recordingsLow`
|
|
8107
|
+
* is low segments; `eventMedia` is post-analysis blobs; `galleryMedia` is the
|
|
8108
|
+
* enrolled gallery; `backups` is the system backup archive. The last two have
|
|
8109
|
+
* their own rules — see {@link StorageMigrationFindingCodeSchema}. */
|
|
8069
8110
|
var StorageMigrationClassSchema = _enum([
|
|
8070
8111
|
"recordings",
|
|
8071
8112
|
"recordingsLow",
|
|
8072
|
-
"eventMedia"
|
|
8113
|
+
"eventMedia",
|
|
8114
|
+
"backups",
|
|
8115
|
+
"galleryMedia"
|
|
8073
8116
|
]);
|
|
8074
8117
|
/** A destination is always an existing, fully-qualified location id. The
|
|
8075
8118
|
* migration API intentionally never changes a source location's `basePath`:
|
|
@@ -8077,20 +8120,56 @@ var StorageMigrationClassSchema = _enum([
|
|
|
8077
8120
|
var StorageMigrationDestinationsSchema = object({
|
|
8078
8121
|
recordings: string().min(1).optional(),
|
|
8079
8122
|
recordingsLow: string().min(1).optional(),
|
|
8080
|
-
eventMedia: string().min(1).optional()
|
|
8123
|
+
eventMedia: string().min(1).optional(),
|
|
8124
|
+
backups: string().min(1).optional(),
|
|
8125
|
+
galleryMedia: string().min(1).optional()
|
|
8081
8126
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8127
|
+
/**
|
|
8128
|
+
* How a migration sequences the cutover against the byte move.
|
|
8129
|
+
*
|
|
8130
|
+
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
8131
|
+
* resume. Recording is stopped for the whole move. Right
|
|
8132
|
+
* for a small or a cold class, and the only legal mode for
|
|
8133
|
+
* a `cardinality: 'single'` class.
|
|
8134
|
+
* - `nonBlocking` — repoint FIRST, drain behind: seal, pause, repoint,
|
|
8135
|
+
* refresh, resume, then move the past with everything
|
|
8136
|
+
* running. The pause is three bounded instants (a detach +
|
|
8137
|
+
* attach round, a write-gate drain, a lease) instead of one
|
|
8138
|
+
* bounded by bytes. 1.09 TB at 7–14 MB/s is thirty hours of
|
|
8139
|
+
* stopped recording under `blocking`; the same move is
|
|
8140
|
+
* seconds of stopped recording under `nonBlocking`.
|
|
8141
|
+
*
|
|
8142
|
+
* The mode is on the JOB, not only on the input, because `status` is where an
|
|
8143
|
+
* operator finds out which one is running.
|
|
8144
|
+
*/
|
|
8145
|
+
var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
8082
8146
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8083
8147
|
var StorageMigrationInputSchema = object({
|
|
8084
8148
|
destinations: StorageMigrationDestinationsSchema,
|
|
8085
|
-
throttleMbps: number().min(1).max(1e3).optional()
|
|
8149
|
+
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8150
|
+
/** Omitted = `blocking`, which stays the default. */
|
|
8151
|
+
mode: StorageMigrationModeSchema.optional()
|
|
8086
8152
|
});
|
|
8087
|
-
/**
|
|
8088
|
-
*
|
|
8089
|
-
*
|
|
8153
|
+
/**
|
|
8154
|
+
* The durable coordinator state machine.
|
|
8155
|
+
*
|
|
8156
|
+
* `blocking`:
|
|
8157
|
+
* planning → pausing → moving → verifying → repointing → refreshing → resuming → done
|
|
8158
|
+
*
|
|
8159
|
+
* `nonBlocking`:
|
|
8160
|
+
* planning → sealing → pausing → repointing → refreshing → resuming → draining → verifying → done
|
|
8161
|
+
*
|
|
8162
|
+
* Same phases, different order plus two new ones — not a second mover.
|
|
8163
|
+
* `sealing` closes the `eventMedia` NULL-row hole BEFORE anything is paused;
|
|
8164
|
+
* `draining` runs the same movers UNLEASED, after every writer is back up.
|
|
8165
|
+
* `repointing` is still the only phase that changes a default location.
|
|
8166
|
+
*/
|
|
8090
8167
|
var StorageMigrationPhaseSchema = _enum([
|
|
8091
8168
|
"planning",
|
|
8169
|
+
"sealing",
|
|
8092
8170
|
"pausing",
|
|
8093
8171
|
"moving",
|
|
8172
|
+
"draining",
|
|
8094
8173
|
"verifying",
|
|
8095
8174
|
"repointing",
|
|
8096
8175
|
"refreshing",
|
|
@@ -8115,6 +8194,9 @@ var StorageMigrationMoveSchema = object({
|
|
|
8115
8194
|
var StorageMigrationJobSchema = object({
|
|
8116
8195
|
jobId: string(),
|
|
8117
8196
|
phase: StorageMigrationPhaseSchema,
|
|
8197
|
+
/** Which order this job is running. `status` is the only place an operator
|
|
8198
|
+
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8199
|
+
mode: StorageMigrationModeSchema,
|
|
8118
8200
|
destinations: StorageMigrationDestinationsSchema,
|
|
8119
8201
|
throttleMbps: number(),
|
|
8120
8202
|
moves: array(StorageMigrationMoveSchema),
|
|
@@ -8127,13 +8209,30 @@ var StorageMigrationJobSchema = object({
|
|
|
8127
8209
|
finishedAt: number().nullable(),
|
|
8128
8210
|
error: string().nullable()
|
|
8129
8211
|
});
|
|
8212
|
+
var StorageMigrationFindingSchema = object({
|
|
8213
|
+
code: _enum([
|
|
8214
|
+
"sharesDeviceWithSource",
|
|
8215
|
+
"deviceIdentityUnknown",
|
|
8216
|
+
"unstampedEventMediaRows",
|
|
8217
|
+
"blockingOnly",
|
|
8218
|
+
"noMover"
|
|
8219
|
+
]),
|
|
8220
|
+
storageClass: StorageMigrationClassSchema,
|
|
8221
|
+
/** Human-readable, already carrying the ids and counts. */
|
|
8222
|
+
message: string()
|
|
8223
|
+
});
|
|
8130
8224
|
var StorageMigrationPlanSchema = object({
|
|
8131
8225
|
destinations: StorageMigrationDestinationsSchema,
|
|
8226
|
+
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8227
|
+
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8228
|
+
* it. */
|
|
8229
|
+
mode: StorageMigrationModeSchema,
|
|
8132
8230
|
moves: array(object({
|
|
8133
8231
|
storageClass: StorageMigrationClassSchema,
|
|
8134
8232
|
fromLocationId: string(),
|
|
8135
8233
|
toLocationId: string()
|
|
8136
|
-
}))
|
|
8234
|
+
})),
|
|
8235
|
+
findings: array(StorageMigrationFindingSchema)
|
|
8137
8236
|
});
|
|
8138
8237
|
/**
|
|
8139
8238
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
@@ -18644,7 +18743,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
18644
18743
|
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
18645
18744
|
kind: "mutation",
|
|
18646
18745
|
auth: "admin"
|
|
18647
|
-
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
18746
|
+
}), method(object({}), UnstampedEventMediaCountSchema, { auth: "admin" }), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
18648
18747
|
kind: "query",
|
|
18649
18748
|
auth: "admin"
|
|
18650
18749
|
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
@@ -20564,7 +20663,10 @@ method(object({
|
|
|
20564
20663
|
}), StorageLocationSchema, {
|
|
20565
20664
|
kind: "mutation",
|
|
20566
20665
|
auth: "admin"
|
|
20567
|
-
}), method(object({
|
|
20666
|
+
}), method(object({
|
|
20667
|
+
id: string(),
|
|
20668
|
+
force: boolean().optional()
|
|
20669
|
+
}), _void(), {
|
|
20568
20670
|
kind: "mutation",
|
|
20569
20671
|
auth: "admin"
|
|
20570
20672
|
}), method(object({ id: string() }), object({
|
|
@@ -31037,6 +31139,12 @@ Object.freeze({
|
|
|
31037
31139
|
addonId: null,
|
|
31038
31140
|
access: "create"
|
|
31039
31141
|
},
|
|
31142
|
+
"pipelineAnalytics.countUnstampedEventMedia": {
|
|
31143
|
+
capName: "pipeline-analytics",
|
|
31144
|
+
capScope: "device",
|
|
31145
|
+
addonId: null,
|
|
31146
|
+
access: "view"
|
|
31147
|
+
},
|
|
31040
31148
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
31041
31149
|
capName: "pipeline-analytics",
|
|
31042
31150
|
capScope: "device",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-smtp-nodemailer",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.42",
|
|
4
4
|
"description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by magic-link login + notifier addons.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|