camstack 1.2.110 → 1.2.111
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.
|
@@ -17884,12 +17884,30 @@ var BackupDestinationInfoSchema = external_exports.object({
|
|
|
17884
17884
|
lastSuccessAt: external_exports.number().optional(),
|
|
17885
17885
|
/** Newest-archive size from `manifests.json`, or undefined. */
|
|
17886
17886
|
lastSuccessSizeBytes: external_exports.number().optional(),
|
|
17887
|
-
/**
|
|
17887
|
+
/**
|
|
17888
|
+
* Cron cadence(s) of the ENABLED schedules that fan out to this
|
|
17889
|
+
* destination, comma-joined. Absent when no enabled schedule targets it
|
|
17890
|
+
* — a destination nothing is scheduled to write to must not advertise a
|
|
17891
|
+
* cadence (D384). This is never the `backup_destination_policies.cron`
|
|
17892
|
+
* column: that per-location cron has scheduled nothing since 2026-07-28
|
|
17893
|
+
* and reading it made a destination with a DISABLED schedule claim a
|
|
17894
|
+
* nightly run.
|
|
17895
|
+
*/
|
|
17888
17896
|
cron: external_exports.string().optional(),
|
|
17889
|
-
/** ms-epoch of next
|
|
17897
|
+
/** ms-epoch of the next firing across those schedules (earliest), if any. */
|
|
17890
17898
|
nextRunAt: external_exports.number().optional(),
|
|
17891
|
-
/**
|
|
17892
|
-
|
|
17899
|
+
/**
|
|
17900
|
+
* ms-epoch of the last time a run ATTEMPTED to write here — success or
|
|
17901
|
+
* failure. Never a success stamp: pair it with `lastSuccessAt` (the
|
|
17902
|
+
* newest archive that actually landed) and `lastError`.
|
|
17903
|
+
*/
|
|
17904
|
+
lastAttemptAt: external_exports.number().optional(),
|
|
17905
|
+
/**
|
|
17906
|
+
* Why the last attempt failed, verbatim. Absent when the last attempt
|
|
17907
|
+
* landed the archive. A destination that has never been written to has
|
|
17908
|
+
* neither this nor `lastAttemptAt`.
|
|
17909
|
+
*/
|
|
17910
|
+
lastError: external_exports.string().optional()
|
|
17893
17911
|
});
|
|
17894
17912
|
var BackupArchiveEntrySchema = external_exports.object({
|
|
17895
17913
|
id: external_exports.string(),
|
|
@@ -18011,8 +18029,16 @@ var BackupScheduleSchema = external_exports.object({
|
|
|
18011
18029
|
retentionCount: external_exports.number().int().min(1).max(1e3),
|
|
18012
18030
|
/** Optional subset of source locations to include; omitted = all. */
|
|
18013
18031
|
dataSources: external_exports.array(external_exports.string()).readonly().optional(),
|
|
18014
|
-
/**
|
|
18015
|
-
|
|
18032
|
+
/**
|
|
18033
|
+
* ms-epoch of the last tick that FIRED this schedule. Stamped before the
|
|
18034
|
+
* archive runs (it is the dedupe anchor), so it says "attempted", never
|
|
18035
|
+
* "succeeded" — a run refused by every destination stamps it too.
|
|
18036
|
+
*/
|
|
18037
|
+
lastAttemptAt: external_exports.number().optional(),
|
|
18038
|
+
/** ms-epoch of the last run of this schedule that landed at ≥1 destination. */
|
|
18039
|
+
lastSuccessAt: external_exports.number().optional(),
|
|
18040
|
+
/** Why the last fired run failed, verbatim. Absent when it succeeded. */
|
|
18041
|
+
lastError: external_exports.string().optional(),
|
|
18016
18042
|
/** ms-epoch of next computed firing (read-only, filled on list). */
|
|
18017
18043
|
nextRunAt: external_exports.number().optional()
|
|
18018
18044
|
});
|
|
@@ -18135,14 +18161,7 @@ var backupCapability = {
|
|
|
18135
18161
|
locationId: external_exports.string(),
|
|
18136
18162
|
enabled: external_exports.boolean(),
|
|
18137
18163
|
retentionCount: external_exports.number().int().min(1).max(1e3),
|
|
18138
|
-
label: external_exports.string().optional()
|
|
18139
|
-
/**
|
|
18140
|
-
* Per-destination cron expression. Empty string clears the
|
|
18141
|
-
* schedule (manual-only). Validated server-side via croner;
|
|
18142
|
-
* malformed expressions reject the upsert with an actionable
|
|
18143
|
-
* message.
|
|
18144
|
-
*/
|
|
18145
|
-
cron: external_exports.string().optional()
|
|
18164
|
+
label: external_exports.string().optional()
|
|
18146
18165
|
}), external_exports.void(), {
|
|
18147
18166
|
kind: "mutation",
|
|
18148
18167
|
auth: "admin"
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runDiscover
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-A3Y6T7EJ.js";
|
|
5
5
|
import "./chunk-LMMQX4CK.js";
|
|
6
6
|
|
|
7
7
|
// src/cli.ts
|
|
@@ -38,7 +38,7 @@ async function runServe(args) {
|
|
|
38
38
|
...typeof values.data === "string" ? { data: values.data } : {}
|
|
39
39
|
};
|
|
40
40
|
Object.assign(process.env, buildServeEnv(opts));
|
|
41
|
-
await import("./launcher-
|
|
41
|
+
await import("./launcher-D6HMI7VW.js");
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
// src/commands/agent.ts
|
|
@@ -83,7 +83,7 @@ async function runAgent(args) {
|
|
|
83
83
|
...typeof values.port === "string" ? { port: values.port } : {}
|
|
84
84
|
};
|
|
85
85
|
Object.assign(process.env, buildAgentEnv(opts));
|
|
86
|
-
await import("./launcher-
|
|
86
|
+
await import("./launcher-D6HMI7VW.js");
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
// src/commands/setup.ts
|
|
@@ -1130,7 +1130,7 @@ function isUnknown(_value) {
|
|
|
1130
1130
|
return true;
|
|
1131
1131
|
}
|
|
1132
1132
|
async function resolveServerInteractive(presetNamespace) {
|
|
1133
|
-
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-
|
|
1133
|
+
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-ER4G5QZV.js");
|
|
1134
1134
|
if (presetNamespace) {
|
|
1135
1135
|
const spinner4 = clack.spinner();
|
|
1136
1136
|
spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
|
|
@@ -23633,9 +23633,9 @@ var require_zod = __commonJS({
|
|
|
23633
23633
|
}
|
|
23634
23634
|
});
|
|
23635
23635
|
|
|
23636
|
-
// ../system/dist/dist-
|
|
23637
|
-
var
|
|
23638
|
-
"../system/dist/dist-
|
|
23636
|
+
// ../system/dist/dist-CcV3k-hD.js
|
|
23637
|
+
var require_dist_CcV3k_hD = __commonJS({
|
|
23638
|
+
"../system/dist/dist-CcV3k-hD.js"(exports) {
|
|
23639
23639
|
"use strict";
|
|
23640
23640
|
var zod = require_zod();
|
|
23641
23641
|
var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
|
|
@@ -28498,12 +28498,30 @@ var require_dist_KQ5D2wqr = __commonJS({
|
|
|
28498
28498
|
lastSuccessAt: zod.z.number().optional(),
|
|
28499
28499
|
/** Newest-archive size from `manifests.json`, or undefined. */
|
|
28500
28500
|
lastSuccessSizeBytes: zod.z.number().optional(),
|
|
28501
|
-
/**
|
|
28501
|
+
/**
|
|
28502
|
+
* Cron cadence(s) of the ENABLED schedules that fan out to this
|
|
28503
|
+
* destination, comma-joined. Absent when no enabled schedule targets it
|
|
28504
|
+
* — a destination nothing is scheduled to write to must not advertise a
|
|
28505
|
+
* cadence (D384). This is never the `backup_destination_policies.cron`
|
|
28506
|
+
* column: that per-location cron has scheduled nothing since 2026-07-28
|
|
28507
|
+
* and reading it made a destination with a DISABLED schedule claim a
|
|
28508
|
+
* nightly run.
|
|
28509
|
+
*/
|
|
28502
28510
|
cron: zod.z.string().optional(),
|
|
28503
|
-
/** ms-epoch of next
|
|
28511
|
+
/** ms-epoch of the next firing across those schedules (earliest), if any. */
|
|
28504
28512
|
nextRunAt: zod.z.number().optional(),
|
|
28505
|
-
/**
|
|
28506
|
-
|
|
28513
|
+
/**
|
|
28514
|
+
* ms-epoch of the last time a run ATTEMPTED to write here — success or
|
|
28515
|
+
* failure. Never a success stamp: pair it with `lastSuccessAt` (the
|
|
28516
|
+
* newest archive that actually landed) and `lastError`.
|
|
28517
|
+
*/
|
|
28518
|
+
lastAttemptAt: zod.z.number().optional(),
|
|
28519
|
+
/**
|
|
28520
|
+
* Why the last attempt failed, verbatim. Absent when the last attempt
|
|
28521
|
+
* landed the archive. A destination that has never been written to has
|
|
28522
|
+
* neither this nor `lastAttemptAt`.
|
|
28523
|
+
*/
|
|
28524
|
+
lastError: zod.z.string().optional()
|
|
28507
28525
|
});
|
|
28508
28526
|
var BackupArchiveEntrySchema = zod.z.object({
|
|
28509
28527
|
id: zod.z.string(),
|
|
@@ -28625,8 +28643,16 @@ var require_dist_KQ5D2wqr = __commonJS({
|
|
|
28625
28643
|
retentionCount: zod.z.number().int().min(1).max(1e3),
|
|
28626
28644
|
/** Optional subset of source locations to include; omitted = all. */
|
|
28627
28645
|
dataSources: zod.z.array(zod.z.string()).readonly().optional(),
|
|
28628
|
-
/**
|
|
28629
|
-
|
|
28646
|
+
/**
|
|
28647
|
+
* ms-epoch of the last tick that FIRED this schedule. Stamped before the
|
|
28648
|
+
* archive runs (it is the dedupe anchor), so it says "attempted", never
|
|
28649
|
+
* "succeeded" — a run refused by every destination stamps it too.
|
|
28650
|
+
*/
|
|
28651
|
+
lastAttemptAt: zod.z.number().optional(),
|
|
28652
|
+
/** ms-epoch of the last run of this schedule that landed at ≥1 destination. */
|
|
28653
|
+
lastSuccessAt: zod.z.number().optional(),
|
|
28654
|
+
/** Why the last fired run failed, verbatim. Absent when it succeeded. */
|
|
28655
|
+
lastError: zod.z.string().optional(),
|
|
28630
28656
|
/** ms-epoch of next computed firing (read-only, filled on list). */
|
|
28631
28657
|
nextRunAt: zod.z.number().optional()
|
|
28632
28658
|
});
|
|
@@ -28749,14 +28775,7 @@ var require_dist_KQ5D2wqr = __commonJS({
|
|
|
28749
28775
|
locationId: zod.z.string(),
|
|
28750
28776
|
enabled: zod.z.boolean(),
|
|
28751
28777
|
retentionCount: zod.z.number().int().min(1).max(1e3),
|
|
28752
|
-
label: zod.z.string().optional()
|
|
28753
|
-
/**
|
|
28754
|
-
* Per-destination cron expression. Empty string clears the
|
|
28755
|
-
* schedule (manual-only). Validated server-side via croner;
|
|
28756
|
-
* malformed expressions reject the upsert with an actionable
|
|
28757
|
-
* message.
|
|
28758
|
-
*/
|
|
28759
|
-
cron: zod.z.string().optional()
|
|
28778
|
+
label: zod.z.string().optional()
|
|
28760
28779
|
}), zod.z.void(), {
|
|
28761
28780
|
kind: "mutation",
|
|
28762
28781
|
auth: "admin"
|
|
@@ -60675,7 +60694,7 @@ var require_alerts_addon = __commonJS({
|
|
|
60675
60694
|
[Symbol.toStringTag]: { value: "Module" }
|
|
60676
60695
|
});
|
|
60677
60696
|
require_chunk_Cek0wNdY();
|
|
60678
|
-
var require_dist10 =
|
|
60697
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
60679
60698
|
function selectExpired(alerts, cutoffMs) {
|
|
60680
60699
|
return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
|
|
60681
60700
|
}
|
|
@@ -61494,7 +61513,7 @@ var require_console_logging = __commonJS({
|
|
|
61494
61513
|
[Symbol.toStringTag]: { value: "Module" }
|
|
61495
61514
|
});
|
|
61496
61515
|
require_chunk_Cek0wNdY();
|
|
61497
|
-
var require_dist10 =
|
|
61516
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
61498
61517
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
61499
61518
|
var LEVEL_RANK = {
|
|
61500
61519
|
debug: 0,
|
|
@@ -61588,7 +61607,7 @@ var require_core_blocks_addon = __commonJS({
|
|
|
61588
61607
|
"use strict";
|
|
61589
61608
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
61590
61609
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
61591
|
-
var require_dist10 =
|
|
61610
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
61592
61611
|
var node_crypto = __require("crypto");
|
|
61593
61612
|
var node_fs_promises = __require("fs/promises");
|
|
61594
61613
|
node_fs_promises = require_chunk.__toESM(node_fs_promises);
|
|
@@ -62485,11 +62504,11 @@ var require_core_blocks = __commonJS({
|
|
|
62485
62504
|
}
|
|
62486
62505
|
});
|
|
62487
62506
|
|
|
62488
|
-
// ../system/dist/retired-settings-keys-
|
|
62489
|
-
var
|
|
62490
|
-
"../system/dist/retired-settings-keys-
|
|
62507
|
+
// ../system/dist/retired-settings-keys-Bd8fuwO1.js
|
|
62508
|
+
var require_retired_settings_keys_Bd8fuwO1 = __commonJS({
|
|
62509
|
+
"../system/dist/retired-settings-keys-Bd8fuwO1.js"(exports) {
|
|
62491
62510
|
"use strict";
|
|
62492
|
-
var require_dist10 =
|
|
62511
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
62493
62512
|
function settingsStoreIsAuthoritativeHere(env) {
|
|
62494
62513
|
const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
|
|
62495
62514
|
return raw === "" || raw === "hub";
|
|
@@ -64703,8 +64722,8 @@ var require_device_manager_addon = __commonJS({
|
|
|
64703
64722
|
[Symbol.toStringTag]: { value: "Module" }
|
|
64704
64723
|
});
|
|
64705
64724
|
require_chunk_Cek0wNdY();
|
|
64706
|
-
var require_dist10 =
|
|
64707
|
-
var require_retired_settings_keys =
|
|
64725
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
64726
|
+
var require_retired_settings_keys = require_retired_settings_keys_Bd8fuwO1();
|
|
64708
64727
|
var node_crypto = __require("crypto");
|
|
64709
64728
|
var _camstack_types_node = require_node();
|
|
64710
64729
|
var JOB_HISTORY = 20;
|
|
@@ -70329,7 +70348,7 @@ var require_hub_forwarder = __commonJS({
|
|
|
70329
70348
|
[Symbol.toStringTag]: { value: "Module" }
|
|
70330
70349
|
});
|
|
70331
70350
|
require_chunk_Cek0wNdY();
|
|
70332
|
-
var require_dist10 =
|
|
70351
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
70333
70352
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
70334
70353
|
var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
|
|
70335
70354
|
var HubForwarderDestination = class {
|
|
@@ -70466,7 +70485,7 @@ var require_liveness_monitor_addon = __commonJS({
|
|
|
70466
70485
|
"use strict";
|
|
70467
70486
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
70468
70487
|
require_chunk_Cek0wNdY();
|
|
70469
|
-
var require_dist10 =
|
|
70488
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
70470
70489
|
var NO_DEVICES = "liveness:no-devices";
|
|
70471
70490
|
var ALL_OFFLINE = "liveness:all-devices-offline";
|
|
70472
70491
|
var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
|
|
@@ -70662,7 +70681,7 @@ var require_local_auth_addon = __commonJS({
|
|
|
70662
70681
|
[Symbol.toStringTag]: { value: "Module" }
|
|
70663
70682
|
});
|
|
70664
70683
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
70665
|
-
var require_dist10 =
|
|
70684
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
70666
70685
|
var node_crypto = __require("crypto");
|
|
70667
70686
|
node_crypto = require_chunk.__toESM(node_crypto);
|
|
70668
70687
|
var crypto$1 = __require("crypto");
|
|
@@ -78475,7 +78494,7 @@ var require_loki_logging = __commonJS({
|
|
|
78475
78494
|
[Symbol.toStringTag]: { value: "Module" }
|
|
78476
78495
|
});
|
|
78477
78496
|
require_chunk_Cek0wNdY();
|
|
78478
|
-
var require_dist10 =
|
|
78497
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
78479
78498
|
function sanitizeLabelName(raw) {
|
|
78480
78499
|
const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
|
|
78481
78500
|
return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
|
|
@@ -79040,7 +79059,7 @@ var require_native_metrics_addon = __commonJS({
|
|
|
79040
79059
|
[Symbol.toStringTag]: { value: "Module" }
|
|
79041
79060
|
});
|
|
79042
79061
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
79043
|
-
var require_dist10 =
|
|
79062
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
79044
79063
|
var node_fs_promises = __require("fs/promises");
|
|
79045
79064
|
var node_child_process = __require("child_process");
|
|
79046
79065
|
var node_util = __require("util");
|
|
@@ -81624,7 +81643,7 @@ var require_filesystem_storage_addon = __commonJS({
|
|
|
81624
81643
|
[Symbol.toStringTag]: { value: "Module" }
|
|
81625
81644
|
});
|
|
81626
81645
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
81627
|
-
var require_dist10 =
|
|
81646
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
81628
81647
|
var node_crypto = __require("crypto");
|
|
81629
81648
|
var node_fs_promises = __require("fs/promises");
|
|
81630
81649
|
var node_path = __require("path");
|
|
@@ -82740,8 +82759,8 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
82740
82759
|
[Symbol.toStringTag]: { value: "Module" }
|
|
82741
82760
|
});
|
|
82742
82761
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
82743
|
-
var require_dist10 =
|
|
82744
|
-
var require_retired_settings_keys =
|
|
82762
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
82763
|
+
var require_retired_settings_keys = require_retired_settings_keys_Bd8fuwO1();
|
|
82745
82764
|
var node_crypto = __require("crypto");
|
|
82746
82765
|
var node_fs = __require("fs");
|
|
82747
82766
|
var node_module = __require("module");
|
|
@@ -85231,7 +85250,7 @@ var require_storage_orchestrator_addon = __commonJS({
|
|
|
85231
85250
|
[Symbol.toStringTag]: { value: "Module" }
|
|
85232
85251
|
});
|
|
85233
85252
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
85234
|
-
var require_dist10 =
|
|
85253
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
85235
85254
|
var require_hub_cap_forward = require_hub_cap_forward_DmHNjbB0();
|
|
85236
85255
|
var zod = require_zod();
|
|
85237
85256
|
var node_crypto = __require("crypto");
|
|
@@ -88182,7 +88201,7 @@ var require_system_config_addon = __commonJS({
|
|
|
88182
88201
|
[Symbol.toStringTag]: { value: "Module" }
|
|
88183
88202
|
});
|
|
88184
88203
|
require_chunk_Cek0wNdY();
|
|
88185
|
-
var require_dist10 =
|
|
88204
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
88186
88205
|
var SECTION_TITLES = {
|
|
88187
88206
|
server: "Server",
|
|
88188
88207
|
auth: "Authentication"
|
|
@@ -106243,7 +106262,7 @@ var require_winston_logging = __commonJS({
|
|
|
106243
106262
|
[Symbol.toStringTag]: { value: "Module" }
|
|
106244
106263
|
});
|
|
106245
106264
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
106246
|
-
var require_dist10 =
|
|
106265
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
106247
106266
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
106248
106267
|
var node_path = __require("path");
|
|
106249
106268
|
node_path = require_chunk.__toESM(node_path);
|
|
@@ -130881,7 +130900,7 @@ var require_dist3 = __commonJS({
|
|
|
130881
130900
|
"use strict";
|
|
130882
130901
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
130883
130902
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
130884
|
-
var require_dist10 =
|
|
130903
|
+
var require_dist10 = require_dist_CcV3k_hD();
|
|
130885
130904
|
var require_builtins_alerts_alerts_addon = require_alerts_addon();
|
|
130886
130905
|
require_alerts();
|
|
130887
130906
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
@@ -216679,12 +216698,30 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
216679
216698
|
lastSuccessAt: zod.z.number().optional(),
|
|
216680
216699
|
/** Newest-archive size from `manifests.json`, or undefined. */
|
|
216681
216700
|
lastSuccessSizeBytes: zod.z.number().optional(),
|
|
216682
|
-
/**
|
|
216701
|
+
/**
|
|
216702
|
+
* Cron cadence(s) of the ENABLED schedules that fan out to this
|
|
216703
|
+
* destination, comma-joined. Absent when no enabled schedule targets it
|
|
216704
|
+
* — a destination nothing is scheduled to write to must not advertise a
|
|
216705
|
+
* cadence (D384). This is never the `backup_destination_policies.cron`
|
|
216706
|
+
* column: that per-location cron has scheduled nothing since 2026-07-28
|
|
216707
|
+
* and reading it made a destination with a DISABLED schedule claim a
|
|
216708
|
+
* nightly run.
|
|
216709
|
+
*/
|
|
216683
216710
|
cron: zod.z.string().optional(),
|
|
216684
|
-
/** ms-epoch of next
|
|
216711
|
+
/** ms-epoch of the next firing across those schedules (earliest), if any. */
|
|
216685
216712
|
nextRunAt: zod.z.number().optional(),
|
|
216686
|
-
/**
|
|
216687
|
-
|
|
216713
|
+
/**
|
|
216714
|
+
* ms-epoch of the last time a run ATTEMPTED to write here — success or
|
|
216715
|
+
* failure. Never a success stamp: pair it with `lastSuccessAt` (the
|
|
216716
|
+
* newest archive that actually landed) and `lastError`.
|
|
216717
|
+
*/
|
|
216718
|
+
lastAttemptAt: zod.z.number().optional(),
|
|
216719
|
+
/**
|
|
216720
|
+
* Why the last attempt failed, verbatim. Absent when the last attempt
|
|
216721
|
+
* landed the archive. A destination that has never been written to has
|
|
216722
|
+
* neither this nor `lastAttemptAt`.
|
|
216723
|
+
*/
|
|
216724
|
+
lastError: zod.z.string().optional()
|
|
216688
216725
|
});
|
|
216689
216726
|
var BackupArchiveEntrySchema = zod.z.object({
|
|
216690
216727
|
id: zod.z.string(),
|
|
@@ -216806,8 +216843,16 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
216806
216843
|
retentionCount: zod.z.number().int().min(1).max(1e3),
|
|
216807
216844
|
/** Optional subset of source locations to include; omitted = all. */
|
|
216808
216845
|
dataSources: zod.z.array(zod.z.string()).readonly().optional(),
|
|
216809
|
-
/**
|
|
216810
|
-
|
|
216846
|
+
/**
|
|
216847
|
+
* ms-epoch of the last tick that FIRED this schedule. Stamped before the
|
|
216848
|
+
* archive runs (it is the dedupe anchor), so it says "attempted", never
|
|
216849
|
+
* "succeeded" — a run refused by every destination stamps it too.
|
|
216850
|
+
*/
|
|
216851
|
+
lastAttemptAt: zod.z.number().optional(),
|
|
216852
|
+
/** ms-epoch of the last run of this schedule that landed at ≥1 destination. */
|
|
216853
|
+
lastSuccessAt: zod.z.number().optional(),
|
|
216854
|
+
/** Why the last fired run failed, verbatim. Absent when it succeeded. */
|
|
216855
|
+
lastError: zod.z.string().optional(),
|
|
216811
216856
|
/** ms-epoch of next computed firing (read-only, filled on list). */
|
|
216812
216857
|
nextRunAt: zod.z.number().optional()
|
|
216813
216858
|
});
|
|
@@ -216930,14 +216975,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
216930
216975
|
locationId: zod.z.string(),
|
|
216931
216976
|
enabled: zod.z.boolean(),
|
|
216932
216977
|
retentionCount: zod.z.number().int().min(1).max(1e3),
|
|
216933
|
-
label: zod.z.string().optional()
|
|
216934
|
-
/**
|
|
216935
|
-
* Per-destination cron expression. Empty string clears the
|
|
216936
|
-
* schedule (manual-only). Validated server-side via croner;
|
|
216937
|
-
* malformed expressions reject the upsert with an actionable
|
|
216938
|
-
* message.
|
|
216939
|
-
*/
|
|
216940
|
-
cron: zod.z.string().optional()
|
|
216978
|
+
label: zod.z.string().optional()
|
|
216941
216979
|
}), zod.z.void(), {
|
|
216942
216980
|
kind: "mutation",
|
|
216943
216981
|
auth: "admin"
|