@camstack/system 1.2.444 → 1.2.445

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.
Files changed (142) hide show
  1. package/dist/addon-runner.js +40 -31
  2. package/dist/addon-runner.mjs +41 -32
  3. package/dist/{agent-https-DlpTMDqA.js → agent-https-CiOW0-sj.js} +810 -12
  4. package/dist/{agent-https-U0d4uvn2.mjs → agent-https-D4Q8iFNd.mjs} +697 -13
  5. package/dist/auth/admin-token-manager.d.ts +9 -3
  6. package/dist/auth/api-key-manager.d.ts +9 -3
  7. package/dist/auth/auth-audit-log.d.ts +9 -3
  8. package/dist/auth/device-credential-manager.d.ts +5 -1
  9. package/dist/auth/external-identity-manager.d.ts +8 -21
  10. package/dist/auth/login-session-manager.d.ts +11 -3
  11. package/dist/auth/scoped-token-manager.d.ts +8 -52
  12. package/dist/auth/totp-manager.d.ts +11 -3
  13. package/dist/auth/user-manager.d.ts +10 -17
  14. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  15. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  16. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  17. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  18. package/dist/builtins/alerts/alert-store.d.ts +32 -0
  19. package/dist/builtins/alerts/alerts.addon.d.ts +9 -2
  20. package/dist/builtins/alerts/alerts.addon.js +289 -150
  21. package/dist/builtins/alerts/alerts.addon.mjs +288 -150
  22. package/dist/builtins/alerts/record-kinds.d.ts +15 -0
  23. package/dist/builtins/autotrack/index.js +1 -1
  24. package/dist/builtins/autotrack/index.mjs +1 -1
  25. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts +1 -0
  26. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +134 -193
  27. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +134 -193
  28. package/dist/builtins/backup-orchestrator/destination-policy.d.ts +4 -2
  29. package/dist/builtins/backup-orchestrator/encryption-key-store.d.ts +4 -2
  30. package/dist/builtins/backup-orchestrator/record-kinds.d.ts +58 -0
  31. package/dist/builtins/backup-orchestrator/schedule-store.d.ts +4 -2
  32. package/dist/builtins/backup-orchestrator/seed-marker-store.d.ts +4 -2
  33. package/dist/builtins/calendars/calendar-prefs-store.d.ts +13 -5
  34. package/dist/builtins/calendars/calendars.addon.d.ts +2 -2
  35. package/dist/builtins/calendars/calendars.addon.js +67 -64
  36. package/dist/builtins/calendars/calendars.addon.mjs +59 -64
  37. package/dist/builtins/calendars/record-kinds.d.ts +18 -0
  38. package/dist/builtins/camera-grid/index.js +1 -1
  39. package/dist/builtins/camera-grid/index.mjs +1 -1
  40. package/dist/builtins/cluster-agent/record-kinds.d.ts +36 -0
  41. package/dist/builtins/composer/composer.addon.js +2 -2
  42. package/dist/builtins/composer/composer.addon.mjs +2 -2
  43. package/dist/builtins/console-logging/index.js +1 -1
  44. package/dist/builtins/console-logging/index.mjs +1 -1
  45. package/dist/builtins/core-blocks/block-settings-store.d.ts +8 -4
  46. package/dist/builtins/core-blocks/core-block-store.d.ts +8 -16
  47. package/dist/builtins/core-blocks/core-blocks.addon.js +85 -112
  48. package/dist/builtins/core-blocks/core-blocks.addon.mjs +86 -113
  49. package/dist/builtins/core-blocks/index.mjs +1 -1
  50. package/dist/builtins/core-blocks/record-kinds.d.ts +26 -0
  51. package/dist/builtins/device-manager/device-manager.addon.js +111 -187
  52. package/dist/builtins/device-manager/device-manager.addon.mjs +110 -187
  53. package/dist/builtins/device-manager/device-tombstone-store.d.ts +9 -48
  54. package/dist/builtins/device-manager/record-kinds.d.ts +14 -0
  55. package/dist/builtins/hub-forwarder/index.js +1 -1
  56. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  57. package/dist/builtins/keychain/index.js +152 -22
  58. package/dist/builtins/keychain/index.mjs +152 -22
  59. package/dist/builtins/keychain/keychain-service.d.ts +3 -2
  60. package/dist/builtins/keychain/keychain-store.d.ts +13 -2
  61. package/dist/builtins/keychain/record-kinds.d.ts +16 -0
  62. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  63. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  64. package/dist/builtins/local-auth/auth-schema.d.ts +3 -1
  65. package/dist/builtins/local-auth/local-auth.addon.js +2903 -2123
  66. package/dist/builtins/local-auth/local-auth.addon.mjs +2904 -2124
  67. package/dist/builtins/local-auth/oauth-session-manager.d.ts +8 -48
  68. package/dist/builtins/local-auth/record-kinds.d.ts +141 -0
  69. package/dist/builtins/local-network/local-network.addon.js +2 -2
  70. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  71. package/dist/builtins/loki-logging/index.js +1 -1
  72. package/dist/builtins/loki-logging/index.mjs +1 -1
  73. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  74. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  75. package/dist/builtins/platform-probe/index.js +1 -1
  76. package/dist/builtins/platform-probe/index.mjs +1 -1
  77. package/dist/builtins/record-entries/index.js +1 -1
  78. package/dist/builtins/record-entries/index.mjs +1 -1
  79. package/dist/builtins/records/legacy-table-row-count.d.ts +5 -0
  80. package/dist/builtins/records/phase6-declare-gate.d.ts +28 -0
  81. package/dist/builtins/records-isolated.d.ts +10 -0
  82. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  83. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  84. package/dist/builtins/snapshot/index.js +1 -1
  85. package/dist/builtins/snapshot/index.mjs +1 -1
  86. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  87. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  88. package/dist/builtins/sqlite-storage/index.js +1 -1
  89. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  90. package/dist/builtins/sqlite-storage/integration-record-kinds.d.ts +30 -0
  91. package/dist/builtins/sqlite-storage/integration-registry.d.ts +10 -16
  92. package/dist/builtins/sqlite-storage/records/count-settings-array-legacy.d.ts +5 -0
  93. package/dist/builtins/sqlite-storage/records/count-settings-brokers-legacy.d.ts +6 -0
  94. package/dist/builtins/sqlite-storage/records/records-engine-types.d.ts +5 -0
  95. package/dist/builtins/sqlite-storage/records/records-engine.d.ts +4 -0
  96. package/dist/builtins/sqlite-storage/records/records-provider.d.ts +5 -1
  97. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +17 -0
  98. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +111 -3
  99. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +111 -3
  100. package/dist/builtins/sqlite-storage/storage-admin-provider.d.ts +9 -1
  101. package/dist/builtins/storage-orchestrator/drain-state-store.d.ts +5 -2
  102. package/dist/builtins/storage-orchestrator/location-store.d.ts +7 -2
  103. package/dist/builtins/storage-orchestrator/record-kinds.d.ts +38 -0
  104. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +2 -0
  105. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +196 -5
  106. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +195 -6
  107. package/dist/builtins/system-config/record-kinds.d.ts +32 -0
  108. package/dist/builtins/system-config/system-config.addon.js +53 -618
  109. package/dist/builtins/system-config/system-config.addon.mjs +29 -577
  110. package/dist/builtins/winston-logging/index.js +1 -1
  111. package/dist/builtins/winston-logging/index.mjs +1 -1
  112. package/dist/{composition-sources-C3rKncIF.mjs → composition-sources-BMt5cFYb.mjs} +1 -1
  113. package/dist/{composition-sources-NAPZddic.js → composition-sources-D3fi9Xns.js} +1 -1
  114. package/dist/{constants-BKX2QnIg.mjs → constants-BMHCxRzb.mjs} +1 -1
  115. package/dist/{constants-BXiNEIeV.js → constants-Br879Axi.js} +1 -1
  116. package/dist/{device-ca-DT9X2S6d.js → device-ca-CnJ_va7i.js} +1 -1
  117. package/dist/{device-ca-jxjSL8Ov.mjs → device-ca-T8osSMos.mjs} +1 -1
  118. package/dist/{dist-DERK-gP5.mjs → dist-BNunRyXT.mjs} +174 -58
  119. package/dist/{dist-D1vECb_6.js → dist-DgOG8flk.js} +233 -57
  120. package/dist/file-host-worker.js +1 -1
  121. package/dist/file-host-worker.mjs +1 -1
  122. package/dist/{hub-mdns-ciao-Cah9GCIg.js → hub-mdns-ciao-BIkTHq-n.js} +2 -2
  123. package/dist/{hub-mdns-ciao-CRaC97V0.mjs → hub-mdns-ciao-D16oRQ9K.mjs} +2 -2
  124. package/dist/index.d.ts +7 -0
  125. package/dist/index.js +3093 -2820
  126. package/dist/index.mjs +3065 -2809
  127. package/dist/kernel/index.d.ts +2 -0
  128. package/dist/kernel/moleculer/event-bus.d.ts +3 -1
  129. package/dist/kernel/moleculer/mesh-mtls/mesh-certificate-registry.d.ts +5 -1
  130. package/dist/kernel/moleculer/remote-logger.d.ts +2 -2
  131. package/dist/kernel/transport/cap-route-resolver.d.ts +9 -38
  132. package/dist/phase6-declare-gate-Ci1-8uUn.js +98 -0
  133. package/dist/phase6-declare-gate-tkKOEitw.mjs +93 -0
  134. package/dist/read-all-rows-CVoO1ONM.js +29 -0
  135. package/dist/read-all-rows-TaPqdWNF.mjs +25 -0
  136. package/dist/records/read-all-rows.d.ts +6 -0
  137. package/dist/{restore-archive-daKyE24F.mjs → restore-archive-DR9MtO7J.mjs} +339 -9
  138. package/dist/{restore-archive-Dy-qKTdF.js → restore-archive-DjJnCgap.js} +353 -5
  139. package/dist/tls/agent-https-names.d.ts +9 -13
  140. package/dist/{wal-maintenance-dAv4IdzC.js → wal-maintenance-CODGqhKY.js} +0 -0
  141. package/dist/{wal-maintenance-zRc24mOC.mjs → wal-maintenance-CfvgtQ7C.mjs} +0 -0
  142. package/package.json +1 -1
@@ -3,8 +3,9 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-D1vECb_6.js");
7
- const require_restore_archive = require("../../restore-archive-Dy-qKTdF.js");
6
+ const require_dist = require("../../dist-DgOG8flk.js");
7
+ const require_read_all_rows$1 = require("../../read-all-rows-CVoO1ONM.js");
8
+ const require_restore_archive = require("../../restore-archive-DjJnCgap.js");
8
9
  let node_crypto = require("node:crypto");
9
10
  let node_fs_promises = require("node:fs/promises");
10
11
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -84,66 +85,6 @@ async function seedWeeklySchedule(store, markers) {
84
85
  return seed;
85
86
  }
86
87
  //#endregion
87
- //#region src/builtins/backup-orchestrator/seed-marker-store.ts
88
- /**
89
- * @durable class=config owner=backup-orchestrator
90
- * write="the orchestrator inserts one row per seed id the first time that
91
- * seed is created (or found already created); never updated"
92
- * retention="none — one tiny row per seed ever made; deleting it lets the
93
- * seed be re-created once more on the next boot"
94
- */
95
- var BACKUP_SEED_MARKERS_COLLECTION = "backup_seed_markers";
96
- var COLUMNS$1 = [{
97
- name: "seed_id",
98
- type: "TEXT",
99
- primaryKey: true
100
- }, {
101
- name: "seeded_at",
102
- type: "INTEGER",
103
- notNull: true
104
- }];
105
- var BackupSeedMarkerStore = class {
106
- store;
107
- now;
108
- declared = false;
109
- constructor(store, now = Date.now) {
110
- this.store = store;
111
- this.now = now;
112
- }
113
- async ensureDeclared() {
114
- if (this.declared) return;
115
- await this.store.declareCollection({
116
- collection: BACKUP_SEED_MARKERS_COLLECTION,
117
- columns: COLUMNS$1
118
- });
119
- this.declared = true;
120
- }
121
- async has(seedId) {
122
- await this.ensureDeclared();
123
- return (await this.store.query({
124
- collection: BACKUP_SEED_MARKERS_COLLECTION,
125
- filter: {
126
- where: { seed_id: seedId },
127
- limit: 1
128
- }
129
- })).length > 0;
130
- }
131
- async mark(seedId) {
132
- await this.ensureDeclared();
133
- if (await this.has(seedId)) return;
134
- await this.store.insert({
135
- collection: BACKUP_SEED_MARKERS_COLLECTION,
136
- record: {
137
- id: seedId,
138
- data: {
139
- seed_id: seedId,
140
- seeded_at: this.now()
141
- }
142
- }
143
- });
144
- }
145
- };
146
- //#endregion
147
88
  //#region ../../node_modules/croner/dist/croner.js
148
89
  function T(s) {
149
90
  return Date.UTC(s.y, s.m - 1, s.d, s.h, s.i, s.s);
@@ -938,6 +879,7 @@ function previewNextRuns(cron, count, after) {
938
879
  }
939
880
  //#endregion
940
881
  //#region src/builtins/backup-orchestrator/destination-policy.ts
882
+ var import_read_all_rows = require_read_all_rows$1.require_read_all_rows();
941
883
  /**
942
884
  * @durable class=config owner=backup-orchestrator
943
885
  * write="`ensureDefault` auto-creates one row the first time a `backups` storage
@@ -992,8 +934,10 @@ var BACKUP_DESTINATION_POLICIES_COLUMNS = [
992
934
  var BackupDestinationPolicyService = class {
993
935
  store;
994
936
  declared = false;
995
- constructor(store) {
937
+ policiesKind;
938
+ constructor(store, policiesKind = null) {
996
939
  this.store = store;
940
+ this.policiesKind = policiesKind;
997
941
  }
998
942
  /**
999
943
  * Lazy `declareCollection` — called from every read/write path.
@@ -1005,6 +949,7 @@ var BackupDestinationPolicyService = class {
1005
949
  await this.ensureDeclared();
1006
950
  }
1007
951
  async ensureDeclared() {
952
+ if (this.policiesKind !== null) return;
1008
953
  if (this.declared) return;
1009
954
  await this.store.declareCollection({
1010
955
  collection: BACKUP_DESTINATION_POLICIES,
@@ -1014,6 +959,17 @@ var BackupDestinationPolicyService = class {
1014
959
  }
1015
960
  async list() {
1016
961
  await this.ensureDeclared();
962
+ const kind = this.policiesKind;
963
+ if (kind !== null) {
964
+ const rows = await (0, import_read_all_rows.readAllRows)(kind);
965
+ rows.sort((a, b) => a.id.localeCompare(b.id));
966
+ const out = [];
967
+ for (const row of rows) {
968
+ const mapped = bodyToPolicy(row.id, row.data);
969
+ if (mapped) out.push(mapped);
970
+ }
971
+ return out;
972
+ }
1017
973
  const rows = await this.store.query({
1018
974
  collection: BACKUP_DESTINATION_POLICIES,
1019
975
  filter: { orderBy: {
@@ -1030,6 +986,11 @@ var BackupDestinationPolicyService = class {
1030
986
  }
1031
987
  async get(locationId) {
1032
988
  await this.ensureDeclared();
989
+ const kind = this.policiesKind;
990
+ if (kind !== null) {
991
+ const row = await kind.get(locationId);
992
+ return row === null ? null : bodyToPolicy(locationId, row.data);
993
+ }
1033
994
  const rows = await this.store.query({
1034
995
  collection: BACKUP_DESTINATION_POLICIES,
1035
996
  filter: {
@@ -1045,6 +1006,16 @@ var BackupDestinationPolicyService = class {
1045
1006
  */
1046
1007
  async upsert(p) {
1047
1008
  await this.ensureDeclared();
1009
+ const kind = this.policiesKind;
1010
+ if (kind !== null) {
1011
+ const body = policyToBody(p);
1012
+ const data = require_restore_archive.backupOrchestratorRecordKinds["destination-policies"].schema.parse(body);
1013
+ await kind.put({
1014
+ id: p.locationId,
1015
+ data
1016
+ });
1017
+ return;
1018
+ }
1048
1019
  await this.store.deleteWhere({
1049
1020
  collection: BACKUP_DESTINATION_POLICIES,
1050
1021
  filter: { where: { location_id: p.locationId } }
@@ -1059,6 +1030,11 @@ var BackupDestinationPolicyService = class {
1059
1030
  }
1060
1031
  async delete(locationId) {
1061
1032
  await this.ensureDeclared();
1033
+ const kind = this.policiesKind;
1034
+ if (kind !== null) {
1035
+ await kind.delete(locationId);
1036
+ return;
1037
+ }
1062
1038
  await this.store.deleteWhere({
1063
1039
  collection: BACKUP_DESTINATION_POLICIES,
1064
1040
  filter: { where: { location_id: locationId } }
@@ -1110,6 +1086,26 @@ var BackupDestinationPolicyService = class {
1110
1086
  });
1111
1087
  }
1112
1088
  };
1089
+ function policyToBody(p) {
1090
+ return {
1091
+ enabled: p.enabled,
1092
+ retentionCount: p.retentionCount,
1093
+ ...p.label !== void 0 ? { label: p.label } : {},
1094
+ ...p.lastAttemptAt !== void 0 ? { lastAttemptAt: p.lastAttemptAt } : {},
1095
+ ...p.lastError !== void 0 ? { lastError: p.lastError } : {}
1096
+ };
1097
+ }
1098
+ function bodyToPolicy(locationId, body) {
1099
+ if (!locationId) return null;
1100
+ return {
1101
+ locationId,
1102
+ enabled: body.enabled,
1103
+ retentionCount: body.retentionCount,
1104
+ ...body.label !== void 0 ? { label: body.label } : {},
1105
+ ...body.lastAttemptAt !== void 0 ? { lastAttemptAt: body.lastAttemptAt } : {},
1106
+ ...body.lastError !== void 0 ? { lastError: body.lastError } : {}
1107
+ };
1108
+ }
1113
1109
  function mapPolicyToRow(p) {
1114
1110
  return {
1115
1111
  location_id: p.locationId,
@@ -1213,131 +1209,6 @@ async function downloadArchiveToCache(input) {
1213
1209
  }
1214
1210
  }
1215
1211
  //#endregion
1216
- //#region src/builtins/backup-orchestrator/encryption-key-store.ts
1217
- /**
1218
- * @durable class=config owner=backup-orchestrator
1219
- * write="`setupEncryption` inserts one row per generated key and retires the
1220
- * previous active row; `disableEncryption` retires the active row"
1221
- * retention="none — one small row per key ever generated; a retired row
1222
- * names the key older archives need"
1223
- */
1224
- var BACKUP_ENCRYPTION_KEYS_COLLECTION = "backup_encryption_keys";
1225
- var COLUMNS = [
1226
- {
1227
- name: "key_id",
1228
- type: "TEXT",
1229
- primaryKey: true
1230
- },
1231
- {
1232
- name: "public_key",
1233
- type: "TEXT",
1234
- notNull: true
1235
- },
1236
- {
1237
- name: "created_at",
1238
- type: "INTEGER",
1239
- notNull: true
1240
- },
1241
- {
1242
- name: "retired_at",
1243
- type: "INTEGER"
1244
- }
1245
- ];
1246
- var BackupEncryptionKeyStore = class {
1247
- store;
1248
- now;
1249
- declared = false;
1250
- constructor(store, now = Date.now) {
1251
- this.store = store;
1252
- this.now = now;
1253
- }
1254
- async ensureDeclared() {
1255
- if (this.declared) return;
1256
- await this.store.declareCollection({
1257
- collection: BACKUP_ENCRYPTION_KEYS_COLLECTION,
1258
- columns: COLUMNS
1259
- });
1260
- this.declared = true;
1261
- }
1262
- /** Every key, newest first. */
1263
- async list() {
1264
- await this.ensureDeclared();
1265
- const rows = await this.store.query({
1266
- collection: BACKUP_ENCRYPTION_KEYS_COLLECTION,
1267
- filter: { orderBy: {
1268
- field: "created_at",
1269
- direction: "desc"
1270
- } }
1271
- });
1272
- const out = [];
1273
- for (const row of rows) {
1274
- const record = toRecord(row.data);
1275
- if (record !== null) out.push(record);
1276
- }
1277
- return out;
1278
- }
1279
- /** The key new archives are encrypted to; `null` = encryption off. */
1280
- async active() {
1281
- return (await this.list()).find((k) => k.retiredAt === null) ?? null;
1282
- }
1283
- /** Make `publicKey` the active key; the previous one is retired, kept listed. */
1284
- async activate(input) {
1285
- const parsed = require_restore_archive.parseBackupPublicKey(input.publicKey);
1286
- const t = this.now();
1287
- await this.retireActive(t);
1288
- const record = {
1289
- keyId: parsed.keyId,
1290
- publicKey: input.publicKey.trim(),
1291
- createdAt: t,
1292
- retiredAt: null
1293
- };
1294
- await this.write(record);
1295
- return record;
1296
- }
1297
- /** Encryption off: the active key is retired. Archives already made keep needing it. */
1298
- async disable() {
1299
- await this.retireActive(this.now());
1300
- }
1301
- async retireActive(at) {
1302
- for (const key of await this.list()) if (key.retiredAt === null) await this.write({
1303
- ...key,
1304
- retiredAt: at
1305
- });
1306
- }
1307
- async write(record) {
1308
- await this.ensureDeclared();
1309
- await this.store.deleteWhere({
1310
- collection: BACKUP_ENCRYPTION_KEYS_COLLECTION,
1311
- filter: { where: { key_id: record.keyId } }
1312
- });
1313
- await this.store.insert({
1314
- collection: BACKUP_ENCRYPTION_KEYS_COLLECTION,
1315
- record: {
1316
- id: record.keyId,
1317
- data: {
1318
- key_id: record.keyId,
1319
- public_key: record.publicKey,
1320
- created_at: record.createdAt,
1321
- retired_at: record.retiredAt
1322
- }
1323
- }
1324
- });
1325
- }
1326
- };
1327
- function toRecord(row) {
1328
- const keyId = row["key_id"];
1329
- const publicKey = row["public_key"];
1330
- const createdAt = row["created_at"];
1331
- if (typeof keyId !== "string" || typeof publicKey !== "string") return null;
1332
- const retired = row["retired_at"];
1333
- return {
1334
- keyId,
1335
- publicKey,
1336
- createdAt: typeof createdAt === "number" ? createdAt : Number(createdAt ?? 0),
1337
- retiredAt: typeof retired === "number" ? retired : null
1338
- };
1339
- }
1340
- //#endregion
1341
1212
  //#region src/builtins/backup-orchestrator/manifest-store.ts
1342
1213
  /** File path (relative to the location root) where the index lives. */
1343
1214
  var MANIFESTS_FILENAME = "manifests.json";
@@ -1873,13 +1744,16 @@ var BACKUP_SCHEDULES_COLUMNS = [
1873
1744
  var BackupScheduleService = class {
1874
1745
  store;
1875
1746
  declared = false;
1876
- constructor(store) {
1747
+ schedulesKind;
1748
+ constructor(store, schedulesKind = null) {
1877
1749
  this.store = store;
1750
+ this.schedulesKind = schedulesKind;
1878
1751
  }
1879
1752
  async initialize() {
1880
1753
  await this.ensureDeclared();
1881
1754
  }
1882
1755
  async ensureDeclared() {
1756
+ if (this.schedulesKind !== null) return;
1883
1757
  if (this.declared) return;
1884
1758
  await this.store.declareCollection({
1885
1759
  collection: BACKUP_SCHEDULES,
@@ -1889,6 +1763,17 @@ var BackupScheduleService = class {
1889
1763
  }
1890
1764
  async list() {
1891
1765
  await this.ensureDeclared();
1766
+ const kind = this.schedulesKind;
1767
+ if (kind !== null) {
1768
+ const rows = await (0, import_read_all_rows.readAllRows)(kind);
1769
+ rows.sort((a, b) => a.id.localeCompare(b.id));
1770
+ const out = [];
1771
+ for (const row of rows) {
1772
+ const mapped = bodyToSchedule(row.id, row.data);
1773
+ if (mapped) out.push(mapped);
1774
+ }
1775
+ return out;
1776
+ }
1892
1777
  const rows = await this.store.query({
1893
1778
  collection: BACKUP_SCHEDULES,
1894
1779
  filter: { orderBy: {
@@ -1905,6 +1790,11 @@ var BackupScheduleService = class {
1905
1790
  }
1906
1791
  async get(id) {
1907
1792
  await this.ensureDeclared();
1793
+ const kind = this.schedulesKind;
1794
+ if (kind !== null) {
1795
+ const row = await kind.get(id);
1796
+ return row === null ? null : bodyToSchedule(id, row.data);
1797
+ }
1908
1798
  const rows = await this.store.query({
1909
1799
  collection: BACKUP_SCHEDULES,
1910
1800
  filter: {
@@ -1917,6 +1807,16 @@ var BackupScheduleService = class {
1917
1807
  /** Replace-or-insert (delete + insert — mirrors the policy store). */
1918
1808
  async upsert(s) {
1919
1809
  await this.ensureDeclared();
1810
+ const kind = this.schedulesKind;
1811
+ if (kind !== null) {
1812
+ const body = scheduleToBody(s);
1813
+ const data = require_restore_archive.backupOrchestratorRecordKinds.schedules.schema.parse(body);
1814
+ await kind.put({
1815
+ id: s.id,
1816
+ data
1817
+ });
1818
+ return;
1819
+ }
1920
1820
  await this.store.deleteWhere({
1921
1821
  collection: BACKUP_SCHEDULES,
1922
1822
  filter: { where: { id: s.id } }
@@ -1931,12 +1831,47 @@ var BackupScheduleService = class {
1931
1831
  }
1932
1832
  async delete(id) {
1933
1833
  await this.ensureDeclared();
1834
+ const kind = this.schedulesKind;
1835
+ if (kind !== null) {
1836
+ await kind.delete(id);
1837
+ return;
1838
+ }
1934
1839
  await this.store.deleteWhere({
1935
1840
  collection: BACKUP_SCHEDULES,
1936
1841
  filter: { where: { id } }
1937
1842
  });
1938
1843
  }
1939
1844
  };
1845
+ function scheduleToBody(s) {
1846
+ return {
1847
+ label: s.label,
1848
+ cron: s.cron,
1849
+ enabled: s.enabled,
1850
+ locationIds: [...s.locationIds],
1851
+ retentionCount: s.retentionCount,
1852
+ ...s.dataSources !== void 0 ? { dataSources: [...s.dataSources] } : {},
1853
+ ...s.databases !== void 0 ? { databases: [...s.databases] } : {},
1854
+ ...s.lastAttemptAt !== void 0 ? { lastAttemptAt: s.lastAttemptAt } : {},
1855
+ ...s.lastSuccessAt !== void 0 ? { lastSuccessAt: s.lastSuccessAt } : {},
1856
+ ...s.lastError !== void 0 ? { lastError: s.lastError } : {}
1857
+ };
1858
+ }
1859
+ function bodyToSchedule(id, body) {
1860
+ if (!id) return null;
1861
+ return {
1862
+ id,
1863
+ label: body.label,
1864
+ cron: body.cron,
1865
+ enabled: body.enabled,
1866
+ locationIds: [...body.locationIds],
1867
+ retentionCount: body.retentionCount,
1868
+ ...body.dataSources !== void 0 ? { dataSources: [...body.dataSources] } : {},
1869
+ ...body.databases !== void 0 && body.databases.length > 0 ? { databases: [...body.databases] } : {},
1870
+ ...body.lastAttemptAt !== void 0 ? { lastAttemptAt: body.lastAttemptAt } : {},
1871
+ ...body.lastSuccessAt !== void 0 ? { lastSuccessAt: body.lastSuccessAt } : {},
1872
+ ...body.lastError !== void 0 ? { lastError: body.lastError } : {}
1873
+ };
1874
+ }
1940
1875
  function mapScheduleToRow(s) {
1941
1876
  return {
1942
1877
  id: s.id,
@@ -2191,6 +2126,7 @@ var UPLOAD_CHUNK_BYTES = 8 * 1024 * 1024;
2191
2126
  var ORCHESTRATOR_ADDON_ID = "backup-orchestrator";
2192
2127
  var BackupOrchestratorAddon = class extends require_dist.BaseAddon {
2193
2128
  systemBackup = null;
2129
+ backupRecords = null;
2194
2130
  policies = null;
2195
2131
  schedules = null;
2196
2132
  /** Backup encryption keys — PUBLIC keys only (see encryption-key-store.ts). */
@@ -2232,6 +2168,11 @@ var BackupOrchestratorAddon = class extends require_dist.BaseAddon {
2232
2168
  super({});
2233
2169
  }
2234
2170
  async onInitialize() {
2171
+ const records = this.ctx.records;
2172
+ if (records !== void 0) {
2173
+ await records.declare(require_restore_archive.backupOrchestratorRecordKinds);
2174
+ this.backupRecords = require_restore_archive.backupRecordStoresOf(records);
2175
+ }
2235
2176
  this.dataDir = this.ctx.nodeDataDir;
2236
2177
  this.stagingDir = resolveStagingDir(this.ctx.nodeDataDir);
2237
2178
  this.systemBackup = new require_restore_archive.SystemBackupService(this.dataDir, this.ctx.logger);
@@ -2253,7 +2194,7 @@ var BackupOrchestratorAddon = class extends require_dist.BaseAddon {
2253
2194
  }
2254
2195
  await this.seedWeekly();
2255
2196
  const settingsStore = this.ctx.kernel.capabilityRegistry?.getSingleton("settings-store");
2256
- this.encryptionKeys = settingsStore ? new BackupEncryptionKeyStore(settingsStore) : null;
2197
+ this.encryptionKeys = settingsStore ? new require_restore_archive.BackupEncryptionKeyStore(settingsStore, Date.now, this.backupRecords?.encryptionKeys ?? null) : null;
2257
2198
  const provider = {
2258
2199
  listDestinations: () => this.listDestinations(),
2259
2200
  list: () => this.aggregatedList(),
@@ -3256,7 +3197,7 @@ var BackupOrchestratorAddon = class extends require_dist.BaseAddon {
3256
3197
  try {
3257
3198
  const store = this.ctx.kernel.capabilityRegistry?.getSingleton("settings-store");
3258
3199
  if (!store) return;
3259
- const seed = await seedWeeklySchedule(this.schedules, new BackupSeedMarkerStore(store));
3200
+ const seed = await seedWeeklySchedule(this.schedules, new require_restore_archive.BackupSeedMarkerStore(store, Date.now, this.backupRecords?.seedMarkers ?? null));
3260
3201
  if (seed === null) return;
3261
3202
  this.ctx.logger.info("backup: seeded the weekly events & history schedule", { meta: {
3262
3203
  scheduleId: seed.id,
@@ -3413,7 +3354,7 @@ var BackupOrchestratorAddon = class extends require_dist.BaseAddon {
3413
3354
  this.ctx.logger.warn("backup-orchestrator: no settings-store provider — backup schedules will not persist");
3414
3355
  return null;
3415
3356
  }
3416
- return new BackupScheduleService(store);
3357
+ return new BackupScheduleService(store, this.backupRecords?.schedules ?? null);
3417
3358
  }
3418
3359
  resolvePolicyService() {
3419
3360
  const reg = this.ctx.kernel.capabilityRegistry;
@@ -3423,7 +3364,7 @@ var BackupOrchestratorAddon = class extends require_dist.BaseAddon {
3423
3364
  this.ctx.logger.warn("backup-orchestrator: no settings-store provider — destination policies will not persist");
3424
3365
  return null;
3425
3366
  }
3426
- return new BackupDestinationPolicyService(store);
3367
+ return new BackupDestinationPolicyService(store, this.backupRecords?.destinationPolicies ?? null);
3427
3368
  }
3428
3369
  /**
3429
3370
  * Narrow `ctx.api.storage` to the subset the manifest helpers need.