@camstack/addon-osd-manager 0.1.230 → 0.1.232

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 (18) hide show
  1. package/dist/{MotionZonesSettings-BoZX0EA6.mjs → MotionZonesSettings-BUfAeCb9.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-CxHO2qra.mjs → PrivacyMaskSettings-DCiVENI7.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-CAsOsf89.mjs → SceneMonitorEditor-QJK6lsVI.mjs} +3 -3
  4. package/dist/_stub.js +11 -11
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-Dn07Z4W0.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-CAOir0cS.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Bt5Kr9Ny.mjs +26 -0
  7. package/dist/{hostInit-CveEAn98.mjs → hostInit-Dbvn6lvK.mjs} +2 -2
  8. package/dist/index.js +414 -291
  9. package/dist/index.mjs +414 -291
  10. package/dist/{player-overlays-Doc1cX7w.mjs → player-overlays-WTItux9g.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-BYfbQ41D.mjs → responsive-DyNResGR.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-Cc65RL6B.mjs → scene-monitor-copy-BkDgwFUj.mjs} +1 -1
  14. package/dist/{square-JbfO0HcN.mjs → square-BPjWB7wb.mjs} +1 -1
  15. package/dist/{trash-2-CdL__eUm.mjs → trash-2-CMwOL-8u.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-DWWv2Jrw.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-59JaRQ1j.mjs} +1 -1
  17. package/package.json +1 -1
  18. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Dqo2wINy.mjs +0 -26
package/dist/index.js CHANGED
@@ -13026,6 +13026,329 @@ method(object({
13026
13026
  password: string()
13027
13027
  }), AuthResultSchema.nullable(), { kind: "mutation" }), method(object({ state: string() }), string()), method(record(string(), string()), AuthResultSchema, { kind: "mutation" }), method(object({ token: string() }), AuthResultSchema.nullable());
13028
13028
  /**
13029
+ * Query filter for settings-store collections.
13030
+ */
13031
+ var QueryFilterSchema = object({
13032
+ where: record(string(), unknown()).optional(),
13033
+ whereIn: record(string(), array(unknown())).optional(),
13034
+ whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13035
+ /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
13036
+ whereNot: record(string(), unknown()).optional(),
13037
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
13038
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
13039
+ whereNotIn: record(string(), array(unknown())).optional(),
13040
+ orderBy: object({
13041
+ field: string(),
13042
+ direction: _enum(["asc", "desc"])
13043
+ }).optional(),
13044
+ limit: number().optional(),
13045
+ offset: number().optional()
13046
+ });
13047
+ /**
13048
+ * The predicate half of a filter, for BULK MUTATIONS.
13049
+ *
13050
+ * Deliberately not `QueryFilterSchema`: `orderBy` / `limit` / `offset` have no
13051
+ * meaning for a statement that rewrites a set, and accepting them would invite
13052
+ * a caller to believe `limit` bounds the damage. Every field is optional here
13053
+ * only so the shape stays composable — the implementation REJECTS a filter
13054
+ * that compiles to no predicate, because that is the whole collection.
13055
+ */
13056
+ var MutationFilterSchema = object({
13057
+ where: record(string(), unknown()).optional(),
13058
+ whereIn: record(string(), array(unknown())).optional(),
13059
+ whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13060
+ whereNot: record(string(), unknown()).optional(),
13061
+ whereNotIn: record(string(), array(unknown())).optional()
13062
+ });
13063
+ /**
13064
+ * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
13065
+ *
13066
+ * `as` names the slot in the result, so the SAME column may be asked twice with
13067
+ * two operations (`MIN(startMs)` and `MAX(startMs)` in one round trip) — which
13068
+ * a `Record<column, op>` shape could not express.
13069
+ */
13070
+ var AggregateFieldSchema = object({
13071
+ /** Result key. */
13072
+ as: string().min(1),
13073
+ /** Column to aggregate. Must be a real column of a declared collection. */
13074
+ field: string().min(1),
13075
+ op: _enum([
13076
+ "sum",
13077
+ "min",
13078
+ "max"
13079
+ ])
13080
+ });
13081
+ /**
13082
+ * `COUNT(*)` plus one number per requested field.
13083
+ *
13084
+ * `null` means NO ROW MATCHED, never zero: a `SUM` over an empty set and a sum
13085
+ * that really is 0 are different facts, and an accounting caller that renders
13086
+ * "0 bytes, oldest = 0" for "nothing here" reports a lie about a disk.
13087
+ */
13088
+ var AggregateResultSchema = object({
13089
+ count: number().int(),
13090
+ values: record(string(), number().nullable())
13091
+ });
13092
+ /** A single stored record: `{ id, data }`. */
13093
+ var SettingsRecordSchema = object({
13094
+ id: string(),
13095
+ data: record(string(), unknown())
13096
+ });
13097
+ /**
13098
+ * One record of a BULK insert — {@link SettingsRecordSchema} with the id made
13099
+ * optional.
13100
+ *
13101
+ * A separate schema rather than loosening the shared one: every other method
13102
+ * on this cap addresses a row BY its id, and making that field optional
13103
+ * everywhere would turn a forgotten key into a silently generated one on
13104
+ * `update` and `delete` as well.
13105
+ */
13106
+ var BulkRecordSchema = object({
13107
+ id: string().optional(),
13108
+ data: record(string(), unknown())
13109
+ });
13110
+ /**
13111
+ * The database FILES one `sqlite-settings` engine process owns (D851).
13112
+ * Closed on purpose: a file is a thing the engine opens, backs up and gives a
13113
+ * serving thread, so a new one is a code change, never a string a caller
13114
+ * invents. `settings` is `camstack.db` and the default for every collection
13115
+ * that names no file.
13116
+ */
13117
+ var DataStoreDatabaseSchema = _enum([
13118
+ "settings",
13119
+ "events",
13120
+ "history"
13121
+ ]);
13122
+ DataStoreDatabaseSchema.options;
13123
+ /**
13124
+ * One write inside a {@link settingsStoreCapability.methods.transact} call.
13125
+ * The three that a "replace this set, bump that revision" write needs, plus
13126
+ * the batched upsert a rollup writer needs.
13127
+ */
13128
+ var TransactOpSchema = discriminatedUnion("op", [
13129
+ object({
13130
+ op: literal("deleteWhere"),
13131
+ collection: string(),
13132
+ filter: MutationFilterSchema
13133
+ }),
13134
+ object({
13135
+ op: literal("insertMany"),
13136
+ collection: string(),
13137
+ records: array(BulkRecordSchema).readonly()
13138
+ }),
13139
+ object({
13140
+ op: literal("update"),
13141
+ collection: string(),
13142
+ id: string(),
13143
+ data: record(string(), unknown())
13144
+ }),
13145
+ object({
13146
+ op: literal("upsertMany"),
13147
+ collection: string(),
13148
+ conflict: array(string()).readonly(),
13149
+ records: array(BulkRecordSchema).readonly()
13150
+ })
13151
+ ]);
13152
+ /**
13153
+ * The precondition of a transaction: the row `key` of `collection` must hold
13154
+ * `equals` in `column`, read INSIDE the transaction.
13155
+ */
13156
+ var TransactGuardSchema = object({
13157
+ collection: string(),
13158
+ key: string(),
13159
+ column: string(),
13160
+ equals: unknown()
13161
+ });
13162
+ /**
13163
+ * Column declaration for a structured (SQL-backed) collection.
13164
+ *
13165
+ * Logical types — the backend translates each to the matching SQLite
13166
+ * storage class and handles per-type marshaling:
13167
+ * - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
13168
+ * - `JSON` — TEXT under the hood; serialised on write, parsed on read
13169
+ * - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
13170
+ */
13171
+ var CollectionColumnSchema = object({
13172
+ name: string(),
13173
+ type: _enum([
13174
+ "TEXT",
13175
+ "INTEGER",
13176
+ "REAL",
13177
+ "JSON",
13178
+ "BOOLEAN"
13179
+ ]),
13180
+ primaryKey: boolean().optional(),
13181
+ notNull: boolean().optional(),
13182
+ unique: boolean().optional(),
13183
+ /**
13184
+ * Column DEFAULT. Required for B2: the four `ensureTable` consumers declare
13185
+ * columns like `enabled INTEGER NOT NULL DEFAULT 1`, and without this the
13186
+ * collection surface simply cannot express their existing tables — which is
13187
+ * why they were still on the uncapped `table*` API.
13188
+ */
13189
+ defaultValue: union([
13190
+ string(),
13191
+ number(),
13192
+ boolean()
13193
+ ]).optional()
13194
+ });
13195
+ var CollectionIndexSchema = object({
13196
+ name: string(),
13197
+ columns: array(string()).readonly(),
13198
+ unique: boolean().optional()
13199
+ });
13200
+ /**
13201
+ * The input of `declareCollection` — ONE schema for the door and for the
13202
+ * engine behind it, so the two surfaces cannot drift (the dispatcher forwards
13203
+ * the payload untouched).
13204
+ *
13205
+ * - `database` — the file the collection lives in (D851). Absent means
13206
+ * `settings`. A declaration naming a file other than the one the table is
13207
+ * already in is REFUSED by the engine, never moved.
13208
+ * - `primaryKey` — a COMPOSITE key, as column names. A single name is the same
13209
+ * as `primaryKey: true` on that column. A composite-keyed collection has no
13210
+ * `id`: it is written with `insertMany` / `upsertMany` / `transact` and read
13211
+ * with `query` / `count` / `aggregate` / `deleteWhere`; the calls that
13212
+ * address one row by id are refused.
13213
+ * - `withoutRowid` — emit `WITHOUT ROWID`. Requires a primary key.
13214
+ */
13215
+ var DeclareCollectionInputSchema = object({
13216
+ namespace: string().optional(),
13217
+ collection: string(),
13218
+ columns: array(CollectionColumnSchema).readonly(),
13219
+ indexes: array(CollectionIndexSchema).readonly().optional(),
13220
+ database: DataStoreDatabaseSchema.optional(),
13221
+ primaryKey: array(string()).readonly().optional(),
13222
+ withoutRowid: boolean().optional()
13223
+ });
13224
+ method(object({
13225
+ namespace: string().optional(),
13226
+ collection: string(),
13227
+ key: string()
13228
+ }), unknown(), { auth: "admin" }), method(object({
13229
+ namespace: string().optional(),
13230
+ collection: string(),
13231
+ key: string(),
13232
+ value: unknown()
13233
+ }), _void(), {
13234
+ kind: "mutation",
13235
+ auth: "admin"
13236
+ }), method(object({
13237
+ namespace: string().optional(),
13238
+ collection: string(),
13239
+ filter: QueryFilterSchema.optional(),
13240
+ columns: array(string()).readonly().optional()
13241
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
13242
+ namespace: string().optional(),
13243
+ collection: string(),
13244
+ /** Declared columns identifying the slot; must be covered by a UNIQUE
13245
+ * index on the collection. Never empty. */
13246
+ conflict: array(string()).readonly(),
13247
+ record: BulkRecordSchema
13248
+ }), object({
13249
+ /** The id the row HAS: assigned by SQLite on an insert, or the existing
13250
+ * row's own id on an update. */
13251
+ id: union([string(), number()]) }), {
13252
+ kind: "mutation",
13253
+ auth: "admin"
13254
+ }), method(object({
13255
+ namespace: string().optional(),
13256
+ collection: string(),
13257
+ conflict: array(string()).readonly(),
13258
+ records: array(BulkRecordSchema).readonly()
13259
+ }), object({ upserted: number().int() }), {
13260
+ kind: "mutation",
13261
+ auth: "admin"
13262
+ }), method(object({
13263
+ namespace: string().optional(),
13264
+ collection: string(),
13265
+ record: object({
13266
+ id: string().optional(),
13267
+ data: record(string(), unknown())
13268
+ })
13269
+ }), object({
13270
+ /**
13271
+ * The id the row ACTUALLY got (D473): the one supplied, the UUID minted
13272
+ * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
13273
+ * primary key — which is the only place an auto key is knowable.
13274
+ */
13275
+ id: union([string(), number()]) }), {
13276
+ kind: "mutation",
13277
+ auth: "admin"
13278
+ }), method(object({
13279
+ namespace: string().optional(),
13280
+ collection: string(),
13281
+ records: array(BulkRecordSchema).readonly()
13282
+ }), object({ inserted: number().int() }), {
13283
+ kind: "mutation",
13284
+ auth: "admin"
13285
+ }), method(object({
13286
+ namespace: string().optional(),
13287
+ guard: TransactGuardSchema.optional(),
13288
+ ops: array(TransactOpSchema).readonly()
13289
+ }), object({
13290
+ applied: boolean(),
13291
+ current: unknown().optional()
13292
+ }), {
13293
+ kind: "mutation",
13294
+ auth: "admin"
13295
+ }), method(object({
13296
+ namespace: string().optional(),
13297
+ collection: string(),
13298
+ id: string(),
13299
+ data: record(string(), unknown())
13300
+ }), _void(), {
13301
+ kind: "mutation",
13302
+ auth: "admin"
13303
+ }), method(object({
13304
+ namespace: string().optional(),
13305
+ collection: string(),
13306
+ key: string()
13307
+ }), _void(), {
13308
+ kind: "mutation",
13309
+ auth: "admin"
13310
+ }), method(object({
13311
+ namespace: string().optional(),
13312
+ collection: string(),
13313
+ filter: MutationFilterSchema
13314
+ }), object({ deleted: number().int() }), {
13315
+ kind: "mutation",
13316
+ auth: "admin"
13317
+ }), method(object({
13318
+ namespace: string().optional(),
13319
+ collection: string(),
13320
+ filter: MutationFilterSchema,
13321
+ data: record(string(), unknown())
13322
+ }), object({ updated: number().int() }), {
13323
+ kind: "mutation",
13324
+ auth: "admin"
13325
+ }), method(object({
13326
+ namespace: string().optional(),
13327
+ collection: string(),
13328
+ filter: QueryFilterSchema.optional()
13329
+ }), number(), { auth: "admin" }), method(object({
13330
+ namespace: string().optional(),
13331
+ collection: string(),
13332
+ fields: array(AggregateFieldSchema).readonly(),
13333
+ filter: QueryFilterSchema.optional()
13334
+ }), AggregateResultSchema, { auth: "admin" }), method(object({
13335
+ namespace: string().optional(),
13336
+ collection: string(),
13337
+ field: string(),
13338
+ bucketSize: number().int().positive(),
13339
+ origin: number().int(),
13340
+ filter: QueryFilterSchema.optional()
13341
+ }), array(object({
13342
+ bucket: number().int(),
13343
+ count: number().int()
13344
+ })).readonly(), { auth: "admin" }), method(object({
13345
+ namespace: string().optional(),
13346
+ collection: string()
13347
+ }), boolean(), { auth: "admin" }), method(DeclareCollectionInputSchema, _void(), {
13348
+ kind: "mutation",
13349
+ auth: "admin"
13350
+ });
13351
+ /**
13029
13352
  * How long one snapshot may take end to end: the pinned copy of the whole
13030
13353
  * database plus `PRAGMA integrity_check` over the copy, on the hub's slowest
13031
13354
  * disk. ~800 MB at a pessimistic 10 MB/s is under 3 minutes; the bound is
@@ -13038,7 +13361,11 @@ var DATABASE_SNAPSHOT_TIMEOUT_MS = 30 * 6e4;
13038
13361
  * database has no sidecars and is just as owned). Paths are absolute on the
13039
13362
  * owner's host.
13040
13363
  */
13041
- var DatabaseSnapshotTargetsSchema = object({ databases: array(object({ livePath: string() })) });
13364
+ var DatabaseSnapshotTargetsSchema = object({ databases: array(object({
13365
+ /** Which owned file this is — the handle `writeSnapshot` takes. */
13366
+ databaseId: DataStoreDatabaseSchema,
13367
+ livePath: string()
13368
+ })) });
13042
13369
  /** One b-tree table of the snapshot and the rows it holds. */
13043
13370
  var DatabaseSnapshotTableSchema = object({
13044
13371
  name: string(),
@@ -13071,6 +13398,10 @@ var DatabaseSnapshotResultSchema = object({
13071
13398
  /** When the pinned read transaction began (ms epoch) — the snapshot's instant. */
13072
13399
  takenAt: number()
13073
13400
  });
13401
+ /** A snapshot the owner wrote, with the file it belongs to. */
13402
+ var DatabaseSnapshotWrittenSchema = DatabaseSnapshotResultSchema.extend({ databaseId: DataStoreDatabaseSchema });
13403
+ /** Which database `writeSnapshot` copies. Required: an unstated ask is not guessed. */
13404
+ var DatabaseSnapshotRequestSchema = object({ databaseId: DataStoreDatabaseSchema });
13074
13405
  /**
13075
13406
  * A snapshot as an ARCHIVE records it (`ArchiveManifest.sqliteSnapshots`):
13076
13407
  * the same facts, with both paths relative to the archive root (the node's
@@ -13080,9 +13411,11 @@ var ArchiveSqliteSnapshotSchema = DatabaseSnapshotResultSchema.extend({
13080
13411
  /** Archive-relative path of the live database the archive does NOT carry. */
13081
13412
  livePath: string(),
13082
13413
  /** Archive-relative path of the verified copy it carries in its place. */
13083
- snapshotPath: string()
13414
+ snapshotPath: string(),
13415
+ /** Absent on an archive made before several files were owned: that was `settings`. */
13416
+ databaseId: DataStoreDatabaseSchema.optional()
13084
13417
  });
13085
- method(object({}), DatabaseSnapshotTargetsSchema, { auth: "admin" }), method(object({}), DatabaseSnapshotResultSchema, {
13418
+ method(object({}), DatabaseSnapshotTargetsSchema, { auth: "admin" }), method(DatabaseSnapshotRequestSchema, DatabaseSnapshotWrittenSchema, {
13086
13419
  kind: "mutation",
13087
13420
  auth: "admin",
13088
13421
  timeoutMs: DATABASE_SNAPSHOT_TIMEOUT_MS
@@ -13203,7 +13536,12 @@ var BackupArchiveEntrySchema = object({
13203
13536
  /** Top-level locations included in the archive (db, addons, tls, …). */
13204
13537
  locations: array(string()).readonly(),
13205
13538
  /** Present when the archive is encrypted; restore then needs that key. */
13206
- encryption: BackupArchiveEncryptionSchema.optional()
13539
+ encryption: BackupArchiveEncryptionSchema.optional(),
13540
+ /**
13541
+ * The databases the run asked to carry (its retention class). Absent on an
13542
+ * archive made before several files were owned: that was `['settings']`.
13543
+ */
13544
+ databases: array(DataStoreDatabaseSchema).readonly().optional()
13207
13545
  });
13208
13546
  var BackupEntrySchema = object({
13209
13547
  id: string(),
@@ -13237,7 +13575,12 @@ var ArchiveManifestSchema = object({
13237
13575
  * Live SQLite databases this archive carries as their OWNER's verified
13238
13576
  * snapshot instead of as files (D693). Absent on archives made before.
13239
13577
  */
13240
- sqliteSnapshots: array(ArchiveSqliteSnapshotSchema).optional()
13578
+ sqliteSnapshots: array(ArchiveSqliteSnapshotSchema).optional(),
13579
+ /**
13580
+ * Owned database files the run did NOT carry (not selected): left out of the
13581
+ * tar and the entry list alike. Absent when every owned file was carried.
13582
+ */
13583
+ omittedDatabases: array(DataStoreDatabaseSchema).optional()
13241
13584
  });
13242
13585
  var LocationStatSchema = object({
13243
13586
  name: string(),
@@ -13359,6 +13702,12 @@ var BackupScheduleSchema = object({
13359
13702
  /** Optional subset of source locations to include; omitted = all. */
13360
13703
  dataSources: array(string()).readonly().optional(),
13361
13704
  /**
13705
+ * Which database files this schedule carries. Absent = `['settings']`
13706
+ * (an unstated ask is the minimum, D382). Events and history run weekly,
13707
+ * settings nightly (D852).
13708
+ */
13709
+ databases: array(DataStoreDatabaseSchema).readonly().optional(),
13710
+ /**
13362
13711
  * ms-epoch of the last tick that FIRED this schedule. Stamped before the
13363
13712
  * archive runs (it is the dedupe anchor), so it says "attempted", never
13364
13713
  * "succeeded" — a run refused by every destination stamps it too.
@@ -13382,7 +13731,9 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
13382
13731
  * retention). Omitted = each destination's own policy
13383
13732
  * retention (manual runs).
13384
13733
  */
13385
- retentionCount: number().int().min(1).max(1e3).optional()
13734
+ retentionCount: number().int().min(1).max(1e3).optional(),
13735
+ /** Database files to carry; omitted = `['settings']`. */
13736
+ databases: array(DataStoreDatabaseSchema).optional()
13386
13737
  }).optional(), BackupTriggerResultSchema, {
13387
13738
  kind: "mutation",
13388
13739
  auth: "admin"
@@ -13457,14 +13808,18 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
13457
13808
  ok: boolean(),
13458
13809
  error: string().optional(),
13459
13810
  nextRuns: array(number()).readonly()
13460
- })), method(_void(), array(BackupScheduleSchema).readonly(), { auth: "admin" }), method(object({
13811
+ })), method(_void(), array(BackupScheduleSchema).readonly(), { auth: "admin" }), method(_void(), object({
13812
+ answered: boolean(),
13813
+ databases: array(DataStoreDatabaseSchema).readonly()
13814
+ }), { auth: "admin" }), method(object({
13461
13815
  id: string().optional(),
13462
13816
  label: string(),
13463
13817
  cron: string(),
13464
13818
  enabled: boolean(),
13465
13819
  locationIds: array(string()).readonly(),
13466
13820
  retentionCount: number().int().min(1).max(1e3),
13467
- dataSources: array(string()).readonly().optional()
13821
+ dataSources: array(string()).readonly().optional(),
13822
+ databases: array(DataStoreDatabaseSchema).readonly().optional()
13468
13823
  }), BackupScheduleSchema, {
13469
13824
  kind: "mutation",
13470
13825
  auth: "admin"
@@ -15131,282 +15486,6 @@ method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" }
15131
15486
  timeoutMs: 30 * 6e4
15132
15487
  });
15133
15488
  /**
15134
- * Query filter for settings-store collections.
15135
- */
15136
- var QueryFilterSchema = object({
15137
- where: record(string(), unknown()).optional(),
15138
- whereIn: record(string(), array(unknown())).optional(),
15139
- whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
15140
- /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
15141
- whereNot: record(string(), unknown()).optional(),
15142
- /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
15143
- * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
15144
- whereNotIn: record(string(), array(unknown())).optional(),
15145
- orderBy: object({
15146
- field: string(),
15147
- direction: _enum(["asc", "desc"])
15148
- }).optional(),
15149
- limit: number().optional(),
15150
- offset: number().optional()
15151
- });
15152
- /**
15153
- * The predicate half of a filter, for BULK MUTATIONS.
15154
- *
15155
- * Deliberately not `QueryFilterSchema`: `orderBy` / `limit` / `offset` have no
15156
- * meaning for a statement that rewrites a set, and accepting them would invite
15157
- * a caller to believe `limit` bounds the damage. Every field is optional here
15158
- * only so the shape stays composable — the implementation REJECTS a filter
15159
- * that compiles to no predicate, because that is the whole collection.
15160
- */
15161
- var MutationFilterSchema = object({
15162
- where: record(string(), unknown()).optional(),
15163
- whereIn: record(string(), array(unknown())).optional(),
15164
- whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
15165
- whereNot: record(string(), unknown()).optional(),
15166
- whereNotIn: record(string(), array(unknown())).optional()
15167
- });
15168
- /**
15169
- * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
15170
- *
15171
- * `as` names the slot in the result, so the SAME column may be asked twice with
15172
- * two operations (`MIN(startMs)` and `MAX(startMs)` in one round trip) — which
15173
- * a `Record<column, op>` shape could not express.
15174
- */
15175
- var AggregateFieldSchema = object({
15176
- /** Result key. */
15177
- as: string().min(1),
15178
- /** Column to aggregate. Must be a real column of a declared collection. */
15179
- field: string().min(1),
15180
- op: _enum([
15181
- "sum",
15182
- "min",
15183
- "max"
15184
- ])
15185
- });
15186
- /**
15187
- * `COUNT(*)` plus one number per requested field.
15188
- *
15189
- * `null` means NO ROW MATCHED, never zero: a `SUM` over an empty set and a sum
15190
- * that really is 0 are different facts, and an accounting caller that renders
15191
- * "0 bytes, oldest = 0" for "nothing here" reports a lie about a disk.
15192
- */
15193
- var AggregateResultSchema = object({
15194
- count: number().int(),
15195
- values: record(string(), number().nullable())
15196
- });
15197
- /** A single stored record: `{ id, data }`. */
15198
- var SettingsRecordSchema = object({
15199
- id: string(),
15200
- data: record(string(), unknown())
15201
- });
15202
- /**
15203
- * One record of a BULK insert — {@link SettingsRecordSchema} with the id made
15204
- * optional.
15205
- *
15206
- * A separate schema rather than loosening the shared one: every other method
15207
- * on this cap addresses a row BY its id, and making that field optional
15208
- * everywhere would turn a forgotten key into a silently generated one on
15209
- * `update` and `delete` as well.
15210
- */
15211
- var BulkRecordSchema = object({
15212
- id: string().optional(),
15213
- data: record(string(), unknown())
15214
- });
15215
- /**
15216
- * One write inside a {@link settingsStoreCapability.methods.transact} call.
15217
- * Only the three that a "replace this set, bump that revision" write needs.
15218
- */
15219
- var TransactOpSchema = discriminatedUnion("op", [
15220
- object({
15221
- op: literal("deleteWhere"),
15222
- collection: string(),
15223
- filter: MutationFilterSchema
15224
- }),
15225
- object({
15226
- op: literal("insertMany"),
15227
- collection: string(),
15228
- records: array(BulkRecordSchema).readonly()
15229
- }),
15230
- object({
15231
- op: literal("update"),
15232
- collection: string(),
15233
- id: string(),
15234
- data: record(string(), unknown())
15235
- })
15236
- ]);
15237
- /**
15238
- * The precondition of a transaction: the row `key` of `collection` must hold
15239
- * `equals` in `column`, read INSIDE the transaction.
15240
- */
15241
- var TransactGuardSchema = object({
15242
- collection: string(),
15243
- key: string(),
15244
- column: string(),
15245
- equals: unknown()
15246
- });
15247
- /**
15248
- * Column declaration for a structured (SQL-backed) collection.
15249
- *
15250
- * Logical types — the backend translates each to the matching SQLite
15251
- * storage class and handles per-type marshaling:
15252
- * - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
15253
- * - `JSON` — TEXT under the hood; serialised on write, parsed on read
15254
- * - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
15255
- */
15256
- var CollectionColumnSchema = object({
15257
- name: string(),
15258
- type: _enum([
15259
- "TEXT",
15260
- "INTEGER",
15261
- "REAL",
15262
- "JSON",
15263
- "BOOLEAN"
15264
- ]),
15265
- primaryKey: boolean().optional(),
15266
- notNull: boolean().optional(),
15267
- unique: boolean().optional(),
15268
- /**
15269
- * Column DEFAULT. Required for B2: the four `ensureTable` consumers declare
15270
- * columns like `enabled INTEGER NOT NULL DEFAULT 1`, and without this the
15271
- * collection surface simply cannot express their existing tables — which is
15272
- * why they were still on the uncapped `table*` API.
15273
- */
15274
- defaultValue: union([
15275
- string(),
15276
- number(),
15277
- boolean()
15278
- ]).optional()
15279
- });
15280
- var CollectionIndexSchema = object({
15281
- name: string(),
15282
- columns: array(string()).readonly(),
15283
- unique: boolean().optional()
15284
- });
15285
- method(object({
15286
- namespace: string().optional(),
15287
- collection: string(),
15288
- key: string()
15289
- }), unknown(), { auth: "admin" }), method(object({
15290
- namespace: string().optional(),
15291
- collection: string(),
15292
- key: string(),
15293
- value: unknown()
15294
- }), _void(), {
15295
- kind: "mutation",
15296
- auth: "admin"
15297
- }), method(object({
15298
- namespace: string().optional(),
15299
- collection: string(),
15300
- filter: QueryFilterSchema.optional(),
15301
- columns: array(string()).readonly().optional()
15302
- }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
15303
- namespace: string().optional(),
15304
- collection: string(),
15305
- /** Declared columns identifying the slot; must be covered by a UNIQUE
15306
- * index on the collection. Never empty. */
15307
- conflict: array(string()).readonly(),
15308
- record: BulkRecordSchema
15309
- }), object({
15310
- /** The id the row HAS: assigned by SQLite on an insert, or the existing
15311
- * row's own id on an update. */
15312
- id: union([string(), number()]) }), {
15313
- kind: "mutation",
15314
- auth: "admin"
15315
- }), method(object({
15316
- namespace: string().optional(),
15317
- collection: string(),
15318
- record: object({
15319
- id: string().optional(),
15320
- data: record(string(), unknown())
15321
- })
15322
- }), object({
15323
- /**
15324
- * The id the row ACTUALLY got (D473): the one supplied, the UUID minted
15325
- * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
15326
- * primary key — which is the only place an auto key is knowable.
15327
- */
15328
- id: union([string(), number()]) }), {
15329
- kind: "mutation",
15330
- auth: "admin"
15331
- }), method(object({
15332
- namespace: string().optional(),
15333
- collection: string(),
15334
- records: array(BulkRecordSchema).readonly()
15335
- }), object({ inserted: number().int() }), {
15336
- kind: "mutation",
15337
- auth: "admin"
15338
- }), method(object({
15339
- namespace: string().optional(),
15340
- guard: TransactGuardSchema.optional(),
15341
- ops: array(TransactOpSchema).readonly()
15342
- }), object({
15343
- applied: boolean(),
15344
- current: unknown().optional()
15345
- }), {
15346
- kind: "mutation",
15347
- auth: "admin"
15348
- }), method(object({
15349
- namespace: string().optional(),
15350
- collection: string(),
15351
- id: string(),
15352
- data: record(string(), unknown())
15353
- }), _void(), {
15354
- kind: "mutation",
15355
- auth: "admin"
15356
- }), method(object({
15357
- namespace: string().optional(),
15358
- collection: string(),
15359
- key: string()
15360
- }), _void(), {
15361
- kind: "mutation",
15362
- auth: "admin"
15363
- }), method(object({
15364
- namespace: string().optional(),
15365
- collection: string(),
15366
- filter: MutationFilterSchema
15367
- }), object({ deleted: number().int() }), {
15368
- kind: "mutation",
15369
- auth: "admin"
15370
- }), method(object({
15371
- namespace: string().optional(),
15372
- collection: string(),
15373
- filter: MutationFilterSchema,
15374
- data: record(string(), unknown())
15375
- }), object({ updated: number().int() }), {
15376
- kind: "mutation",
15377
- auth: "admin"
15378
- }), method(object({
15379
- namespace: string().optional(),
15380
- collection: string(),
15381
- filter: QueryFilterSchema.optional()
15382
- }), number(), { auth: "admin" }), method(object({
15383
- namespace: string().optional(),
15384
- collection: string(),
15385
- fields: array(AggregateFieldSchema).readonly(),
15386
- filter: QueryFilterSchema.optional()
15387
- }), AggregateResultSchema, { auth: "admin" }), method(object({
15388
- namespace: string().optional(),
15389
- collection: string(),
15390
- field: string(),
15391
- bucketSize: number().int().positive(),
15392
- origin: number().int(),
15393
- filter: QueryFilterSchema.optional()
15394
- }), array(object({
15395
- bucket: number().int(),
15396
- count: number().int()
15397
- })).readonly(), { auth: "admin" }), method(object({
15398
- namespace: string().optional(),
15399
- collection: string()
15400
- }), boolean(), { auth: "admin" }), method(object({
15401
- namespace: string().optional(),
15402
- collection: string(),
15403
- columns: array(CollectionColumnSchema).readonly(),
15404
- indexes: array(CollectionIndexSchema).readonly().optional()
15405
- }), _void(), {
15406
- kind: "mutation",
15407
- auth: "admin"
15408
- });
15409
- /**
15410
15489
  * What one engine says about itself. The orchestrator uses `kind` to pick
15411
15490
  * a registrant for a collection; `engineId` is what a log line names when
15412
15491
  * a call is routed or refused.
@@ -15486,6 +15565,14 @@ id: union([string(), number()]) }), {
15486
15565
  }), object({ id: union([string(), number()]) }), {
15487
15566
  kind: "mutation",
15488
15567
  auth: "admin"
15568
+ }), method(object({
15569
+ namespace: string().optional(),
15570
+ collection: string(),
15571
+ conflict: array(string()).readonly(),
15572
+ records: array(BulkRecordSchema).readonly()
15573
+ }), object({ upserted: number().int() }), {
15574
+ kind: "mutation",
15575
+ auth: "admin"
15489
15576
  }), method(object({
15490
15577
  namespace: string().optional(),
15491
15578
  collection: string(),
@@ -15555,12 +15642,7 @@ id: union([string(), number()]) }), {
15555
15642
  })).readonly(), { auth: "admin" }), method(object({
15556
15643
  namespace: string().optional(),
15557
15644
  collection: string()
15558
- }), boolean(), { auth: "admin" }), method(object({
15559
- namespace: string().optional(),
15560
- collection: string(),
15561
- columns: array(CollectionColumnSchema).readonly(),
15562
- indexes: array(CollectionIndexSchema).readonly().optional()
15563
- }), _void(), {
15645
+ }), boolean(), { auth: "admin" }), method(DeclareCollectionInputSchema, _void(), {
15564
15646
  kind: "mutation",
15565
15647
  auth: "admin"
15566
15648
  });
@@ -24567,6 +24649,9 @@ var RetrainFrameReviewSchema = object({
24567
24649
  /** The baseline was re-derived, not snapshotted (a pre-origin row). */
24568
24650
  approximate: boolean(),
24569
24651
  origin: RetrainOriginSchema.optional(),
24652
+ /** The class / label the box carries NOW (a removed box: its origin's). Absent on an older hub. */
24653
+ macroClass: RetrainMacroClassSchema.optional(),
24654
+ label: string().optional(),
24570
24655
  iou: number().optional()
24571
24656
  })).readonly(),
24572
24657
  summary: object({
@@ -32436,6 +32521,18 @@ var CalendarInfoSchema = object({
32436
32521
  source: CalendarSourceKindSchema,
32437
32522
  enabled: boolean()
32438
32523
  });
32524
+ /**
32525
+ * Time contract of {@link CalendarEvent}.
32526
+ *
32527
+ * - Timed event: `startMs` / `endMs` are real instants; `endMs` is exclusive.
32528
+ * - All-day event (`allDay: true`): the event is a run of calendar DATES, not
32529
+ * instants. `startMs` is UTC midnight of the first date and `endMs` is UTC
32530
+ * midnight of the day AFTER the last date (RFC 5545 exclusive DTEND), so a
32531
+ * one-day event spans exactly 24 h. Every provider produces that and no
32532
+ * consumer may read the instants in a local timezone: use
32533
+ * {@link calendarEventLocalSpan}. Reading UTC midnight as local time put an
32534
+ * all-day event on the following day for any viewer ahead of UTC.
32535
+ */
32439
32536
  var CalendarEventSchema = object({
32440
32537
  id: string().min(1),
32441
32538
  calendarId: string().min(1),
@@ -34578,7 +34675,15 @@ var HubAddressBookSchema = object({
34578
34675
  publicEndpoint: HubAddressRoleResolutionSchema
34579
34676
  }),
34580
34677
  /** The `hub=` an app link carries (D709), or null. */
34581
- appLinkHub: string().nullable()
34678
+ appLinkHub: string().nullable(),
34679
+ /**
34680
+ * Every origin a browser can really reach this hub at, in the scheme each
34681
+ * listener serves: `https://<lan>:<httpsPort>`, and `http://<lan>:<httpPort>`
34682
+ * while LAN HTTP is on, plus the public and custom addresses. Distinct from
34683
+ * `rows`, which show `http://` only while LAN HTTP is on. Never loopback,
34684
+ * never the app link. Absent on a hub older than D794's amendment.
34685
+ */
34686
+ listenerOrigins: array(string()).readonly().optional()
34582
34687
  });
34583
34688
  var AllowedAddressesSchema = object({
34584
34689
  /**
@@ -41815,6 +41920,12 @@ Object.freeze({
41815
41920
  addonId: null,
41816
41921
  access: "view"
41817
41922
  },
41923
+ "backup.listAvailableDatabases": {
41924
+ capName: "backup",
41925
+ capScope: "system",
41926
+ addonId: null,
41927
+ access: "view"
41928
+ },
41818
41929
  "backup.listDestinations": {
41819
41930
  capName: "backup",
41820
41931
  capScope: "system",
@@ -42535,6 +42646,12 @@ Object.freeze({
42535
42646
  addonId: null,
42536
42647
  access: "create"
42537
42648
  },
42649
+ "dataStoreProvider.upsertMany": {
42650
+ capName: "data-store-provider",
42651
+ capScope: "system",
42652
+ addonId: null,
42653
+ access: "create"
42654
+ },
42538
42655
  "dayNight.getOptions": {
42539
42656
  capName: "day-night",
42540
42657
  capScope: "device",
@@ -47383,6 +47500,12 @@ Object.freeze({
47383
47500
  addonId: null,
47384
47501
  access: "create"
47385
47502
  },
47503
+ "settingsStore.upsertMany": {
47504
+ capName: "settings-store",
47505
+ capScope: "system",
47506
+ addonId: null,
47507
+ access: "create"
47508
+ },
47386
47509
  "smoke.getStatus": {
47387
47510
  capName: "smoke",
47388
47511
  capScope: "device",