@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
@@ -13612,6 +13612,329 @@ method(object({
13612
13612
  password: string()
13613
13613
  }), AuthResultSchema.nullable(), { kind: "mutation" }), method(object({ state: string() }), string()), method(record(string(), string()), AuthResultSchema, { kind: "mutation" }), method(object({ token: string() }), AuthResultSchema.nullable());
13614
13614
  /**
13615
+ * Query filter for settings-store collections.
13616
+ */
13617
+ var QueryFilterSchema = object({
13618
+ where: record(string(), unknown()).optional(),
13619
+ whereIn: record(string(), array(unknown())).optional(),
13620
+ whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13621
+ /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
13622
+ whereNot: record(string(), unknown()).optional(),
13623
+ /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
13624
+ * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
13625
+ whereNotIn: record(string(), array(unknown())).optional(),
13626
+ orderBy: object({
13627
+ field: string(),
13628
+ direction: _enum(["asc", "desc"])
13629
+ }).optional(),
13630
+ limit: number().optional(),
13631
+ offset: number().optional()
13632
+ });
13633
+ /**
13634
+ * The predicate half of a filter, for BULK MUTATIONS.
13635
+ *
13636
+ * Deliberately not `QueryFilterSchema`: `orderBy` / `limit` / `offset` have no
13637
+ * meaning for a statement that rewrites a set, and accepting them would invite
13638
+ * a caller to believe `limit` bounds the damage. Every field is optional here
13639
+ * only so the shape stays composable — the implementation REJECTS a filter
13640
+ * that compiles to no predicate, because that is the whole collection.
13641
+ */
13642
+ var MutationFilterSchema = object({
13643
+ where: record(string(), unknown()).optional(),
13644
+ whereIn: record(string(), array(unknown())).optional(),
13645
+ whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
13646
+ whereNot: record(string(), unknown()).optional(),
13647
+ whereNotIn: record(string(), array(unknown())).optional()
13648
+ });
13649
+ /**
13650
+ * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
13651
+ *
13652
+ * `as` names the slot in the result, so the SAME column may be asked twice with
13653
+ * two operations (`MIN(startMs)` and `MAX(startMs)` in one round trip) — which
13654
+ * a `Record<column, op>` shape could not express.
13655
+ */
13656
+ var AggregateFieldSchema = object({
13657
+ /** Result key. */
13658
+ as: string().min(1),
13659
+ /** Column to aggregate. Must be a real column of a declared collection. */
13660
+ field: string().min(1),
13661
+ op: _enum([
13662
+ "sum",
13663
+ "min",
13664
+ "max"
13665
+ ])
13666
+ });
13667
+ /**
13668
+ * `COUNT(*)` plus one number per requested field.
13669
+ *
13670
+ * `null` means NO ROW MATCHED, never zero: a `SUM` over an empty set and a sum
13671
+ * that really is 0 are different facts, and an accounting caller that renders
13672
+ * "0 bytes, oldest = 0" for "nothing here" reports a lie about a disk.
13673
+ */
13674
+ var AggregateResultSchema = object({
13675
+ count: number().int(),
13676
+ values: record(string(), number().nullable())
13677
+ });
13678
+ /** A single stored record: `{ id, data }`. */
13679
+ var SettingsRecordSchema = object({
13680
+ id: string(),
13681
+ data: record(string(), unknown())
13682
+ });
13683
+ /**
13684
+ * One record of a BULK insert — {@link SettingsRecordSchema} with the id made
13685
+ * optional.
13686
+ *
13687
+ * A separate schema rather than loosening the shared one: every other method
13688
+ * on this cap addresses a row BY its id, and making that field optional
13689
+ * everywhere would turn a forgotten key into a silently generated one on
13690
+ * `update` and `delete` as well.
13691
+ */
13692
+ var BulkRecordSchema = object({
13693
+ id: string().optional(),
13694
+ data: record(string(), unknown())
13695
+ });
13696
+ /**
13697
+ * The database FILES one `sqlite-settings` engine process owns (D851).
13698
+ * Closed on purpose: a file is a thing the engine opens, backs up and gives a
13699
+ * serving thread, so a new one is a code change, never a string a caller
13700
+ * invents. `settings` is `camstack.db` and the default for every collection
13701
+ * that names no file.
13702
+ */
13703
+ var DataStoreDatabaseSchema = _enum([
13704
+ "settings",
13705
+ "events",
13706
+ "history"
13707
+ ]);
13708
+ DataStoreDatabaseSchema.options;
13709
+ /**
13710
+ * One write inside a {@link settingsStoreCapability.methods.transact} call.
13711
+ * The three that a "replace this set, bump that revision" write needs, plus
13712
+ * the batched upsert a rollup writer needs.
13713
+ */
13714
+ var TransactOpSchema = discriminatedUnion("op", [
13715
+ object({
13716
+ op: literal("deleteWhere"),
13717
+ collection: string(),
13718
+ filter: MutationFilterSchema
13719
+ }),
13720
+ object({
13721
+ op: literal("insertMany"),
13722
+ collection: string(),
13723
+ records: array(BulkRecordSchema).readonly()
13724
+ }),
13725
+ object({
13726
+ op: literal("update"),
13727
+ collection: string(),
13728
+ id: string(),
13729
+ data: record(string(), unknown())
13730
+ }),
13731
+ object({
13732
+ op: literal("upsertMany"),
13733
+ collection: string(),
13734
+ conflict: array(string()).readonly(),
13735
+ records: array(BulkRecordSchema).readonly()
13736
+ })
13737
+ ]);
13738
+ /**
13739
+ * The precondition of a transaction: the row `key` of `collection` must hold
13740
+ * `equals` in `column`, read INSIDE the transaction.
13741
+ */
13742
+ var TransactGuardSchema = object({
13743
+ collection: string(),
13744
+ key: string(),
13745
+ column: string(),
13746
+ equals: unknown()
13747
+ });
13748
+ /**
13749
+ * Column declaration for a structured (SQL-backed) collection.
13750
+ *
13751
+ * Logical types — the backend translates each to the matching SQLite
13752
+ * storage class and handles per-type marshaling:
13753
+ * - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
13754
+ * - `JSON` — TEXT under the hood; serialised on write, parsed on read
13755
+ * - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
13756
+ */
13757
+ var CollectionColumnSchema = object({
13758
+ name: string(),
13759
+ type: _enum([
13760
+ "TEXT",
13761
+ "INTEGER",
13762
+ "REAL",
13763
+ "JSON",
13764
+ "BOOLEAN"
13765
+ ]),
13766
+ primaryKey: boolean().optional(),
13767
+ notNull: boolean().optional(),
13768
+ unique: boolean().optional(),
13769
+ /**
13770
+ * Column DEFAULT. Required for B2: the four `ensureTable` consumers declare
13771
+ * columns like `enabled INTEGER NOT NULL DEFAULT 1`, and without this the
13772
+ * collection surface simply cannot express their existing tables — which is
13773
+ * why they were still on the uncapped `table*` API.
13774
+ */
13775
+ defaultValue: union([
13776
+ string(),
13777
+ number(),
13778
+ boolean()
13779
+ ]).optional()
13780
+ });
13781
+ var CollectionIndexSchema = object({
13782
+ name: string(),
13783
+ columns: array(string()).readonly(),
13784
+ unique: boolean().optional()
13785
+ });
13786
+ /**
13787
+ * The input of `declareCollection` — ONE schema for the door and for the
13788
+ * engine behind it, so the two surfaces cannot drift (the dispatcher forwards
13789
+ * the payload untouched).
13790
+ *
13791
+ * - `database` — the file the collection lives in (D851). Absent means
13792
+ * `settings`. A declaration naming a file other than the one the table is
13793
+ * already in is REFUSED by the engine, never moved.
13794
+ * - `primaryKey` — a COMPOSITE key, as column names. A single name is the same
13795
+ * as `primaryKey: true` on that column. A composite-keyed collection has no
13796
+ * `id`: it is written with `insertMany` / `upsertMany` / `transact` and read
13797
+ * with `query` / `count` / `aggregate` / `deleteWhere`; the calls that
13798
+ * address one row by id are refused.
13799
+ * - `withoutRowid` — emit `WITHOUT ROWID`. Requires a primary key.
13800
+ */
13801
+ var DeclareCollectionInputSchema = object({
13802
+ namespace: string().optional(),
13803
+ collection: string(),
13804
+ columns: array(CollectionColumnSchema).readonly(),
13805
+ indexes: array(CollectionIndexSchema).readonly().optional(),
13806
+ database: DataStoreDatabaseSchema.optional(),
13807
+ primaryKey: array(string()).readonly().optional(),
13808
+ withoutRowid: boolean().optional()
13809
+ });
13810
+ method(object({
13811
+ namespace: string().optional(),
13812
+ collection: string(),
13813
+ key: string()
13814
+ }), unknown(), { auth: "admin" }), method(object({
13815
+ namespace: string().optional(),
13816
+ collection: string(),
13817
+ key: string(),
13818
+ value: unknown()
13819
+ }), _void(), {
13820
+ kind: "mutation",
13821
+ auth: "admin"
13822
+ }), method(object({
13823
+ namespace: string().optional(),
13824
+ collection: string(),
13825
+ filter: QueryFilterSchema.optional(),
13826
+ columns: array(string()).readonly().optional()
13827
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
13828
+ namespace: string().optional(),
13829
+ collection: string(),
13830
+ /** Declared columns identifying the slot; must be covered by a UNIQUE
13831
+ * index on the collection. Never empty. */
13832
+ conflict: array(string()).readonly(),
13833
+ record: BulkRecordSchema
13834
+ }), object({
13835
+ /** The id the row HAS: assigned by SQLite on an insert, or the existing
13836
+ * row's own id on an update. */
13837
+ id: union([string(), number()]) }), {
13838
+ kind: "mutation",
13839
+ auth: "admin"
13840
+ }), method(object({
13841
+ namespace: string().optional(),
13842
+ collection: string(),
13843
+ conflict: array(string()).readonly(),
13844
+ records: array(BulkRecordSchema).readonly()
13845
+ }), object({ upserted: number().int() }), {
13846
+ kind: "mutation",
13847
+ auth: "admin"
13848
+ }), method(object({
13849
+ namespace: string().optional(),
13850
+ collection: string(),
13851
+ record: object({
13852
+ id: string().optional(),
13853
+ data: record(string(), unknown())
13854
+ })
13855
+ }), object({
13856
+ /**
13857
+ * The id the row ACTUALLY got (D473): the one supplied, the UUID minted
13858
+ * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
13859
+ * primary key — which is the only place an auto key is knowable.
13860
+ */
13861
+ id: union([string(), number()]) }), {
13862
+ kind: "mutation",
13863
+ auth: "admin"
13864
+ }), method(object({
13865
+ namespace: string().optional(),
13866
+ collection: string(),
13867
+ records: array(BulkRecordSchema).readonly()
13868
+ }), object({ inserted: number().int() }), {
13869
+ kind: "mutation",
13870
+ auth: "admin"
13871
+ }), method(object({
13872
+ namespace: string().optional(),
13873
+ guard: TransactGuardSchema.optional(),
13874
+ ops: array(TransactOpSchema).readonly()
13875
+ }), object({
13876
+ applied: boolean(),
13877
+ current: unknown().optional()
13878
+ }), {
13879
+ kind: "mutation",
13880
+ auth: "admin"
13881
+ }), method(object({
13882
+ namespace: string().optional(),
13883
+ collection: string(),
13884
+ id: string(),
13885
+ data: record(string(), unknown())
13886
+ }), _void(), {
13887
+ kind: "mutation",
13888
+ auth: "admin"
13889
+ }), method(object({
13890
+ namespace: string().optional(),
13891
+ collection: string(),
13892
+ key: string()
13893
+ }), _void(), {
13894
+ kind: "mutation",
13895
+ auth: "admin"
13896
+ }), method(object({
13897
+ namespace: string().optional(),
13898
+ collection: string(),
13899
+ filter: MutationFilterSchema
13900
+ }), object({ deleted: number().int() }), {
13901
+ kind: "mutation",
13902
+ auth: "admin"
13903
+ }), method(object({
13904
+ namespace: string().optional(),
13905
+ collection: string(),
13906
+ filter: MutationFilterSchema,
13907
+ data: record(string(), unknown())
13908
+ }), object({ updated: number().int() }), {
13909
+ kind: "mutation",
13910
+ auth: "admin"
13911
+ }), method(object({
13912
+ namespace: string().optional(),
13913
+ collection: string(),
13914
+ filter: QueryFilterSchema.optional()
13915
+ }), number(), { auth: "admin" }), method(object({
13916
+ namespace: string().optional(),
13917
+ collection: string(),
13918
+ fields: array(AggregateFieldSchema).readonly(),
13919
+ filter: QueryFilterSchema.optional()
13920
+ }), AggregateResultSchema, { auth: "admin" }), method(object({
13921
+ namespace: string().optional(),
13922
+ collection: string(),
13923
+ field: string(),
13924
+ bucketSize: number().int().positive(),
13925
+ origin: number().int(),
13926
+ filter: QueryFilterSchema.optional()
13927
+ }), array(object({
13928
+ bucket: number().int(),
13929
+ count: number().int()
13930
+ })).readonly(), { auth: "admin" }), method(object({
13931
+ namespace: string().optional(),
13932
+ collection: string()
13933
+ }), boolean(), { auth: "admin" }), method(DeclareCollectionInputSchema, _void(), {
13934
+ kind: "mutation",
13935
+ auth: "admin"
13936
+ });
13937
+ /**
13615
13938
  * How long one snapshot may take end to end: the pinned copy of the whole
13616
13939
  * database plus `PRAGMA integrity_check` over the copy, on the hub's slowest
13617
13940
  * disk. ~800 MB at a pessimistic 10 MB/s is under 3 minutes; the bound is
@@ -13624,7 +13947,11 @@ var DATABASE_SNAPSHOT_TIMEOUT_MS = 30 * 6e4;
13624
13947
  * database has no sidecars and is just as owned). Paths are absolute on the
13625
13948
  * owner's host.
13626
13949
  */
13627
- var DatabaseSnapshotTargetsSchema = object({ databases: array(object({ livePath: string() })) });
13950
+ var DatabaseSnapshotTargetsSchema = object({ databases: array(object({
13951
+ /** Which owned file this is — the handle `writeSnapshot` takes. */
13952
+ databaseId: DataStoreDatabaseSchema,
13953
+ livePath: string()
13954
+ })) });
13628
13955
  /** One b-tree table of the snapshot and the rows it holds. */
13629
13956
  var DatabaseSnapshotTableSchema = object({
13630
13957
  name: string(),
@@ -13657,6 +13984,10 @@ var DatabaseSnapshotResultSchema = object({
13657
13984
  /** When the pinned read transaction began (ms epoch) — the snapshot's instant. */
13658
13985
  takenAt: number()
13659
13986
  });
13987
+ /** A snapshot the owner wrote, with the file it belongs to. */
13988
+ var DatabaseSnapshotWrittenSchema = DatabaseSnapshotResultSchema.extend({ databaseId: DataStoreDatabaseSchema });
13989
+ /** Which database `writeSnapshot` copies. Required: an unstated ask is not guessed. */
13990
+ var DatabaseSnapshotRequestSchema = object({ databaseId: DataStoreDatabaseSchema });
13660
13991
  /**
13661
13992
  * A snapshot as an ARCHIVE records it (`ArchiveManifest.sqliteSnapshots`):
13662
13993
  * the same facts, with both paths relative to the archive root (the node's
@@ -13666,9 +13997,11 @@ var ArchiveSqliteSnapshotSchema = DatabaseSnapshotResultSchema.extend({
13666
13997
  /** Archive-relative path of the live database the archive does NOT carry. */
13667
13998
  livePath: string(),
13668
13999
  /** Archive-relative path of the verified copy it carries in its place. */
13669
- snapshotPath: string()
14000
+ snapshotPath: string(),
14001
+ /** Absent on an archive made before several files were owned: that was `settings`. */
14002
+ databaseId: DataStoreDatabaseSchema.optional()
13670
14003
  });
13671
- method(object({}), DatabaseSnapshotTargetsSchema, { auth: "admin" }), method(object({}), DatabaseSnapshotResultSchema, {
14004
+ method(object({}), DatabaseSnapshotTargetsSchema, { auth: "admin" }), method(DatabaseSnapshotRequestSchema, DatabaseSnapshotWrittenSchema, {
13672
14005
  kind: "mutation",
13673
14006
  auth: "admin",
13674
14007
  timeoutMs: DATABASE_SNAPSHOT_TIMEOUT_MS
@@ -13789,7 +14122,12 @@ var BackupArchiveEntrySchema = object({
13789
14122
  /** Top-level locations included in the archive (db, addons, tls, …). */
13790
14123
  locations: array(string()).readonly(),
13791
14124
  /** Present when the archive is encrypted; restore then needs that key. */
13792
- encryption: BackupArchiveEncryptionSchema.optional()
14125
+ encryption: BackupArchiveEncryptionSchema.optional(),
14126
+ /**
14127
+ * The databases the run asked to carry (its retention class). Absent on an
14128
+ * archive made before several files were owned: that was `['settings']`.
14129
+ */
14130
+ databases: array(DataStoreDatabaseSchema).readonly().optional()
13793
14131
  });
13794
14132
  var BackupEntrySchema = object({
13795
14133
  id: string(),
@@ -13823,7 +14161,12 @@ var ArchiveManifestSchema = object({
13823
14161
  * Live SQLite databases this archive carries as their OWNER's verified
13824
14162
  * snapshot instead of as files (D693). Absent on archives made before.
13825
14163
  */
13826
- sqliteSnapshots: array(ArchiveSqliteSnapshotSchema).optional()
14164
+ sqliteSnapshots: array(ArchiveSqliteSnapshotSchema).optional(),
14165
+ /**
14166
+ * Owned database files the run did NOT carry (not selected): left out of the
14167
+ * tar and the entry list alike. Absent when every owned file was carried.
14168
+ */
14169
+ omittedDatabases: array(DataStoreDatabaseSchema).optional()
13827
14170
  });
13828
14171
  var LocationStatSchema = object({
13829
14172
  name: string(),
@@ -13945,6 +14288,12 @@ var BackupScheduleSchema = object({
13945
14288
  /** Optional subset of source locations to include; omitted = all. */
13946
14289
  dataSources: array(string()).readonly().optional(),
13947
14290
  /**
14291
+ * Which database files this schedule carries. Absent = `['settings']`
14292
+ * (an unstated ask is the minimum, D382). Events and history run weekly,
14293
+ * settings nightly (D852).
14294
+ */
14295
+ databases: array(DataStoreDatabaseSchema).readonly().optional(),
14296
+ /**
13948
14297
  * ms-epoch of the last tick that FIRED this schedule. Stamped before the
13949
14298
  * archive runs (it is the dedupe anchor), so it says "attempted", never
13950
14299
  * "succeeded" — a run refused by every destination stamps it too.
@@ -13968,7 +14317,9 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
13968
14317
  * retention). Omitted = each destination's own policy
13969
14318
  * retention (manual runs).
13970
14319
  */
13971
- retentionCount: number().int().min(1).max(1e3).optional()
14320
+ retentionCount: number().int().min(1).max(1e3).optional(),
14321
+ /** Database files to carry; omitted = `['settings']`. */
14322
+ databases: array(DataStoreDatabaseSchema).optional()
13972
14323
  }).optional(), BackupTriggerResultSchema, {
13973
14324
  kind: "mutation",
13974
14325
  auth: "admin"
@@ -14043,14 +14394,18 @@ method(_void(), array(BackupDestinationInfoSchema).readonly(), { auth: "admin" }
14043
14394
  ok: boolean(),
14044
14395
  error: string().optional(),
14045
14396
  nextRuns: array(number()).readonly()
14046
- })), method(_void(), array(BackupScheduleSchema).readonly(), { auth: "admin" }), method(object({
14397
+ })), method(_void(), array(BackupScheduleSchema).readonly(), { auth: "admin" }), method(_void(), object({
14398
+ answered: boolean(),
14399
+ databases: array(DataStoreDatabaseSchema).readonly()
14400
+ }), { auth: "admin" }), method(object({
14047
14401
  id: string().optional(),
14048
14402
  label: string(),
14049
14403
  cron: string(),
14050
14404
  enabled: boolean(),
14051
14405
  locationIds: array(string()).readonly(),
14052
14406
  retentionCount: number().int().min(1).max(1e3),
14053
- dataSources: array(string()).readonly().optional()
14407
+ dataSources: array(string()).readonly().optional(),
14408
+ databases: array(DataStoreDatabaseSchema).readonly().optional()
14054
14409
  }), BackupScheduleSchema, {
14055
14410
  kind: "mutation",
14056
14411
  auth: "admin"
@@ -15745,282 +16100,6 @@ var customModelRegistryCapability = {
15745
16100
  }
15746
16101
  };
15747
16102
  /**
15748
- * Query filter for settings-store collections.
15749
- */
15750
- var QueryFilterSchema = object({
15751
- where: record(string(), unknown()).optional(),
15752
- whereIn: record(string(), array(unknown())).optional(),
15753
- whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
15754
- /** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
15755
- whereNot: record(string(), unknown()).optional(),
15756
- /** NULL-safe exclusion of a SET — `whereNot` for more than one value. An
15757
- * empty list excludes nothing. See `QueryFilter.whereNotIn`. */
15758
- whereNotIn: record(string(), array(unknown())).optional(),
15759
- orderBy: object({
15760
- field: string(),
15761
- direction: _enum(["asc", "desc"])
15762
- }).optional(),
15763
- limit: number().optional(),
15764
- offset: number().optional()
15765
- });
15766
- /**
15767
- * The predicate half of a filter, for BULK MUTATIONS.
15768
- *
15769
- * Deliberately not `QueryFilterSchema`: `orderBy` / `limit` / `offset` have no
15770
- * meaning for a statement that rewrites a set, and accepting them would invite
15771
- * a caller to believe `limit` bounds the damage. Every field is optional here
15772
- * only so the shape stays composable — the implementation REJECTS a filter
15773
- * that compiles to no predicate, because that is the whole collection.
15774
- */
15775
- var MutationFilterSchema = object({
15776
- where: record(string(), unknown()).optional(),
15777
- whereIn: record(string(), array(unknown())).optional(),
15778
- whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
15779
- whereNot: record(string(), unknown()).optional(),
15780
- whereNotIn: record(string(), array(unknown())).optional()
15781
- });
15782
- /**
15783
- * One scalar an {@link settingsStoreCapability.methods.aggregate} call asks for.
15784
- *
15785
- * `as` names the slot in the result, so the SAME column may be asked twice with
15786
- * two operations (`MIN(startMs)` and `MAX(startMs)` in one round trip) — which
15787
- * a `Record<column, op>` shape could not express.
15788
- */
15789
- var AggregateFieldSchema = object({
15790
- /** Result key. */
15791
- as: string().min(1),
15792
- /** Column to aggregate. Must be a real column of a declared collection. */
15793
- field: string().min(1),
15794
- op: _enum([
15795
- "sum",
15796
- "min",
15797
- "max"
15798
- ])
15799
- });
15800
- /**
15801
- * `COUNT(*)` plus one number per requested field.
15802
- *
15803
- * `null` means NO ROW MATCHED, never zero: a `SUM` over an empty set and a sum
15804
- * that really is 0 are different facts, and an accounting caller that renders
15805
- * "0 bytes, oldest = 0" for "nothing here" reports a lie about a disk.
15806
- */
15807
- var AggregateResultSchema = object({
15808
- count: number().int(),
15809
- values: record(string(), number().nullable())
15810
- });
15811
- /** A single stored record: `{ id, data }`. */
15812
- var SettingsRecordSchema = object({
15813
- id: string(),
15814
- data: record(string(), unknown())
15815
- });
15816
- /**
15817
- * One record of a BULK insert — {@link SettingsRecordSchema} with the id made
15818
- * optional.
15819
- *
15820
- * A separate schema rather than loosening the shared one: every other method
15821
- * on this cap addresses a row BY its id, and making that field optional
15822
- * everywhere would turn a forgotten key into a silently generated one on
15823
- * `update` and `delete` as well.
15824
- */
15825
- var BulkRecordSchema = object({
15826
- id: string().optional(),
15827
- data: record(string(), unknown())
15828
- });
15829
- /**
15830
- * One write inside a {@link settingsStoreCapability.methods.transact} call.
15831
- * Only the three that a "replace this set, bump that revision" write needs.
15832
- */
15833
- var TransactOpSchema = discriminatedUnion("op", [
15834
- object({
15835
- op: literal("deleteWhere"),
15836
- collection: string(),
15837
- filter: MutationFilterSchema
15838
- }),
15839
- object({
15840
- op: literal("insertMany"),
15841
- collection: string(),
15842
- records: array(BulkRecordSchema).readonly()
15843
- }),
15844
- object({
15845
- op: literal("update"),
15846
- collection: string(),
15847
- id: string(),
15848
- data: record(string(), unknown())
15849
- })
15850
- ]);
15851
- /**
15852
- * The precondition of a transaction: the row `key` of `collection` must hold
15853
- * `equals` in `column`, read INSIDE the transaction.
15854
- */
15855
- var TransactGuardSchema = object({
15856
- collection: string(),
15857
- key: string(),
15858
- column: string(),
15859
- equals: unknown()
15860
- });
15861
- /**
15862
- * Column declaration for a structured (SQL-backed) collection.
15863
- *
15864
- * Logical types — the backend translates each to the matching SQLite
15865
- * storage class and handles per-type marshaling:
15866
- * - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
15867
- * - `JSON` — TEXT under the hood; serialised on write, parsed on read
15868
- * - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
15869
- */
15870
- var CollectionColumnSchema = object({
15871
- name: string(),
15872
- type: _enum([
15873
- "TEXT",
15874
- "INTEGER",
15875
- "REAL",
15876
- "JSON",
15877
- "BOOLEAN"
15878
- ]),
15879
- primaryKey: boolean().optional(),
15880
- notNull: boolean().optional(),
15881
- unique: boolean().optional(),
15882
- /**
15883
- * Column DEFAULT. Required for B2: the four `ensureTable` consumers declare
15884
- * columns like `enabled INTEGER NOT NULL DEFAULT 1`, and without this the
15885
- * collection surface simply cannot express their existing tables — which is
15886
- * why they were still on the uncapped `table*` API.
15887
- */
15888
- defaultValue: union([
15889
- string(),
15890
- number(),
15891
- boolean()
15892
- ]).optional()
15893
- });
15894
- var CollectionIndexSchema = object({
15895
- name: string(),
15896
- columns: array(string()).readonly(),
15897
- unique: boolean().optional()
15898
- });
15899
- method(object({
15900
- namespace: string().optional(),
15901
- collection: string(),
15902
- key: string()
15903
- }), unknown(), { auth: "admin" }), method(object({
15904
- namespace: string().optional(),
15905
- collection: string(),
15906
- key: string(),
15907
- value: unknown()
15908
- }), _void(), {
15909
- kind: "mutation",
15910
- auth: "admin"
15911
- }), method(object({
15912
- namespace: string().optional(),
15913
- collection: string(),
15914
- filter: QueryFilterSchema.optional(),
15915
- columns: array(string()).readonly().optional()
15916
- }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
15917
- namespace: string().optional(),
15918
- collection: string(),
15919
- /** Declared columns identifying the slot; must be covered by a UNIQUE
15920
- * index on the collection. Never empty. */
15921
- conflict: array(string()).readonly(),
15922
- record: BulkRecordSchema
15923
- }), object({
15924
- /** The id the row HAS: assigned by SQLite on an insert, or the existing
15925
- * row's own id on an update. */
15926
- id: union([string(), number()]) }), {
15927
- kind: "mutation",
15928
- auth: "admin"
15929
- }), method(object({
15930
- namespace: string().optional(),
15931
- collection: string(),
15932
- record: object({
15933
- id: string().optional(),
15934
- data: record(string(), unknown())
15935
- })
15936
- }), object({
15937
- /**
15938
- * The id the row ACTUALLY got (D473): the one supplied, the UUID minted
15939
- * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
15940
- * primary key — which is the only place an auto key is knowable.
15941
- */
15942
- id: union([string(), number()]) }), {
15943
- kind: "mutation",
15944
- auth: "admin"
15945
- }), method(object({
15946
- namespace: string().optional(),
15947
- collection: string(),
15948
- records: array(BulkRecordSchema).readonly()
15949
- }), object({ inserted: number().int() }), {
15950
- kind: "mutation",
15951
- auth: "admin"
15952
- }), method(object({
15953
- namespace: string().optional(),
15954
- guard: TransactGuardSchema.optional(),
15955
- ops: array(TransactOpSchema).readonly()
15956
- }), object({
15957
- applied: boolean(),
15958
- current: unknown().optional()
15959
- }), {
15960
- kind: "mutation",
15961
- auth: "admin"
15962
- }), method(object({
15963
- namespace: string().optional(),
15964
- collection: string(),
15965
- id: string(),
15966
- data: record(string(), unknown())
15967
- }), _void(), {
15968
- kind: "mutation",
15969
- auth: "admin"
15970
- }), method(object({
15971
- namespace: string().optional(),
15972
- collection: string(),
15973
- key: string()
15974
- }), _void(), {
15975
- kind: "mutation",
15976
- auth: "admin"
15977
- }), method(object({
15978
- namespace: string().optional(),
15979
- collection: string(),
15980
- filter: MutationFilterSchema
15981
- }), object({ deleted: number().int() }), {
15982
- kind: "mutation",
15983
- auth: "admin"
15984
- }), method(object({
15985
- namespace: string().optional(),
15986
- collection: string(),
15987
- filter: MutationFilterSchema,
15988
- data: record(string(), unknown())
15989
- }), object({ updated: number().int() }), {
15990
- kind: "mutation",
15991
- auth: "admin"
15992
- }), method(object({
15993
- namespace: string().optional(),
15994
- collection: string(),
15995
- filter: QueryFilterSchema.optional()
15996
- }), number(), { auth: "admin" }), method(object({
15997
- namespace: string().optional(),
15998
- collection: string(),
15999
- fields: array(AggregateFieldSchema).readonly(),
16000
- filter: QueryFilterSchema.optional()
16001
- }), AggregateResultSchema, { auth: "admin" }), method(object({
16002
- namespace: string().optional(),
16003
- collection: string(),
16004
- field: string(),
16005
- bucketSize: number().int().positive(),
16006
- origin: number().int(),
16007
- filter: QueryFilterSchema.optional()
16008
- }), array(object({
16009
- bucket: number().int(),
16010
- count: number().int()
16011
- })).readonly(), { auth: "admin" }), method(object({
16012
- namespace: string().optional(),
16013
- collection: string()
16014
- }), boolean(), { auth: "admin" }), method(object({
16015
- namespace: string().optional(),
16016
- collection: string(),
16017
- columns: array(CollectionColumnSchema).readonly(),
16018
- indexes: array(CollectionIndexSchema).readonly().optional()
16019
- }), _void(), {
16020
- kind: "mutation",
16021
- auth: "admin"
16022
- });
16023
- /**
16024
16103
  * What one engine says about itself. The orchestrator uses `kind` to pick
16025
16104
  * a registrant for a collection; `engineId` is what a log line names when
16026
16105
  * a call is routed or refused.
@@ -16100,6 +16179,14 @@ id: union([string(), number()]) }), {
16100
16179
  }), object({ id: union([string(), number()]) }), {
16101
16180
  kind: "mutation",
16102
16181
  auth: "admin"
16182
+ }), method(object({
16183
+ namespace: string().optional(),
16184
+ collection: string(),
16185
+ conflict: array(string()).readonly(),
16186
+ records: array(BulkRecordSchema).readonly()
16187
+ }), object({ upserted: number().int() }), {
16188
+ kind: "mutation",
16189
+ auth: "admin"
16103
16190
  }), method(object({
16104
16191
  namespace: string().optional(),
16105
16192
  collection: string(),
@@ -16169,12 +16256,7 @@ id: union([string(), number()]) }), {
16169
16256
  })).readonly(), { auth: "admin" }), method(object({
16170
16257
  namespace: string().optional(),
16171
16258
  collection: string()
16172
- }), boolean(), { auth: "admin" }), method(object({
16173
- namespace: string().optional(),
16174
- collection: string(),
16175
- columns: array(CollectionColumnSchema).readonly(),
16176
- indexes: array(CollectionIndexSchema).readonly().optional()
16177
- }), _void(), {
16259
+ }), boolean(), { auth: "admin" }), method(DeclareCollectionInputSchema, _void(), {
16178
16260
  kind: "mutation",
16179
16261
  auth: "admin"
16180
16262
  });
@@ -24574,6 +24656,9 @@ var RetrainFrameReviewSchema = object({
24574
24656
  /** The baseline was re-derived, not snapshotted (a pre-origin row). */
24575
24657
  approximate: boolean(),
24576
24658
  origin: RetrainOriginSchema.optional(),
24659
+ /** The class / label the box carries NOW (a removed box: its origin's). Absent on an older hub. */
24660
+ macroClass: RetrainMacroClassSchema.optional(),
24661
+ label: string().optional(),
24577
24662
  iou: number().optional()
24578
24663
  })).readonly(),
24579
24664
  summary: object({
@@ -32443,6 +32528,18 @@ var CalendarInfoSchema = object({
32443
32528
  source: CalendarSourceKindSchema,
32444
32529
  enabled: boolean()
32445
32530
  });
32531
+ /**
32532
+ * Time contract of {@link CalendarEvent}.
32533
+ *
32534
+ * - Timed event: `startMs` / `endMs` are real instants; `endMs` is exclusive.
32535
+ * - All-day event (`allDay: true`): the event is a run of calendar DATES, not
32536
+ * instants. `startMs` is UTC midnight of the first date and `endMs` is UTC
32537
+ * midnight of the day AFTER the last date (RFC 5545 exclusive DTEND), so a
32538
+ * one-day event spans exactly 24 h. Every provider produces that and no
32539
+ * consumer may read the instants in a local timezone: use
32540
+ * {@link calendarEventLocalSpan}. Reading UTC midnight as local time put an
32541
+ * all-day event on the following day for any viewer ahead of UTC.
32542
+ */
32446
32543
  var CalendarEventSchema = object({
32447
32544
  id: string().min(1),
32448
32545
  calendarId: string().min(1),
@@ -34585,7 +34682,15 @@ var HubAddressBookSchema = object({
34585
34682
  publicEndpoint: HubAddressRoleResolutionSchema
34586
34683
  }),
34587
34684
  /** The `hub=` an app link carries (D709), or null. */
34588
- appLinkHub: string().nullable()
34685
+ appLinkHub: string().nullable(),
34686
+ /**
34687
+ * Every origin a browser can really reach this hub at, in the scheme each
34688
+ * listener serves: `https://<lan>:<httpsPort>`, and `http://<lan>:<httpPort>`
34689
+ * while LAN HTTP is on, plus the public and custom addresses. Distinct from
34690
+ * `rows`, which show `http://` only while LAN HTTP is on. Never loopback,
34691
+ * never the app link. Absent on a hub older than D794's amendment.
34692
+ */
34693
+ listenerOrigins: array(string()).readonly().optional()
34589
34694
  });
34590
34695
  var AllowedAddressesSchema = object({
34591
34696
  /**
@@ -41542,6 +41647,12 @@ Object.freeze({
41542
41647
  addonId: null,
41543
41648
  access: "view"
41544
41649
  },
41650
+ "backup.listAvailableDatabases": {
41651
+ capName: "backup",
41652
+ capScope: "system",
41653
+ addonId: null,
41654
+ access: "view"
41655
+ },
41545
41656
  "backup.listDestinations": {
41546
41657
  capName: "backup",
41547
41658
  capScope: "system",
@@ -42262,6 +42373,12 @@ Object.freeze({
42262
42373
  addonId: null,
42263
42374
  access: "create"
42264
42375
  },
42376
+ "dataStoreProvider.upsertMany": {
42377
+ capName: "data-store-provider",
42378
+ capScope: "system",
42379
+ addonId: null,
42380
+ access: "create"
42381
+ },
42265
42382
  "dayNight.getOptions": {
42266
42383
  capName: "day-night",
42267
42384
  capScope: "device",
@@ -47110,6 +47227,12 @@ Object.freeze({
47110
47227
  addonId: null,
47111
47228
  access: "create"
47112
47229
  },
47230
+ "settingsStore.upsertMany": {
47231
+ capName: "settings-store",
47232
+ capScope: "system",
47233
+ addonId: null,
47234
+ access: "create"
47235
+ },
47113
47236
  "smoke.getStatus": {
47114
47237
  capName: "smoke",
47115
47238
  capScope: "device",