@camstack/addon-remote-storage 1.2.37 → 1.2.38
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-OO8jwvqy.js → shared-B9LrdyaK.js} +142 -1
- package/dist/{shared-Bo03e3ba.mjs → shared-DgwL7dV-.mjs} +142 -1
- 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-B9LrdyaK.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-DgwL7dV-.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-B9LrdyaK.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-DgwL7dV-.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
|
|
@@ -13211,6 +13211,114 @@ method(LogEntrySchema, _void(), { kind: "mutation" }), method(object({
|
|
|
13211
13211
|
limit: number().optional(),
|
|
13212
13212
|
tags: record(string(), string()).optional()
|
|
13213
13213
|
}), array(LogEntrySchema).readonly());
|
|
13214
|
+
/**
|
|
13215
|
+
* `failure-contribution` — the capability an addon reports its OWN losses
|
|
13216
|
+
* through, per camera, with the denominator attached. It stores nothing.
|
|
13217
|
+
*
|
|
13218
|
+
* ## The twin of `load-contribution`, and why it is a twin and not a field
|
|
13219
|
+
*
|
|
13220
|
+
* `load-contribution` answers *what did this camera COST*. This answers *what
|
|
13221
|
+
* did this camera LOSE*. The reporting discipline is identical and deliberately
|
|
13222
|
+
* copied: the contributor reports what it already knows, hub-main adds only
|
|
13223
|
+
* `addonId`, nothing needs global knowledge, and there is no central list for
|
|
13224
|
+
* somebody to forget to edit.
|
|
13225
|
+
*
|
|
13226
|
+
* They are not merged, because their invariants are opposites:
|
|
13227
|
+
*
|
|
13228
|
+
* - a `load-contribution` measurement is **absent, never zero** — a zero would
|
|
13229
|
+
* claim a camera cost nothing, which is a measurement nobody made;
|
|
13230
|
+
* - a `failure-contribution` zero is the **most valuable value on the
|
|
13231
|
+
* surface** — `attempts: 400, succeeded: 400` is the proof a fix landed,
|
|
13232
|
+
* and it is exactly what an absent entry cannot say.
|
|
13233
|
+
*
|
|
13234
|
+
* Putting a loss counter on a cost entry would also break the reconciliation
|
|
13235
|
+
* that gives `load-contribution` its point: contributions are subtracted from
|
|
13236
|
+
* `metrics.node-processes-snapshot` to find processes nobody claims. A failure
|
|
13237
|
+
* has no process.
|
|
13238
|
+
*
|
|
13239
|
+
* ## Why not a log line, since the counters already exist
|
|
13240
|
+
*
|
|
13241
|
+
* Several of these paths already counted themselves — `CaptureScheduler`'s
|
|
13242
|
+
* per-device window, `KeyFrameCaptureLog`, `bumpCropMetric`. Every one of them
|
|
13243
|
+
* ends in a log line, and a log line is the thing the operator asked to stop
|
|
13244
|
+
* needing: *"possiamo armare questi errori intanto? Così al prossimo giro
|
|
13245
|
+
* ricontrolliamo tutti questi punti"*. Reading them meant grepping Loki and
|
|
13246
|
+
* hand-correlating timestamps, which is how a 22% thumbnail gap and a 3-hour
|
|
13247
|
+
* media blackout were both diagnosed. The counters stay; this is where they can
|
|
13248
|
+
* be READ.
|
|
13249
|
+
*
|
|
13250
|
+
* ## The rate is served with its denominator or not at all
|
|
13251
|
+
*
|
|
13252
|
+
* Every entry carries `attempts` and `succeeded`. A miss count alone is
|
|
13253
|
+
* unreadable: on 2026-08-28 the enrichment-crop miss count read as "35x worse
|
|
13254
|
+
* than yesterday" and was **flat across twelve hours** once divided by the
|
|
13255
|
+
* successes on the same path. A surface that publishes only the numerator
|
|
13256
|
+
* reproduces that mistake on every read.
|
|
13257
|
+
*
|
|
13258
|
+
* ## Shape
|
|
13259
|
+
*
|
|
13260
|
+
* Copied from `load-contribution.cap.ts` (`mode: 'collection'`,
|
|
13261
|
+
* `internal: true`, `mount: { kind: 'skip' }`): no tRPC route of its own and no
|
|
13262
|
+
* generated hooks, while `addons.listCapabilityProviders` still enumerates it
|
|
13263
|
+
* and the hub's `CapabilityRegistry` still holds an RPC proxy per provider — so
|
|
13264
|
+
* a forked runner's entries reach hub-main over transport that already exists.
|
|
13265
|
+
* No new UDS message, no second registry (D3). The operator reads the assembled
|
|
13266
|
+
* result through `system.getFailureContributions`.
|
|
13267
|
+
*/
|
|
13268
|
+
var FailureReasonCountSchema = object({
|
|
13269
|
+
/**
|
|
13270
|
+
* Why the attempt did not land, in the contributor's own vocabulary —
|
|
13271
|
+
* `worker-lease-gone`, `queue-overflow`, `timeout`, `empty-read`. The same
|
|
13272
|
+
* strings that already appear in this repo's logs and, where one exists, the
|
|
13273
|
+
* same string the per-track `previewMissReason` records (D276): a second
|
|
13274
|
+
* vocabulary for the same loss would make the row and the counter
|
|
13275
|
+
* un-joinable.
|
|
13276
|
+
*/
|
|
13277
|
+
reason: string(),
|
|
13278
|
+
count: number().int().nonnegative()
|
|
13279
|
+
});
|
|
13280
|
+
var FailureContributionSchema = object({
|
|
13281
|
+
/**
|
|
13282
|
+
* The failing path — `enrichment-crop`, `inference`, `plate-ocr`,
|
|
13283
|
+
* `person-over-vehicle`. Free text, for the reason `load-contribution` keeps
|
|
13284
|
+
* `unit` free: the families are owned by different addons and a shared enum
|
|
13285
|
+
* is a central list that rots invisibly.
|
|
13286
|
+
*/
|
|
13287
|
+
family: string(),
|
|
13288
|
+
/**
|
|
13289
|
+
* The NUMERIC device id — the same value every log line carries as
|
|
13290
|
+
* `tags.deviceId`. Never nullable and never absent: a contributor that
|
|
13291
|
+
* cannot name the camera must not emit the entry, because a fleet total
|
|
13292
|
+
* cannot answer the only question anybody asks of this surface.
|
|
13293
|
+
*/
|
|
13294
|
+
deviceId: number().int().positive(),
|
|
13295
|
+
/**
|
|
13296
|
+
* A second dimension inside the family: the model / step id for an inference
|
|
13297
|
+
* timeout, so "which camera AND which model" is one read. Absent when the
|
|
13298
|
+
* family has a single variant.
|
|
13299
|
+
*/
|
|
13300
|
+
variant: string().optional(),
|
|
13301
|
+
/**
|
|
13302
|
+
* Epoch ms this counter started — the INCARNATION MARKER. A consumer
|
|
13303
|
+
* differencing two reads must drop the interval when it changes, because the
|
|
13304
|
+
* counter restarted from zero in a respawned runner. Same discipline as
|
|
13305
|
+
* `LoadContribution.startedAtMs`.
|
|
13306
|
+
*/
|
|
13307
|
+
sinceMs: number(),
|
|
13308
|
+
/** Epoch ms it was read. `atMs - sinceMs` is the interval this covers. */
|
|
13309
|
+
atMs: number(),
|
|
13310
|
+
/**
|
|
13311
|
+
* THE DENOMINATOR — every attempt on this path for this camera in the
|
|
13312
|
+
* window. A failure count published without it is the mistake this schema
|
|
13313
|
+
* exists to make impossible.
|
|
13314
|
+
*/
|
|
13315
|
+
attempts: number().int().nonnegative(),
|
|
13316
|
+
/** Attempts that landed. `attempts - succeeded` is the loss. */
|
|
13317
|
+
succeeded: number().int().nonnegative(),
|
|
13318
|
+
/** The loss, partitioned. Sums to `attempts - succeeded`. */
|
|
13319
|
+
reasons: array(FailureReasonCountSchema).readonly()
|
|
13320
|
+
});
|
|
13321
|
+
method(_void(), array(FailureContributionSchema).readonly());
|
|
13214
13322
|
var LoadContributionSchema = object({
|
|
13215
13323
|
role: _enum([
|
|
13216
13324
|
"decode",
|
|
@@ -17723,6 +17831,20 @@ var TrackSchema = object({
|
|
|
17723
17831
|
* `=== true` and render nothing otherwise — never infer "no rider".
|
|
17724
17832
|
*/
|
|
17725
17833
|
hasRider: boolean().optional(),
|
|
17834
|
+
/**
|
|
17835
|
+
* WHY this track ended without a NATIVE best-shot tile
|
|
17836
|
+
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md)) —
|
|
17837
|
+
* a composed token line (`no-key-frame capture=keyframe:native-missx4`,
|
|
17838
|
+
* `derive-returned-null tile=standin`, …) written at close and CLEARED by
|
|
17839
|
+
* the late-keyFrame upgrade when a native tile lands after all. The
|
|
17840
|
+
* operator-facing answer to "perché manca l'immagine?" on a track whose
|
|
17841
|
+
* tile is a face/plate stand-in, a raster crop, or an icon.
|
|
17842
|
+
*
|
|
17843
|
+
* **Absent ≠ "missed silently"**: a row written before the column, a hub
|
|
17844
|
+
* that predates the field, and every track whose tile landed native all
|
|
17845
|
+
* omit it. Render nothing when absent.
|
|
17846
|
+
*/
|
|
17847
|
+
previewMissReason: string().optional(),
|
|
17726
17848
|
...TrackFlagFields,
|
|
17727
17849
|
...TrackRetrainFields
|
|
17728
17850
|
});
|
|
@@ -27009,6 +27131,13 @@ var LoggingSettingsPatchSchema = object({
|
|
|
27009
27131
|
* anyone but its owner.
|
|
27010
27132
|
*/
|
|
27011
27133
|
var ReportedLoadContributionSchema = LoadContributionSchema.extend({ addonId: string() });
|
|
27134
|
+
/**
|
|
27135
|
+
* One per-camera failure counter, plus WHO reported it.
|
|
27136
|
+
*
|
|
27137
|
+
* Same rule as {@link ReportedLoadContributionSchema}: `addonId` is stamped by
|
|
27138
|
+
* the hub as it enumerates providers, never by the contributor.
|
|
27139
|
+
*/
|
|
27140
|
+
var ReportedFailureContributionSchema = FailureContributionSchema.extend({ addonId: string() });
|
|
27012
27141
|
var GetLoggingSettingsInputSchema = object({
|
|
27013
27142
|
scopeNodeId: string().optional(),
|
|
27014
27143
|
/**
|
|
@@ -27067,7 +27196,7 @@ method(_void(), FeatureManifestSchema), method(_void(), HealthStatusSchema), met
|
|
|
27067
27196
|
}), method(_void(), SiteLocationStatusSchema, {
|
|
27068
27197
|
kind: "mutation",
|
|
27069
27198
|
auth: "admin"
|
|
27070
|
-
}), method(_void(), RequestCensusStatusSchema, { auth: "admin" }), method(_void(), array(ReportedLoadContributionSchema).readonly(), { auth: "admin" }), method(GetLoggingSettingsInputSchema, LoggingSettingsStateSchema, { auth: "admin" }), method(SetLoggingSettingsInputSchema, LoggingSettingsStateSchema, {
|
|
27199
|
+
}), method(_void(), RequestCensusStatusSchema, { auth: "admin" }), method(_void(), array(ReportedLoadContributionSchema).readonly(), { auth: "admin" }), method(_void(), array(ReportedFailureContributionSchema).readonly(), { auth: "admin" }), method(GetLoggingSettingsInputSchema, LoggingSettingsStateSchema, { auth: "admin" }), method(SetLoggingSettingsInputSchema, LoggingSettingsStateSchema, {
|
|
27071
27200
|
kind: "mutation",
|
|
27072
27201
|
auth: "admin"
|
|
27073
27202
|
});
|
|
@@ -29649,6 +29778,12 @@ Object.freeze({
|
|
|
29649
29778
|
addonId: null,
|
|
29650
29779
|
access: "create"
|
|
29651
29780
|
},
|
|
29781
|
+
"failureContribution.list": {
|
|
29782
|
+
capName: "failure-contribution",
|
|
29783
|
+
capScope: "system",
|
|
29784
|
+
addonId: null,
|
|
29785
|
+
access: "view"
|
|
29786
|
+
},
|
|
29652
29787
|
"fanControl.setDirection": {
|
|
29653
29788
|
capName: "fan-control",
|
|
29654
29789
|
capScope: "device",
|
|
@@ -32955,6 +33090,12 @@ Object.freeze({
|
|
|
32955
33090
|
addonId: null,
|
|
32956
33091
|
access: "create"
|
|
32957
33092
|
},
|
|
33093
|
+
"system.getFailureContributions": {
|
|
33094
|
+
capName: "system",
|
|
33095
|
+
capScope: "system",
|
|
33096
|
+
addonId: null,
|
|
33097
|
+
access: "view"
|
|
33098
|
+
},
|
|
32958
33099
|
"system.getLoadContributions": {
|
|
32959
33100
|
capName: "system",
|
|
32960
33101
|
capScope: "system",
|
|
@@ -13188,6 +13188,114 @@ method(LogEntrySchema, _void(), { kind: "mutation" }), method(object({
|
|
|
13188
13188
|
limit: number().optional(),
|
|
13189
13189
|
tags: record(string(), string()).optional()
|
|
13190
13190
|
}), array(LogEntrySchema).readonly());
|
|
13191
|
+
/**
|
|
13192
|
+
* `failure-contribution` — the capability an addon reports its OWN losses
|
|
13193
|
+
* through, per camera, with the denominator attached. It stores nothing.
|
|
13194
|
+
*
|
|
13195
|
+
* ## The twin of `load-contribution`, and why it is a twin and not a field
|
|
13196
|
+
*
|
|
13197
|
+
* `load-contribution` answers *what did this camera COST*. This answers *what
|
|
13198
|
+
* did this camera LOSE*. The reporting discipline is identical and deliberately
|
|
13199
|
+
* copied: the contributor reports what it already knows, hub-main adds only
|
|
13200
|
+
* `addonId`, nothing needs global knowledge, and there is no central list for
|
|
13201
|
+
* somebody to forget to edit.
|
|
13202
|
+
*
|
|
13203
|
+
* They are not merged, because their invariants are opposites:
|
|
13204
|
+
*
|
|
13205
|
+
* - a `load-contribution` measurement is **absent, never zero** — a zero would
|
|
13206
|
+
* claim a camera cost nothing, which is a measurement nobody made;
|
|
13207
|
+
* - a `failure-contribution` zero is the **most valuable value on the
|
|
13208
|
+
* surface** — `attempts: 400, succeeded: 400` is the proof a fix landed,
|
|
13209
|
+
* and it is exactly what an absent entry cannot say.
|
|
13210
|
+
*
|
|
13211
|
+
* Putting a loss counter on a cost entry would also break the reconciliation
|
|
13212
|
+
* that gives `load-contribution` its point: contributions are subtracted from
|
|
13213
|
+
* `metrics.node-processes-snapshot` to find processes nobody claims. A failure
|
|
13214
|
+
* has no process.
|
|
13215
|
+
*
|
|
13216
|
+
* ## Why not a log line, since the counters already exist
|
|
13217
|
+
*
|
|
13218
|
+
* Several of these paths already counted themselves — `CaptureScheduler`'s
|
|
13219
|
+
* per-device window, `KeyFrameCaptureLog`, `bumpCropMetric`. Every one of them
|
|
13220
|
+
* ends in a log line, and a log line is the thing the operator asked to stop
|
|
13221
|
+
* needing: *"possiamo armare questi errori intanto? Così al prossimo giro
|
|
13222
|
+
* ricontrolliamo tutti questi punti"*. Reading them meant grepping Loki and
|
|
13223
|
+
* hand-correlating timestamps, which is how a 22% thumbnail gap and a 3-hour
|
|
13224
|
+
* media blackout were both diagnosed. The counters stay; this is where they can
|
|
13225
|
+
* be READ.
|
|
13226
|
+
*
|
|
13227
|
+
* ## The rate is served with its denominator or not at all
|
|
13228
|
+
*
|
|
13229
|
+
* Every entry carries `attempts` and `succeeded`. A miss count alone is
|
|
13230
|
+
* unreadable: on 2026-08-28 the enrichment-crop miss count read as "35x worse
|
|
13231
|
+
* than yesterday" and was **flat across twelve hours** once divided by the
|
|
13232
|
+
* successes on the same path. A surface that publishes only the numerator
|
|
13233
|
+
* reproduces that mistake on every read.
|
|
13234
|
+
*
|
|
13235
|
+
* ## Shape
|
|
13236
|
+
*
|
|
13237
|
+
* Copied from `load-contribution.cap.ts` (`mode: 'collection'`,
|
|
13238
|
+
* `internal: true`, `mount: { kind: 'skip' }`): no tRPC route of its own and no
|
|
13239
|
+
* generated hooks, while `addons.listCapabilityProviders` still enumerates it
|
|
13240
|
+
* and the hub's `CapabilityRegistry` still holds an RPC proxy per provider — so
|
|
13241
|
+
* a forked runner's entries reach hub-main over transport that already exists.
|
|
13242
|
+
* No new UDS message, no second registry (D3). The operator reads the assembled
|
|
13243
|
+
* result through `system.getFailureContributions`.
|
|
13244
|
+
*/
|
|
13245
|
+
var FailureReasonCountSchema = object({
|
|
13246
|
+
/**
|
|
13247
|
+
* Why the attempt did not land, in the contributor's own vocabulary —
|
|
13248
|
+
* `worker-lease-gone`, `queue-overflow`, `timeout`, `empty-read`. The same
|
|
13249
|
+
* strings that already appear in this repo's logs and, where one exists, the
|
|
13250
|
+
* same string the per-track `previewMissReason` records (D276): a second
|
|
13251
|
+
* vocabulary for the same loss would make the row and the counter
|
|
13252
|
+
* un-joinable.
|
|
13253
|
+
*/
|
|
13254
|
+
reason: string(),
|
|
13255
|
+
count: number().int().nonnegative()
|
|
13256
|
+
});
|
|
13257
|
+
var FailureContributionSchema = object({
|
|
13258
|
+
/**
|
|
13259
|
+
* The failing path — `enrichment-crop`, `inference`, `plate-ocr`,
|
|
13260
|
+
* `person-over-vehicle`. Free text, for the reason `load-contribution` keeps
|
|
13261
|
+
* `unit` free: the families are owned by different addons and a shared enum
|
|
13262
|
+
* is a central list that rots invisibly.
|
|
13263
|
+
*/
|
|
13264
|
+
family: string(),
|
|
13265
|
+
/**
|
|
13266
|
+
* The NUMERIC device id — the same value every log line carries as
|
|
13267
|
+
* `tags.deviceId`. Never nullable and never absent: a contributor that
|
|
13268
|
+
* cannot name the camera must not emit the entry, because a fleet total
|
|
13269
|
+
* cannot answer the only question anybody asks of this surface.
|
|
13270
|
+
*/
|
|
13271
|
+
deviceId: number().int().positive(),
|
|
13272
|
+
/**
|
|
13273
|
+
* A second dimension inside the family: the model / step id for an inference
|
|
13274
|
+
* timeout, so "which camera AND which model" is one read. Absent when the
|
|
13275
|
+
* family has a single variant.
|
|
13276
|
+
*/
|
|
13277
|
+
variant: string().optional(),
|
|
13278
|
+
/**
|
|
13279
|
+
* Epoch ms this counter started — the INCARNATION MARKER. A consumer
|
|
13280
|
+
* differencing two reads must drop the interval when it changes, because the
|
|
13281
|
+
* counter restarted from zero in a respawned runner. Same discipline as
|
|
13282
|
+
* `LoadContribution.startedAtMs`.
|
|
13283
|
+
*/
|
|
13284
|
+
sinceMs: number(),
|
|
13285
|
+
/** Epoch ms it was read. `atMs - sinceMs` is the interval this covers. */
|
|
13286
|
+
atMs: number(),
|
|
13287
|
+
/**
|
|
13288
|
+
* THE DENOMINATOR — every attempt on this path for this camera in the
|
|
13289
|
+
* window. A failure count published without it is the mistake this schema
|
|
13290
|
+
* exists to make impossible.
|
|
13291
|
+
*/
|
|
13292
|
+
attempts: number().int().nonnegative(),
|
|
13293
|
+
/** Attempts that landed. `attempts - succeeded` is the loss. */
|
|
13294
|
+
succeeded: number().int().nonnegative(),
|
|
13295
|
+
/** The loss, partitioned. Sums to `attempts - succeeded`. */
|
|
13296
|
+
reasons: array(FailureReasonCountSchema).readonly()
|
|
13297
|
+
});
|
|
13298
|
+
method(_void(), array(FailureContributionSchema).readonly());
|
|
13191
13299
|
var LoadContributionSchema = object({
|
|
13192
13300
|
role: _enum([
|
|
13193
13301
|
"decode",
|
|
@@ -17700,6 +17808,20 @@ var TrackSchema = object({
|
|
|
17700
17808
|
* `=== true` and render nothing otherwise — never infer "no rider".
|
|
17701
17809
|
*/
|
|
17702
17810
|
hasRider: boolean().optional(),
|
|
17811
|
+
/**
|
|
17812
|
+
* WHY this track ended without a NATIVE best-shot tile
|
|
17813
|
+
* ([D276](../decisions/adr-0276-a-stand-in-tile-is-provisional-and-a-close-says-why.md)) —
|
|
17814
|
+
* a composed token line (`no-key-frame capture=keyframe:native-missx4`,
|
|
17815
|
+
* `derive-returned-null tile=standin`, …) written at close and CLEARED by
|
|
17816
|
+
* the late-keyFrame upgrade when a native tile lands after all. The
|
|
17817
|
+
* operator-facing answer to "perché manca l'immagine?" on a track whose
|
|
17818
|
+
* tile is a face/plate stand-in, a raster crop, or an icon.
|
|
17819
|
+
*
|
|
17820
|
+
* **Absent ≠ "missed silently"**: a row written before the column, a hub
|
|
17821
|
+
* that predates the field, and every track whose tile landed native all
|
|
17822
|
+
* omit it. Render nothing when absent.
|
|
17823
|
+
*/
|
|
17824
|
+
previewMissReason: string().optional(),
|
|
17703
17825
|
...TrackFlagFields,
|
|
17704
17826
|
...TrackRetrainFields
|
|
17705
17827
|
});
|
|
@@ -26986,6 +27108,13 @@ var LoggingSettingsPatchSchema = object({
|
|
|
26986
27108
|
* anyone but its owner.
|
|
26987
27109
|
*/
|
|
26988
27110
|
var ReportedLoadContributionSchema = LoadContributionSchema.extend({ addonId: string() });
|
|
27111
|
+
/**
|
|
27112
|
+
* One per-camera failure counter, plus WHO reported it.
|
|
27113
|
+
*
|
|
27114
|
+
* Same rule as {@link ReportedLoadContributionSchema}: `addonId` is stamped by
|
|
27115
|
+
* the hub as it enumerates providers, never by the contributor.
|
|
27116
|
+
*/
|
|
27117
|
+
var ReportedFailureContributionSchema = FailureContributionSchema.extend({ addonId: string() });
|
|
26989
27118
|
var GetLoggingSettingsInputSchema = object({
|
|
26990
27119
|
scopeNodeId: string().optional(),
|
|
26991
27120
|
/**
|
|
@@ -27044,7 +27173,7 @@ method(_void(), FeatureManifestSchema), method(_void(), HealthStatusSchema), met
|
|
|
27044
27173
|
}), method(_void(), SiteLocationStatusSchema, {
|
|
27045
27174
|
kind: "mutation",
|
|
27046
27175
|
auth: "admin"
|
|
27047
|
-
}), method(_void(), RequestCensusStatusSchema, { auth: "admin" }), method(_void(), array(ReportedLoadContributionSchema).readonly(), { auth: "admin" }), method(GetLoggingSettingsInputSchema, LoggingSettingsStateSchema, { auth: "admin" }), method(SetLoggingSettingsInputSchema, LoggingSettingsStateSchema, {
|
|
27176
|
+
}), method(_void(), RequestCensusStatusSchema, { auth: "admin" }), method(_void(), array(ReportedLoadContributionSchema).readonly(), { auth: "admin" }), method(_void(), array(ReportedFailureContributionSchema).readonly(), { auth: "admin" }), method(GetLoggingSettingsInputSchema, LoggingSettingsStateSchema, { auth: "admin" }), method(SetLoggingSettingsInputSchema, LoggingSettingsStateSchema, {
|
|
27048
27177
|
kind: "mutation",
|
|
27049
27178
|
auth: "admin"
|
|
27050
27179
|
});
|
|
@@ -29626,6 +29755,12 @@ Object.freeze({
|
|
|
29626
29755
|
addonId: null,
|
|
29627
29756
|
access: "create"
|
|
29628
29757
|
},
|
|
29758
|
+
"failureContribution.list": {
|
|
29759
|
+
capName: "failure-contribution",
|
|
29760
|
+
capScope: "system",
|
|
29761
|
+
addonId: null,
|
|
29762
|
+
access: "view"
|
|
29763
|
+
},
|
|
29629
29764
|
"fanControl.setDirection": {
|
|
29630
29765
|
capName: "fan-control",
|
|
29631
29766
|
capScope: "device",
|
|
@@ -32932,6 +33067,12 @@ Object.freeze({
|
|
|
32932
33067
|
addonId: null,
|
|
32933
33068
|
access: "create"
|
|
32934
33069
|
},
|
|
33070
|
+
"system.getFailureContributions": {
|
|
33071
|
+
capName: "system",
|
|
33072
|
+
capScope: "system",
|
|
33073
|
+
addonId: null,
|
|
33074
|
+
access: "view"
|
|
33075
|
+
},
|
|
32935
33076
|
"system.getLoadContributions": {
|
|
32936
33077
|
capName: "system",
|
|
32937
33078
|
capScope: "system",
|
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-B9LrdyaK.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-DgwL7dV-.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