@camstack/addon-model-studio 1.1.254 → 1.1.256

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-CDQwRCoT.mjs → MotionZonesSettings-BoNl71uF.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-Bqjt6j-n.mjs → PrivacyMaskSettings-DSQQH-FH.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-CSttF4Hq.mjs → SceneMonitorEditor-tFGk_bs2.mjs} +3 -3
  4. package/dist/_stub.js +11 -11
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DCyvhci7.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BqCn1ABp.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-JlsKitOu.mjs +26 -0
  7. package/dist/{hostInit-DnyEep3P.mjs → hostInit-DMxW9qi0.mjs} +2 -2
  8. package/dist/model-studio.addon.js +414 -291
  9. package/dist/model-studio.addon.mjs +414 -291
  10. package/dist/{player-overlays-D3nGwf3m.mjs → player-overlays-_tIuC53p.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-DyGAg9qU.mjs → responsive-D99yIECE.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-CIw9oZTb.mjs → scene-monitor-copy-BCE1iubY.mjs} +1 -1
  14. package/dist/{square-DqVANN3Q.mjs → square-C3_2L-a4.mjs} +1 -1
  15. package/dist/{trash-2-CQbGsv9O.mjs → trash-2-JESKnX5Q.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-B4EACOgY.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DeNEhAVI.mjs} +1 -1
  17. package/package.json +1 -1
  18. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CW7-7FqB.mjs +0 -26
@@ -13638,6 +13638,329 @@ method(object({
13638
13638
  password: string()
13639
13639
  }), AuthResultSchema.nullable(), { kind: "mutation" }), method(object({ state: string() }), string()), method(record(string(), string()), AuthResultSchema, { kind: "mutation" }), method(object({ token: string() }), AuthResultSchema.nullable());
13640
13640
  /**
13641
+ * Query filter for settings-store collections.
13642
+ */
13643
+ var QueryFilterSchema = object({
13644
+ where: record(string(), unknown()).optional(),
13645
+ whereIn: record(string(), array(unknown())).optional(),
13646
+ whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13647
+ /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
13648
+ whereNot: record(string(), unknown()).optional(),
13649
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
13650
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
13651
+ whereNotIn: record(string(), array(unknown())).optional(),
13652
+ orderBy: object({
13653
+ field: string(),
13654
+ direction: _enum(["asc", "desc"])
13655
+ }).optional(),
13656
+ limit: number().optional(),
13657
+ offset: number().optional()
13658
+ });
13659
+ /**
13660
+ * The predicate half of a filter, for BULK MUTATIONS.
13661
+ *
13662
+ * Deliberately not `QueryFilterSchema`: `orderBy` / `limit` / `offset` have no
13663
+ * meaning for a statement that rewrites a set, and accepting them would invite
13664
+ * a caller to believe `limit` bounds the damage. Every field is optional here
13665
+ * only so the shape stays composable — the implementation REJECTS a filter
13666
+ * that compiles to no predicate, because that is the whole collection.
13667
+ */
13668
+ var MutationFilterSchema = object({
13669
+ where: record(string(), unknown()).optional(),
13670
+ whereIn: record(string(), array(unknown())).optional(),
13671
+ whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13672
+ whereNot: record(string(), unknown()).optional(),
13673
+ whereNotIn: record(string(), array(unknown())).optional()
13674
+ });
13675
+ /**
13676
+ * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
13677
+ *
13678
+ * `as` names the slot in the result, so the SAME column may be asked twice with
13679
+ * two operations (`MIN(startMs)` and `MAX(startMs)` in one round trip) — which
13680
+ * a `Record<column, op>` shape could not express.
13681
+ */
13682
+ var AggregateFieldSchema = object({
13683
+ /** Result key. */
13684
+ as: string().min(1),
13685
+ /** Column to aggregate. Must be a real column of a declared collection. */
13686
+ field: string().min(1),
13687
+ op: _enum([
13688
+ "sum",
13689
+ "min",
13690
+ "max"
13691
+ ])
13692
+ });
13693
+ /**
13694
+ * `COUNT(*)` plus one number per requested field.
13695
+ *
13696
+ * `null` means NO ROW MATCHED, never zero: a `SUM` over an empty set and a sum
13697
+ * that really is 0 are different facts, and an accounting caller that renders
13698
+ * "0 bytes, oldest = 0" for "nothing here" reports a lie about a disk.
13699
+ */
13700
+ var AggregateResultSchema = object({
13701
+ count: number().int(),
13702
+ values: record(string(), number().nullable())
13703
+ });
13704
+ /** A single stored record: `{ id, data }`. */
13705
+ var SettingsRecordSchema = object({
13706
+ id: string(),
13707
+ data: record(string(), unknown())
13708
+ });
13709
+ /**
13710
+ * One record of a BULK insert — {@link SettingsRecordSchema} with the id made
13711
+ * optional.
13712
+ *
13713
+ * A separate schema rather than loosening the shared one: every other method
13714
+ * on this cap addresses a row BY its id, and making that field optional
13715
+ * everywhere would turn a forgotten key into a silently generated one on
13716
+ * `update` and `delete` as well.
13717
+ */
13718
+ var BulkRecordSchema = object({
13719
+ id: string().optional(),
13720
+ data: record(string(), unknown())
13721
+ });
13722
+ /**
13723
+ * The database FILES one `sqlite-settings` engine process owns (D851).
13724
+ * Closed on purpose: a file is a thing the engine opens, backs up and gives a
13725
+ * serving thread, so a new one is a code change, never a string a caller
13726
+ * invents. `settings` is `camstack.db` and the default for every collection
13727
+ * that names no file.
13728
+ */
13729
+ var DataStoreDatabaseSchema = _enum([
13730
+ "settings",
13731
+ "events",
13732
+ "history"
13733
+ ]);
13734
+ DataStoreDatabaseSchema.options;
13735
+ /**
13736
+ * One write inside a {@link settingsStoreCapability.methods.transact} call.
13737
+ * The three that a "replace this set, bump that revision" write needs, plus
13738
+ * the batched upsert a rollup writer needs.
13739
+ */
13740
+ var TransactOpSchema = discriminatedUnion("op", [
13741
+ object({
13742
+ op: literal("deleteWhere"),
13743
+ collection: string(),
13744
+ filter: MutationFilterSchema
13745
+ }),
13746
+ object({
13747
+ op: literal("insertMany"),
13748
+ collection: string(),
13749
+ records: array(BulkRecordSchema).readonly()
13750
+ }),
13751
+ object({
13752
+ op: literal("update"),
13753
+ collection: string(),
13754
+ id: string(),
13755
+ data: record(string(), unknown())
13756
+ }),
13757
+ object({
13758
+ op: literal("upsertMany"),
13759
+ collection: string(),
13760
+ conflict: array(string()).readonly(),
13761
+ records: array(BulkRecordSchema).readonly()
13762
+ })
13763
+ ]);
13764
+ /**
13765
+ * The precondition of a transaction: the row `key` of `collection` must hold
13766
+ * `equals` in `column`, read INSIDE the transaction.
13767
+ */
13768
+ var TransactGuardSchema = object({
13769
+ collection: string(),
13770
+ key: string(),
13771
+ column: string(),
13772
+ equals: unknown()
13773
+ });
13774
+ /**
13775
+ * Column declaration for a structured (SQL-backed) collection.
13776
+ *
13777
+ * Logical types — the backend translates each to the matching SQLite
13778
+ * storage class and handles per-type marshaling:
13779
+ * - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
13780
+ * - `JSON` — TEXT under the hood; serialised on write, parsed on read
13781
+ * - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
13782
+ */
13783
+ var CollectionColumnSchema = object({
13784
+ name: string(),
13785
+ type: _enum([
13786
+ "TEXT",
13787
+ "INTEGER",
13788
+ "REAL",
13789
+ "JSON",
13790
+ "BOOLEAN"
13791
+ ]),
13792
+ primaryKey: boolean().optional(),
13793
+ notNull: boolean().optional(),
13794
+ unique: boolean().optional(),
13795
+ /**
13796
+ * Column DEFAULT. Required for B2: the four `ensureTable` consumers declare
13797
+ * columns like `enabled INTEGER NOT NULL DEFAULT 1`, and without this the
13798
+ * collection surface simply cannot express their existing tables — which is
13799
+ * why they were still on the uncapped `table*` API.
13800
+ */
13801
+ defaultValue: union([
13802
+ string(),
13803
+ number(),
13804
+ boolean()
13805
+ ]).optional()
13806
+ });
13807
+ var CollectionIndexSchema = object({
13808
+ name: string(),
13809
+ columns: array(string()).readonly(),
13810
+ unique: boolean().optional()
13811
+ });
13812
+ /**
13813
+ * The input of `declareCollection` — ONE schema for the door and for the
13814
+ * engine behind it, so the two surfaces cannot drift (the dispatcher forwards
13815
+ * the payload untouched).
13816
+ *
13817
+ * - `database` — the file the collection lives in (D851). Absent means
13818
+ * `settings`. A declaration naming a file other than the one the table is
13819
+ * already in is REFUSED by the engine, never moved.
13820
+ * - `primaryKey` — a COMPOSITE key, as column names. A single name is the same
13821
+ * as `primaryKey: true` on that column. A composite-keyed collection has no
13822
+ * `id`: it is written with `insertMany` / `upsertMany` / `transact` and read
13823
+ * with `query` / `count` / `aggregate` / `deleteWhere`; the calls that
13824
+ * address one row by id are refused.
13825
+ * - `withoutRowid` — emit `WITHOUT ROWID`. Requires a primary key.
13826
+ */
13827
+ var DeclareCollectionInputSchema = object({
13828
+ namespace: string().optional(),
13829
+ collection: string(),
13830
+ columns: array(CollectionColumnSchema).readonly(),
13831
+ indexes: array(CollectionIndexSchema).readonly().optional(),
13832
+ database: DataStoreDatabaseSchema.optional(),
13833
+ primaryKey: array(string()).readonly().optional(),
13834
+ withoutRowid: boolean().optional()
13835
+ });
13836
+ method(object({
13837
+ namespace: string().optional(),
13838
+ collection: string(),
13839
+ key: string()
13840
+ }), unknown(), { auth: "admin" }), method(object({
13841
+ namespace: string().optional(),
13842
+ collection: string(),
13843
+ key: string(),
13844
+ value: unknown()
13845
+ }), _void(), {
13846
+ kind: "mutation",
13847
+ auth: "admin"
13848
+ }), method(object({
13849
+ namespace: string().optional(),
13850
+ collection: string(),
13851
+ filter: QueryFilterSchema.optional(),
13852
+ columns: array(string()).readonly().optional()
13853
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
13854
+ namespace: string().optional(),
13855
+ collection: string(),
13856
+ /** Declared columns identifying the slot; must be covered by a UNIQUE
13857
+ * index on the collection. Never empty. */
13858
+ conflict: array(string()).readonly(),
13859
+ record: BulkRecordSchema
13860
+ }), object({
13861
+ /** The id the row HAS: assigned by SQLite on an insert, or the existing
13862
+ * row's own id on an update. */
13863
+ id: union([string(), number()]) }), {
13864
+ kind: "mutation",
13865
+ auth: "admin"
13866
+ }), method(object({
13867
+ namespace: string().optional(),
13868
+ collection: string(),
13869
+ conflict: array(string()).readonly(),
13870
+ records: array(BulkRecordSchema).readonly()
13871
+ }), object({ upserted: number().int() }), {
13872
+ kind: "mutation",
13873
+ auth: "admin"
13874
+ }), method(object({
13875
+ namespace: string().optional(),
13876
+ collection: string(),
13877
+ record: object({
13878
+ id: string().optional(),
13879
+ data: record(string(), unknown())
13880
+ })
13881
+ }), object({
13882
+ /**
13883
+ * The id the row ACTUALLY got (D473): the one supplied, the UUID minted
13884
+ * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
13885
+ * primary key — which is the only place an auto key is knowable.
13886
+ */
13887
+ id: union([string(), number()]) }), {
13888
+ kind: "mutation",
13889
+ auth: "admin"
13890
+ }), method(object({
13891
+ namespace: string().optional(),
13892
+ collection: string(),
13893
+ records: array(BulkRecordSchema).readonly()
13894
+ }), object({ inserted: number().int() }), {
13895
+ kind: "mutation",
13896
+ auth: "admin"
13897
+ }), method(object({
13898
+ namespace: string().optional(),
13899
+ guard: TransactGuardSchema.optional(),
13900
+ ops: array(TransactOpSchema).readonly()
13901
+ }), object({
13902
+ applied: boolean(),
13903
+ current: unknown().optional()
13904
+ }), {
13905
+ kind: "mutation",
13906
+ auth: "admin"
13907
+ }), method(object({
13908
+ namespace: string().optional(),
13909
+ collection: string(),
13910
+ id: string(),
13911
+ data: record(string(), unknown())
13912
+ }), _void(), {
13913
+ kind: "mutation",
13914
+ auth: "admin"
13915
+ }), method(object({
13916
+ namespace: string().optional(),
13917
+ collection: string(),
13918
+ key: string()
13919
+ }), _void(), {
13920
+ kind: "mutation",
13921
+ auth: "admin"
13922
+ }), method(object({
13923
+ namespace: string().optional(),
13924
+ collection: string(),
13925
+ filter: MutationFilterSchema
13926
+ }), object({ deleted: number().int() }), {
13927
+ kind: "mutation",
13928
+ auth: "admin"
13929
+ }), method(object({
13930
+ namespace: string().optional(),
13931
+ collection: string(),
13932
+ filter: MutationFilterSchema,
13933
+ data: record(string(), unknown())
13934
+ }), object({ updated: number().int() }), {
13935
+ kind: "mutation",
13936
+ auth: "admin"
13937
+ }), method(object({
13938
+ namespace: string().optional(),
13939
+ collection: string(),
13940
+ filter: QueryFilterSchema.optional()
13941
+ }), number(), { auth: "admin" }), method(object({
13942
+ namespace: string().optional(),
13943
+ collection: string(),
13944
+ fields: array(AggregateFieldSchema).readonly(),
13945
+ filter: QueryFilterSchema.optional()
13946
+ }), AggregateResultSchema, { auth: "admin" }), method(object({
13947
+ namespace: string().optional(),
13948
+ collection: string(),
13949
+ field: string(),
13950
+ bucketSize: number().int().positive(),
13951
+ origin: number().int(),
13952
+ filter: QueryFilterSchema.optional()
13953
+ }), array(object({
13954
+ bucket: number().int(),
13955
+ count: number().int()
13956
+ })).readonly(), { auth: "admin" }), method(object({
13957
+ namespace: string().optional(),
13958
+ collection: string()
13959
+ }), boolean(), { auth: "admin" }), method(DeclareCollectionInputSchema, _void(), {
13960
+ kind: "mutation",
13961
+ auth: "admin"
13962
+ });
13963
+ /**
13641
13964
  * How long one snapshot may take end to end: the pinned copy of the whole
13642
13965
  * database plus `PRAGMA integrity_check` over the copy, on the hub's slowest
13643
13966
  * disk. ~800 MB at a pessimistic 10 MB/s is under 3 minutes; the bound is
@@ -13650,7 +13973,11 @@ var DATABASE_SNAPSHOT_TIMEOUT_MS = 30 * 6e4;
13650
13973
  * database has no sidecars and is just as owned). Paths are absolute on the
13651
13974
  * owner's host.
13652
13975
  */
13653
- var DatabaseSnapshotTargetsSchema = object({ databases: array(object({ livePath: string() })) });
13976
+ var DatabaseSnapshotTargetsSchema = object({ databases: array(object({
13977
+ /** Which owned file this is — the handle `writeSnapshot` takes. */
13978
+ databaseId: DataStoreDatabaseSchema,
13979
+ livePath: string()
13980
+ })) });
13654
13981
  /** One b-tree table of the snapshot and the rows it holds. */
13655
13982
  var DatabaseSnapshotTableSchema = object({
13656
13983
  name: string(),
@@ -13683,6 +14010,10 @@ var DatabaseSnapshotResultSchema = object({
13683
14010
  /** When the pinned read transaction began (ms epoch) — the snapshot's instant. */
13684
14011
  takenAt: number()
13685
14012
  });
14013
+ /** A snapshot the owner wrote, with the file it belongs to. */
14014
+ var DatabaseSnapshotWrittenSchema = DatabaseSnapshotResultSchema.extend({ databaseId: DataStoreDatabaseSchema });
14015
+ /** Which database `writeSnapshot` copies. Required: an unstated ask is not guessed. */
14016
+ var DatabaseSnapshotRequestSchema = object({ databaseId: DataStoreDatabaseSchema });
13686
14017
  /**
13687
14018
  * A snapshot as an ARCHIVE records it (`ArchiveManifest.sqliteSnapshots`):
13688
14019
  * the same facts, with both paths relative to the archive root (the node's
@@ -13692,9 +14023,11 @@ var ArchiveSqliteSnapshotSchema = DatabaseSnapshotResultSchema.extend({
13692
14023
  /** Archive-relative path of the live database the archive does NOT carry. */
13693
14024
  livePath: string(),
13694
14025
  /** Archive-relative path of the verified copy it carries in its place. */
13695
- snapshotPath: string()
14026
+ snapshotPath: string(),
14027
+ /** Absent on an archive made before several files were owned: that was `settings`. */
14028
+ databaseId: DataStoreDatabaseSchema.optional()
13696
14029
  });
13697
- method(object({}), DatabaseSnapshotTargetsSchema, { auth: "admin" }), method(object({}), DatabaseSnapshotResultSchema, {
14030
+ method(object({}), DatabaseSnapshotTargetsSchema, { auth: "admin" }), method(DatabaseSnapshotRequestSchema, DatabaseSnapshotWrittenSchema, {
13698
14031
  kind: "mutation",
13699
14032
  auth: "admin",
13700
14033
  timeoutMs: DATABASE_SNAPSHOT_TIMEOUT_MS
@@ -13815,7 +14148,12 @@ var BackupArchiveEntrySchema = object({
13815
14148
  /** Top-level locations included in the archive (db, addons, tls, …). */
13816
14149
  locations: array(string()).readonly(),
13817
14150
  /** Present when the archive is encrypted; restore then needs that key. */
13818
- encryption: BackupArchiveEncryptionSchema.optional()
14151
+ encryption: BackupArchiveEncryptionSchema.optional(),
14152
+ /**
14153
+ * The databases the run asked to carry (its retention class). Absent on an
14154
+ * archive made before several files were owned: that was `['settings']`.
14155
+ */
14156
+ databases: array(DataStoreDatabaseSchema).readonly().optional()
13819
14157
  });
13820
14158
  var BackupEntrySchema = object({
13821
14159
  id: string(),
@@ -13849,7 +14187,12 @@ var ArchiveManifestSchema = object({
13849
14187
  * Live SQLite databases this archive carries as their OWNER's verified
13850
14188
  * snapshot instead of as files (D693). Absent on archives made before.
13851
14189
  */
13852
- sqliteSnapshots: array(ArchiveSqliteSnapshotSchema).optional()
14190
+ sqliteSnapshots: array(ArchiveSqliteSnapshotSchema).optional(),
14191
+ /**
14192
+ * Owned database files the run did NOT carry (not selected): left out of the
14193
+ * tar and the entry list alike. Absent when every owned file was carried.
14194
+ */
14195
+ omittedDatabases: array(DataStoreDatabaseSchema).optional()
13853
14196
  });
13854
14197
  var LocationStatSchema = object({
13855
14198
  name: string(),
@@ -13971,6 +14314,12 @@ var BackupScheduleSchema = object({
13971
14314
  /** Optional subset of source locations to include; omitted = all. */
13972
14315
  dataSources: array(string()).readonly().optional(),
13973
14316
  /**
14317
+ * Which database files this schedule carries. Absent = `['settings']`
14318
+ * (an unstated ask is the minimum, D382). Events and history run weekly,
14319
+ * settings nightly (D852).
14320
+ */
14321
+ databases: array(DataStoreDatabaseSchema).readonly().optional(),
14322
+ /**
13974
14323
  * ms-epoch of the last tick that FIRED this schedule. Stamped before the
13975
14324
  * archive runs (it is the dedupe anchor), so it says "attempted", never
13976
14325
  * "succeeded" — a run refused by every destination stamps it too.
@@ -13994,7 +14343,9 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
13994
14343
  * retention). Omitted = each destination's own policy
13995
14344
  * retention (manual runs).
13996
14345
  */
13997
- retentionCount: number().int().min(1).max(1e3).optional()
14346
+ retentionCount: number().int().min(1).max(1e3).optional(),
14347
+ /** Database files to carry; omitted = `['settings']`. */
14348
+ databases: array(DataStoreDatabaseSchema).optional()
13998
14349
  }).optional(), BackupTriggerResultSchema, {
13999
14350
  kind: "mutation",
14000
14351
  auth: "admin"
@@ -14069,14 +14420,18 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
14069
14420
  ok: boolean(),
14070
14421
  error: string().optional(),
14071
14422
  nextRuns: array(number()).readonly()
14072
- })), method(_void(), array(BackupScheduleSchema).readonly(), { auth: "admin" }), method(object({
14423
+ })), method(_void(), array(BackupScheduleSchema).readonly(), { auth: "admin" }), method(_void(), object({
14424
+ answered: boolean(),
14425
+ databases: array(DataStoreDatabaseSchema).readonly()
14426
+ }), { auth: "admin" }), method(object({
14073
14427
  id: string().optional(),
14074
14428
  label: string(),
14075
14429
  cron: string(),
14076
14430
  enabled: boolean(),
14077
14431
  locationIds: array(string()).readonly(),
14078
14432
  retentionCount: number().int().min(1).max(1e3),
14079
- dataSources: array(string()).readonly().optional()
14433
+ dataSources: array(string()).readonly().optional(),
14434
+ databases: array(DataStoreDatabaseSchema).readonly().optional()
14080
14435
  }), BackupScheduleSchema, {
14081
14436
  kind: "mutation",
14082
14437
  auth: "admin"
@@ -15771,282 +16126,6 @@ var customModelRegistryCapability = {
15771
16126
  }
15772
16127
  };
15773
16128
  /**
15774
- * Query filter for settings-store collections.
15775
- */
15776
- var QueryFilterSchema = object({
15777
- where: record(string(), unknown()).optional(),
15778
- whereIn: record(string(), array(unknown())).optional(),
15779
- whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
15780
- /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
15781
- whereNot: record(string(), unknown()).optional(),
15782
- /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
15783
- * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
15784
- whereNotIn: record(string(), array(unknown())).optional(),
15785
- orderBy: object({
15786
- field: string(),
15787
- direction: _enum(["asc", "desc"])
15788
- }).optional(),
15789
- limit: number().optional(),
15790
- offset: number().optional()
15791
- });
15792
- /**
15793
- * The predicate half of a filter, for BULK MUTATIONS.
15794
- *
15795
- * Deliberately not `QueryFilterSchema`: `orderBy` / `limit` / `offset` have no
15796
- * meaning for a statement that rewrites a set, and accepting them would invite
15797
- * a caller to believe `limit` bounds the damage. Every field is optional here
15798
- * only so the shape stays composable — the implementation REJECTS a filter
15799
- * that compiles to no predicate, because that is the whole collection.
15800
- */
15801
- var MutationFilterSchema = object({
15802
- where: record(string(), unknown()).optional(),
15803
- whereIn: record(string(), array(unknown())).optional(),
15804
- whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
15805
- whereNot: record(string(), unknown()).optional(),
15806
- whereNotIn: record(string(), array(unknown())).optional()
15807
- });
15808
- /**
15809
- * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
15810
- *
15811
- * `as` names the slot in the result, so the SAME column may be asked twice with
15812
- * two operations (`MIN(startMs)` and `MAX(startMs)` in one round trip) — which
15813
- * a `Record<column, op>` shape could not express.
15814
- */
15815
- var AggregateFieldSchema = object({
15816
- /** Result key. */
15817
- as: string().min(1),
15818
- /** Column to aggregate. Must be a real column of a declared collection. */
15819
- field: string().min(1),
15820
- op: _enum([
15821
- "sum",
15822
- "min",
15823
- "max"
15824
- ])
15825
- });
15826
- /**
15827
- * `COUNT(*)` plus one number per requested field.
15828
- *
15829
- * `null` means NO ROW MATCHED, never zero: a `SUM` over an empty set and a sum
15830
- * that really is 0 are different facts, and an accounting caller that renders
15831
- * "0 bytes, oldest = 0" for "nothing here" reports a lie about a disk.
15832
- */
15833
- var AggregateResultSchema = object({
15834
- count: number().int(),
15835
- values: record(string(), number().nullable())
15836
- });
15837
- /** A single stored record: `{ id, data }`. */
15838
- var SettingsRecordSchema = object({
15839
- id: string(),
15840
- data: record(string(), unknown())
15841
- });
15842
- /**
15843
- * One record of a BULK insert — {@link SettingsRecordSchema} with the id made
15844
- * optional.
15845
- *
15846
- * A separate schema rather than loosening the shared one: every other method
15847
- * on this cap addresses a row BY its id, and making that field optional
15848
- * everywhere would turn a forgotten key into a silently generated one on
15849
- * `update` and `delete` as well.
15850
- */
15851
- var BulkRecordSchema = object({
15852
- id: string().optional(),
15853
- data: record(string(), unknown())
15854
- });
15855
- /**
15856
- * One write inside a {@link settingsStoreCapability.methods.transact} call.
15857
- * Only the three that a "replace this set, bump that revision" write needs.
15858
- */
15859
- var TransactOpSchema = discriminatedUnion("op", [
15860
- object({
15861
- op: literal("deleteWhere"),
15862
- collection: string(),
15863
- filter: MutationFilterSchema
15864
- }),
15865
- object({
15866
- op: literal("insertMany"),
15867
- collection: string(),
15868
- records: array(BulkRecordSchema).readonly()
15869
- }),
15870
- object({
15871
- op: literal("update"),
15872
- collection: string(),
15873
- id: string(),
15874
- data: record(string(), unknown())
15875
- })
15876
- ]);
15877
- /**
15878
- * The precondition of a transaction: the row `key` of `collection` must hold
15879
- * `equals` in `column`, read INSIDE the transaction.
15880
- */
15881
- var TransactGuardSchema = object({
15882
- collection: string(),
15883
- key: string(),
15884
- column: string(),
15885
- equals: unknown()
15886
- });
15887
- /**
15888
- * Column declaration for a structured (SQL-backed) collection.
15889
- *
15890
- * Logical types — the backend translates each to the matching SQLite
15891
- * storage class and handles per-type marshaling:
15892
- * - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
15893
- * - `JSON` — TEXT under the hood; serialised on write, parsed on read
15894
- * - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
15895
- */
15896
- var CollectionColumnSchema = object({
15897
- name: string(),
15898
- type: _enum([
15899
- "TEXT",
15900
- "INTEGER",
15901
- "REAL",
15902
- "JSON",
15903
- "BOOLEAN"
15904
- ]),
15905
- primaryKey: boolean().optional(),
15906
- notNull: boolean().optional(),
15907
- unique: boolean().optional(),
15908
- /**
15909
- * Column DEFAULT. Required for B2: the four `ensureTable` consumers declare
15910
- * columns like `enabled INTEGER NOT NULL DEFAULT 1`, and without this the
15911
- * collection surface simply cannot express their existing tables — which is
15912
- * why they were still on the uncapped `table*` API.
15913
- */
15914
- defaultValue: union([
15915
- string(),
15916
- number(),
15917
- boolean()
15918
- ]).optional()
15919
- });
15920
- var CollectionIndexSchema = object({
15921
- name: string(),
15922
- columns: array(string()).readonly(),
15923
- unique: boolean().optional()
15924
- });
15925
- method(object({
15926
- namespace: string().optional(),
15927
- collection: string(),
15928
- key: string()
15929
- }), unknown(), { auth: "admin" }), method(object({
15930
- namespace: string().optional(),
15931
- collection: string(),
15932
- key: string(),
15933
- value: unknown()
15934
- }), _void(), {
15935
- kind: "mutation",
15936
- auth: "admin"
15937
- }), method(object({
15938
- namespace: string().optional(),
15939
- collection: string(),
15940
- filter: QueryFilterSchema.optional(),
15941
- columns: array(string()).readonly().optional()
15942
- }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
15943
- namespace: string().optional(),
15944
- collection: string(),
15945
- /** Declared columns identifying the slot; must be covered by a UNIQUE
15946
- * index on the collection. Never empty. */
15947
- conflict: array(string()).readonly(),
15948
- record: BulkRecordSchema
15949
- }), object({
15950
- /** The id the row HAS: assigned by SQLite on an insert, or the existing
15951
- * row's own id on an update. */
15952
- id: union([string(), number()]) }), {
15953
- kind: "mutation",
15954
- auth: "admin"
15955
- }), method(object({
15956
- namespace: string().optional(),
15957
- collection: string(),
15958
- record: object({
15959
- id: string().optional(),
15960
- data: record(string(), unknown())
15961
- })
15962
- }), object({
15963
- /**
15964
- * The id the row ACTUALLY got (D473): the one supplied, the UUID minted
15965
- * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
15966
- * primary key — which is the only place an auto key is knowable.
15967
- */
15968
- id: union([string(), number()]) }), {
15969
- kind: "mutation",
15970
- auth: "admin"
15971
- }), method(object({
15972
- namespace: string().optional(),
15973
- collection: string(),
15974
- records: array(BulkRecordSchema).readonly()
15975
- }), object({ inserted: number().int() }), {
15976
- kind: "mutation",
15977
- auth: "admin"
15978
- }), method(object({
15979
- namespace: string().optional(),
15980
- guard: TransactGuardSchema.optional(),
15981
- ops: array(TransactOpSchema).readonly()
15982
- }), object({
15983
- applied: boolean(),
15984
- current: unknown().optional()
15985
- }), {
15986
- kind: "mutation",
15987
- auth: "admin"
15988
- }), method(object({
15989
- namespace: string().optional(),
15990
- collection: string(),
15991
- id: string(),
15992
- data: record(string(), unknown())
15993
- }), _void(), {
15994
- kind: "mutation",
15995
- auth: "admin"
15996
- }), method(object({
15997
- namespace: string().optional(),
15998
- collection: string(),
15999
- key: string()
16000
- }), _void(), {
16001
- kind: "mutation",
16002
- auth: "admin"
16003
- }), method(object({
16004
- namespace: string().optional(),
16005
- collection: string(),
16006
- filter: MutationFilterSchema
16007
- }), object({ deleted: number().int() }), {
16008
- kind: "mutation",
16009
- auth: "admin"
16010
- }), method(object({
16011
- namespace: string().optional(),
16012
- collection: string(),
16013
- filter: MutationFilterSchema,
16014
- data: record(string(), unknown())
16015
- }), object({ updated: number().int() }), {
16016
- kind: "mutation",
16017
- auth: "admin"
16018
- }), method(object({
16019
- namespace: string().optional(),
16020
- collection: string(),
16021
- filter: QueryFilterSchema.optional()
16022
- }), number(), { auth: "admin" }), method(object({
16023
- namespace: string().optional(),
16024
- collection: string(),
16025
- fields: array(AggregateFieldSchema).readonly(),
16026
- filter: QueryFilterSchema.optional()
16027
- }), AggregateResultSchema, { auth: "admin" }), method(object({
16028
- namespace: string().optional(),
16029
- collection: string(),
16030
- field: string(),
16031
- bucketSize: number().int().positive(),
16032
- origin: number().int(),
16033
- filter: QueryFilterSchema.optional()
16034
- }), array(object({
16035
- bucket: number().int(),
16036
- count: number().int()
16037
- })).readonly(), { auth: "admin" }), method(object({
16038
- namespace: string().optional(),
16039
- collection: string()
16040
- }), boolean(), { auth: "admin" }), method(object({
16041
- namespace: string().optional(),
16042
- collection: string(),
16043
- columns: array(CollectionColumnSchema).readonly(),
16044
- indexes: array(CollectionIndexSchema).readonly().optional()
16045
- }), _void(), {
16046
- kind: "mutation",
16047
- auth: "admin"
16048
- });
16049
- /**
16050
16129
  * What one engine says about itself. The orchestrator uses `kind` to pick
16051
16130
  * a registrant for a collection; `engineId` is what a log line names when
16052
16131
  * a call is routed or refused.
@@ -16126,6 +16205,14 @@ id: union([string(), number()]) }), {
16126
16205
  }), object({ id: union([string(), number()]) }), {
16127
16206
  kind: "mutation",
16128
16207
  auth: "admin"
16208
+ }), method(object({
16209
+ namespace: string().optional(),
16210
+ collection: string(),
16211
+ conflict: array(string()).readonly(),
16212
+ records: array(BulkRecordSchema).readonly()
16213
+ }), object({ upserted: number().int() }), {
16214
+ kind: "mutation",
16215
+ auth: "admin"
16129
16216
  }), method(object({
16130
16217
  namespace: string().optional(),
16131
16218
  collection: string(),
@@ -16195,12 +16282,7 @@ id: union([string(), number()]) }), {
16195
16282
  })).readonly(), { auth: "admin" }), method(object({
16196
16283
  namespace: string().optional(),
16197
16284
  collection: string()
16198
- }), boolean(), { auth: "admin" }), method(object({
16199
- namespace: string().optional(),
16200
- collection: string(),
16201
- columns: array(CollectionColumnSchema).readonly(),
16202
- indexes: array(CollectionIndexSchema).readonly().optional()
16203
- }), _void(), {
16285
+ }), boolean(), { auth: "admin" }), method(DeclareCollectionInputSchema, _void(), {
16204
16286
  kind: "mutation",
16205
16287
  auth: "admin"
16206
16288
  });
@@ -24600,6 +24682,9 @@ var RetrainFrameReviewSchema = object({
24600
24682
  /** The baseline was re-derived, not snapshotted (a pre-origin row). */
24601
24683
  approximate: boolean(),
24602
24684
  origin: RetrainOriginSchema.optional(),
24685
+ /** The class / label the box carries NOW (a removed box: its origin's). Absent on an older hub. */
24686
+ macroClass: RetrainMacroClassSchema.optional(),
24687
+ label: string().optional(),
24603
24688
  iou: number().optional()
24604
24689
  })).readonly(),
24605
24690
  summary: object({
@@ -32469,6 +32554,18 @@ var CalendarInfoSchema = object({
32469
32554
  source: CalendarSourceKindSchema,
32470
32555
  enabled: boolean()
32471
32556
  });
32557
+ /**
32558
+ * Time contract of {@link CalendarEvent}.
32559
+ *
32560
+ * - Timed event: `startMs` / `endMs` are real instants; `endMs` is exclusive.
32561
+ * - All-day event (`allDay: true`): the event is a run of calendar DATES, not
32562
+ * instants. `startMs` is UTC midnight of the first date and `endMs` is UTC
32563
+ * midnight of the day AFTER the last date (RFC 5545 exclusive DTEND), so a
32564
+ * one-day event spans exactly 24 h. Every provider produces that and no
32565
+ * consumer may read the instants in a local timezone: use
32566
+ * {@link calendarEventLocalSpan}. Reading UTC midnight as local time put an
32567
+ * all-day event on the following day for any viewer ahead of UTC.
32568
+ */
32472
32569
  var CalendarEventSchema = object({
32473
32570
  id: string().min(1),
32474
32571
  calendarId: string().min(1),
@@ -34611,7 +34708,15 @@ var HubAddressBookSchema = object({
34611
34708
  publicEndpoint: HubAddressRoleResolutionSchema
34612
34709
  }),
34613
34710
  /** The `hub=` an app link carries (D709), or null. */
34614
- appLinkHub: string().nullable()
34711
+ appLinkHub: string().nullable(),
34712
+ /**
34713
+ * Every origin a browser can really reach this hub at, in the scheme each
34714
+ * listener serves: `https://<lan>:<httpsPort>`, and `http://<lan>:<httpPort>`
34715
+ * while LAN HTTP is on, plus the public and custom addresses. Distinct from
34716
+ * `rows`, which show `http://` only while LAN HTTP is on. Never loopback,
34717
+ * never the app link. Absent on a hub older than D794's amendment.
34718
+ */
34719
+ listenerOrigins: array(string()).readonly().optional()
34615
34720
  });
34616
34721
  var AllowedAddressesSchema = object({
34617
34722
  /**
@@ -41568,6 +41673,12 @@ Object.freeze({
41568
41673
  addonId: null,
41569
41674
  access: "view"
41570
41675
  },
41676
+ "backup.listAvailableDatabases": {
41677
+ capName: "backup",
41678
+ capScope: "system",
41679
+ addonId: null,
41680
+ access: "view"
41681
+ },
41571
41682
  "backup.listDestinations": {
41572
41683
  capName: "backup",
41573
41684
  capScope: "system",
@@ -42288,6 +42399,12 @@ Object.freeze({
42288
42399
  addonId: null,
42289
42400
  access: "create"
42290
42401
  },
42402
+ "dataStoreProvider.upsertMany": {
42403
+ capName: "data-store-provider",
42404
+ capScope: "system",
42405
+ addonId: null,
42406
+ access: "create"
42407
+ },
42291
42408
  "dayNight.getOptions": {
42292
42409
  capName: "day-night",
42293
42410
  capScope: "device",
@@ -47136,6 +47253,12 @@ Object.freeze({
47136
47253
  addonId: null,
47137
47254
  access: "create"
47138
47255
  },
47256
+ "settingsStore.upsertMany": {
47257
+ capName: "settings-store",
47258
+ capScope: "system",
47259
+ addonId: null,
47260
+ access: "create"
47261
+ },
47139
47262
  "smoke.getStatus": {
47140
47263
  capName: "smoke",
47141
47264
  capScope: "device",