@camstack/addon-osd-manager 0.1.244 → 0.1.245

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-Dx0QePDr.mjs → MotionZonesSettings-DLMJWUc6.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-Dpvj9Htf.mjs → PrivacyMaskSettings-C3B3rP7I.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-CInL6GVs.mjs → SceneMonitorEditor-CNZFNnAX.mjs} +3 -3
  4. package/dist/_stub.js +2797 -2797
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-DkadILEV.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-CWKUwM9u.mjs} +4 -4
  6. package/dist/{_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Dfue3rir.mjs → _virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DAgSwKUp.mjs} +1 -1
  7. package/dist/addon-osd-manager.css +1 -1
  8. package/dist/{hostInit-BZGn1YFH.mjs → hostInit-9xoGIiTH.mjs} +3 -3
  9. package/dist/index.js +43 -21
  10. package/dist/index.mjs +43 -21
  11. package/dist/{player-overlays-Ces1nEGQ.mjs → player-overlays-DGUXioJL.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-xOj-SfJF.mjs → responsive-BHlSXMJE.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-BZMgBFaF.mjs → scene-monitor-copy-CnQEieAy.mjs} +1 -1
  15. package/dist/{square-CAeV_Co2.mjs → square-B0lxeT8y.mjs} +1 -1
  16. package/dist/{trash-2-LqYIxrzA.mjs → trash-2-BGXNyRy1.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-epKXdpkT.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-BXh9f7q7.mjs} +1 -1
  18. package/package.json +1 -1
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.380",
39
+ version: "1.2.381",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -45,7 +45,7 @@ async function r() {
45
45
  }
46
46
  },
47
47
  "@camstack/sdk": {
48
- version: "1.2.132",
48
+ version: "1.2.133",
49
49
  scope: "default",
50
50
  shareConfig: {
51
51
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.298",
84
+ version: "1.2.299",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
package/dist/index.js CHANGED
@@ -5408,7 +5408,7 @@ var ZodIssueCode = {
5408
5408
  var ZodFirstPartyTypeKind;
5409
5409
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5410
5410
  //#endregion
5411
- //#region ../types/dist/sleep-WsrozGDL.mjs
5411
+ //#region ../types/dist/sleep-bZIhUvjd.mjs
5412
5412
  /**
5413
5413
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5414
5414
  * window to float samples (D455).
@@ -5525,7 +5525,7 @@ function isKeychainStoredField(field) {
5525
5525
  var SECRET_CLEAR = { $secretClear: true };
5526
5526
  /** The `'***'` token D634 redaction writes for non-admins. */
5527
5527
  var LEGACY_DEVICE_REDACTION = "***";
5528
- function isRecord$4(value) {
5528
+ function isRecord$5(value) {
5529
5529
  return typeof value === "object" && value !== null && !Array.isArray(value);
5530
5530
  }
5531
5531
  function makeSecretMarker(ref) {
@@ -5536,12 +5536,12 @@ function makeSecretMarker(ref) {
5536
5536
  }
5537
5537
  /** A stored marker: an object whose `$secret` is a non-empty string. */
5538
5538
  function isSecretMarker(value) {
5539
- if (!isRecord$4(value)) return false;
5539
+ if (!isRecord$5(value)) return false;
5540
5540
  const ref = value["$secret"];
5541
5541
  return typeof ref === "string" && ref.length > 0;
5542
5542
  }
5543
5543
  function isSecretClear(value) {
5544
- return isRecord$4(value) && value["$secretClear"] === true;
5544
+ return isRecord$5(value) && value["$secretClear"] === true;
5545
5545
  }
5546
5546
  /**
5547
5547
  * The UI view of a stored secret field value: a marker becomes "set", inline
@@ -6151,7 +6151,7 @@ var KeychainWriteRefusedError = class extends Error {
6151
6151
  }
6152
6152
  };
6153
6153
  var KEEP = { kind: "keep" };
6154
- function isRecord$3(value) {
6154
+ function isRecord$4(value) {
6155
6155
  return typeof value === "object" && value !== null && !Array.isArray(value);
6156
6156
  }
6157
6157
  function defaultMintId() {
@@ -6164,7 +6164,7 @@ function collectSecretMarkerRefs(value, out = []) {
6164
6164
  return out;
6165
6165
  }
6166
6166
  if (Array.isArray(value)) for (const item of value) collectSecretMarkerRefs(item, out);
6167
- else if (isRecord$3(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6167
+ else if (isRecord$4(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6168
6168
  return out;
6169
6169
  }
6170
6170
  async function storedValueEquals(secrets, marker, candidate) {
@@ -6219,7 +6219,7 @@ function rowId(row, idKey) {
6219
6219
  return null;
6220
6220
  }
6221
6221
  async function writeArray(ctx, node, incoming, stored, fieldPath) {
6222
- const storedRows = Array.isArray(stored) ? stored.filter(isRecord$3) : [];
6222
+ const storedRows = Array.isArray(stored) ? stored.filter(isRecord$4) : [];
6223
6223
  if (!Array.isArray(incoming)) {
6224
6224
  ctx.deletes.push(...collectSecretMarkerRefs(storedRows));
6225
6225
  return {
@@ -6235,7 +6235,7 @@ async function writeArray(ctx, node, incoming, stored, fieldPath) {
6235
6235
  const kept = /* @__PURE__ */ new Set();
6236
6236
  const rows = [];
6237
6237
  for (const row of incoming) {
6238
- if (!isRecord$3(row)) {
6238
+ if (!isRecord$4(row)) {
6239
6239
  rows.push(row);
6240
6240
  continue;
6241
6241
  }
@@ -6260,7 +6260,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6260
6260
  case "leaf": return writeLeaf(ctx, incoming, stored, fieldPath);
6261
6261
  case "array": return writeArray(ctx, node, incoming, stored, fieldPath);
6262
6262
  case "object": {
6263
- if (!isRecord$3(incoming)) {
6263
+ if (!isRecord$4(incoming)) {
6264
6264
  if (incoming === void 0) return KEEP;
6265
6265
  ctx.deletes.push(...collectSecretMarkerRefs(stored));
6266
6266
  return {
@@ -6268,7 +6268,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6268
6268
  value: incoming
6269
6269
  };
6270
6270
  }
6271
- const storedObj = isRecord$3(stored) ? stored : {};
6271
+ const storedObj = isRecord$4(stored) ? stored : {};
6272
6272
  return {
6273
6273
  kind: "value",
6274
6274
  value: await writeMembers(ctx, node.children, incoming, storedObj, (m) => `${fieldPath}.${m}`)
@@ -6391,7 +6391,7 @@ async function resolveSecretMarkers(value, secrets, options = {}) {
6391
6391
  value: items
6392
6392
  };
6393
6393
  }
6394
- if (isRecord$3(v)) {
6394
+ if (isRecord$4(v)) {
6395
6395
  const out = {};
6396
6396
  for (const [k, child] of Object.entries(v)) {
6397
6397
  const s = substitute(child);
@@ -6423,7 +6423,7 @@ var SecretOverwriteRefusedError = class extends Error {
6423
6423
  this.name = "SecretOverwriteRefusedError";
6424
6424
  }
6425
6425
  };
6426
- function isRecord$2(value) {
6426
+ function isRecord$3(value) {
6427
6427
  return typeof value === "object" && value !== null && !Array.isArray(value);
6428
6428
  }
6429
6429
  function resolvedValue(pass, marker) {
@@ -6452,7 +6452,7 @@ function inArray(pass, incoming, stored) {
6452
6452
  return incoming.map((item, index) => {
6453
6453
  const twin = stored[index];
6454
6454
  if (isSecretMarker(twin)) return typeof item === "string" && item === resolvedValue(pass, twin) ? twin : item;
6455
- if (isRecord$2(item) && isRecord$2(twin)) return inArrayRow(pass, item, twin);
6455
+ if (isRecord$3(item) && isRecord$3(twin)) return inArrayRow(pass, item, twin);
6456
6456
  if (Array.isArray(item) && Array.isArray(twin)) return inArray(pass, item, twin);
6457
6457
  return item;
6458
6458
  });
@@ -6463,7 +6463,7 @@ function inArrayRow(pass, incoming, stored) {
6463
6463
  const twin = stored[key];
6464
6464
  if (isSecretMarker(twin)) {
6465
6465
  if (typeof value === "string" && value === resolvedValue(pass, twin)) out[key] = twin;
6466
- } else if (isRecord$2(value) && isRecord$2(twin)) out[key] = inArrayRow(pass, value, twin);
6466
+ } else if (isRecord$3(value) && isRecord$3(twin)) out[key] = inArrayRow(pass, value, twin);
6467
6467
  else if (Array.isArray(value) && Array.isArray(twin)) out[key] = inArray(pass, value, twin);
6468
6468
  }
6469
6469
  return out;
@@ -6471,7 +6471,7 @@ function inArrayRow(pass, incoming, stored) {
6471
6471
  async function walk$1(pass, incoming, stored) {
6472
6472
  if (isSecretMarker(stored)) return atMarker(pass, incoming, stored);
6473
6473
  if (Array.isArray(incoming) && Array.isArray(stored)) return inArray(pass, incoming, stored);
6474
- if (!isRecord$2(incoming) || !isRecord$2(stored)) return incoming;
6474
+ if (!isRecord$3(incoming) || !isRecord$3(stored)) return incoming;
6475
6475
  const out = { ...incoming };
6476
6476
  for (const [key, value] of Object.entries(incoming)) out[key] = await walk$1(pass, value, stored[key]);
6477
6477
  return out;
@@ -6502,7 +6502,7 @@ async function restoreUnchangedSecrets(input) {
6502
6502
  function isJsonEqual(a, b) {
6503
6503
  if (Object.is(a, b)) return true;
6504
6504
  if (Array.isArray(a)) return Array.isArray(b) && a.length === b.length && a.every((v, i) => isJsonEqual(v, b[i]));
6505
- if (isRecord$2(a) && isRecord$2(b)) {
6505
+ if (isRecord$3(a) && isRecord$3(b)) {
6506
6506
  const keys = Object.keys(a);
6507
6507
  if (keys.length !== Object.keys(b).length) return false;
6508
6508
  return keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isJsonEqual(a[k], b[k]));
@@ -6526,7 +6526,7 @@ function markerKeysOf(blob, owner) {
6526
6526
  }
6527
6527
  function nodeFromStored(value, owner) {
6528
6528
  if (isSecretMarker(value)) return isSecretRefOwnedBy(value.$secret, owner) ? { kind: "leaf" } : null;
6529
- if (!isRecord$2(value)) return null;
6529
+ if (!isRecord$3(value)) return null;
6530
6530
  const children = /* @__PURE__ */ new Map();
6531
6531
  for (const [key, child] of Object.entries(value)) {
6532
6532
  const node = nodeFromStored(child, owner);
@@ -7314,7 +7314,7 @@ var BaseAddon = class {
7314
7314
  if (!ctx) return;
7315
7315
  const addonId = ctx.id;
7316
7316
  setImmediate(() => {
7317
- ctx.api.addons?.restartAddon?.mutate({ addonId }).then(() => {
7317
+ ctx.api.addons.restartAddon.mutate({ addonId }).then(() => {
7318
7318
  ctx.logger.info("addon auto-restart triggered by restart-required setting change", { meta: { changedFields: patchKeys.filter((k) => restartKeys.has(k)) } });
7319
7319
  }).catch((err) => {
7320
7320
  ctx.logger.error("addon auto-restart failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
@@ -16341,13 +16341,23 @@ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: arr
16341
16341
  }), RecordQueryResultSchema, { auth: "admin" }), method(object({
16342
16342
  owner: string().min(1),
16343
16343
  kind: RecordKindNameSchema,
16344
- records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX),
16344
+ records: array(RecordInputSchema).max(RECORD_BATCH_MAX),
16345
16345
  /** The LAST batch: the copy is complete, the boot guard stops asking. */
16346
16346
  complete: boolean().optional()
16347
- }), object({ adopted: number().int() }), {
16347
+ }).refine((input) => input.records.length > 0 || input.complete === true, { message: "records must be non-empty unless complete is true" }), object({ adopted: number().int() }), {
16348
16348
  kind: "mutation",
16349
16349
  auth: "admin"
16350
- });
16350
+ }), method(object({
16351
+ collection: string().min(1),
16352
+ cursor: string().optional(),
16353
+ limit: number().int().min(1).max(1e3).optional()
16354
+ }), object({
16355
+ rows: array(object({
16356
+ id: string(),
16357
+ data: record(string(), unknown())
16358
+ })),
16359
+ nextCursor: string().nullable()
16360
+ }), { auth: "admin" }), method(object({ collection: string().min(1) }), object({ adopted: boolean() }), { auth: "admin" });
16351
16361
  /**
16352
16362
  * record-entries - the ONE admin surface for every list of user-created entries
16353
16363
  * (D881): notification targets, brokers, LLM profiles, anything an addon
@@ -69310,6 +69320,12 @@ Object.freeze({
69310
69320
  addonId: null,
69311
69321
  access: "delete"
69312
69322
  },
69323
+ "storageAdmin.isAdoptedLegacyTable": {
69324
+ capName: "storage-admin",
69325
+ capScope: "system",
69326
+ addonId: null,
69327
+ access: "view"
69328
+ },
69313
69329
  "storageAdmin.listKinds": {
69314
69330
  capName: "storage-admin",
69315
69331
  capScope: "system",
@@ -69322,6 +69338,12 @@ Object.freeze({
69322
69338
  addonId: null,
69323
69339
  access: "view"
69324
69340
  },
69341
+ "storageAdmin.readLegacyCollection": {
69342
+ capName: "storage-admin",
69343
+ capScope: "system",
69344
+ addonId: null,
69345
+ access: "view"
69346
+ },
69325
69347
  "storageAdmin.readRecords": {
69326
69348
  capName: "storage-admin",
69327
69349
  capScope: "system",
package/dist/index.mjs CHANGED
@@ -5404,7 +5404,7 @@ var ZodIssueCode = {
5404
5404
  var ZodFirstPartyTypeKind;
5405
5405
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5406
5406
  //#endregion
5407
- //#region ../types/dist/sleep-WsrozGDL.mjs
5407
+ //#region ../types/dist/sleep-bZIhUvjd.mjs
5408
5408
  /**
5409
5409
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5410
5410
  * window to float samples (D455).
@@ -5521,7 +5521,7 @@ function isKeychainStoredField(field) {
5521
5521
  var SECRET_CLEAR = { $secretClear: true };
5522
5522
  /** The `'***'` token D634 redaction writes for non-admins. */
5523
5523
  var LEGACY_DEVICE_REDACTION = "***";
5524
- function isRecord$4(value) {
5524
+ function isRecord$5(value) {
5525
5525
  return typeof value === "object" && value !== null && !Array.isArray(value);
5526
5526
  }
5527
5527
  function makeSecretMarker(ref) {
@@ -5532,12 +5532,12 @@ function makeSecretMarker(ref) {
5532
5532
  }
5533
5533
  /** A stored marker: an object whose `$secret` is a non-empty string. */
5534
5534
  function isSecretMarker(value) {
5535
- if (!isRecord$4(value)) return false;
5535
+ if (!isRecord$5(value)) return false;
5536
5536
  const ref = value["$secret"];
5537
5537
  return typeof ref === "string" && ref.length > 0;
5538
5538
  }
5539
5539
  function isSecretClear(value) {
5540
- return isRecord$4(value) && value["$secretClear"] === true;
5540
+ return isRecord$5(value) && value["$secretClear"] === true;
5541
5541
  }
5542
5542
  /**
5543
5543
  * The UI view of a stored secret field value: a marker becomes "set", inline
@@ -6147,7 +6147,7 @@ var KeychainWriteRefusedError = class extends Error {
6147
6147
  }
6148
6148
  };
6149
6149
  var KEEP = { kind: "keep" };
6150
- function isRecord$3(value) {
6150
+ function isRecord$4(value) {
6151
6151
  return typeof value === "object" && value !== null && !Array.isArray(value);
6152
6152
  }
6153
6153
  function defaultMintId() {
@@ -6160,7 +6160,7 @@ function collectSecretMarkerRefs(value, out = []) {
6160
6160
  return out;
6161
6161
  }
6162
6162
  if (Array.isArray(value)) for (const item of value) collectSecretMarkerRefs(item, out);
6163
- else if (isRecord$3(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6163
+ else if (isRecord$4(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6164
6164
  return out;
6165
6165
  }
6166
6166
  async function storedValueEquals(secrets, marker, candidate) {
@@ -6215,7 +6215,7 @@ function rowId(row, idKey) {
6215
6215
  return null;
6216
6216
  }
6217
6217
  async function writeArray(ctx, node, incoming, stored, fieldPath) {
6218
- const storedRows = Array.isArray(stored) ? stored.filter(isRecord$3) : [];
6218
+ const storedRows = Array.isArray(stored) ? stored.filter(isRecord$4) : [];
6219
6219
  if (!Array.isArray(incoming)) {
6220
6220
  ctx.deletes.push(...collectSecretMarkerRefs(storedRows));
6221
6221
  return {
@@ -6231,7 +6231,7 @@ async function writeArray(ctx, node, incoming, stored, fieldPath) {
6231
6231
  const kept = /* @__PURE__ */ new Set();
6232
6232
  const rows = [];
6233
6233
  for (const row of incoming) {
6234
- if (!isRecord$3(row)) {
6234
+ if (!isRecord$4(row)) {
6235
6235
  rows.push(row);
6236
6236
  continue;
6237
6237
  }
@@ -6256,7 +6256,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6256
6256
  case "leaf": return writeLeaf(ctx, incoming, stored, fieldPath);
6257
6257
  case "array": return writeArray(ctx, node, incoming, stored, fieldPath);
6258
6258
  case "object": {
6259
- if (!isRecord$3(incoming)) {
6259
+ if (!isRecord$4(incoming)) {
6260
6260
  if (incoming === void 0) return KEEP;
6261
6261
  ctx.deletes.push(...collectSecretMarkerRefs(stored));
6262
6262
  return {
@@ -6264,7 +6264,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6264
6264
  value: incoming
6265
6265
  };
6266
6266
  }
6267
- const storedObj = isRecord$3(stored) ? stored : {};
6267
+ const storedObj = isRecord$4(stored) ? stored : {};
6268
6268
  return {
6269
6269
  kind: "value",
6270
6270
  value: await writeMembers(ctx, node.children, incoming, storedObj, (m) => `${fieldPath}.${m}`)
@@ -6387,7 +6387,7 @@ async function resolveSecretMarkers(value, secrets, options = {}) {
6387
6387
  value: items
6388
6388
  };
6389
6389
  }
6390
- if (isRecord$3(v)) {
6390
+ if (isRecord$4(v)) {
6391
6391
  const out = {};
6392
6392
  for (const [k, child] of Object.entries(v)) {
6393
6393
  const s = substitute(child);
@@ -6419,7 +6419,7 @@ var SecretOverwriteRefusedError = class extends Error {
6419
6419
  this.name = "SecretOverwriteRefusedError";
6420
6420
  }
6421
6421
  };
6422
- function isRecord$2(value) {
6422
+ function isRecord$3(value) {
6423
6423
  return typeof value === "object" && value !== null && !Array.isArray(value);
6424
6424
  }
6425
6425
  function resolvedValue(pass, marker) {
@@ -6448,7 +6448,7 @@ function inArray(pass, incoming, stored) {
6448
6448
  return incoming.map((item, index) => {
6449
6449
  const twin = stored[index];
6450
6450
  if (isSecretMarker(twin)) return typeof item === "string" && item === resolvedValue(pass, twin) ? twin : item;
6451
- if (isRecord$2(item) && isRecord$2(twin)) return inArrayRow(pass, item, twin);
6451
+ if (isRecord$3(item) && isRecord$3(twin)) return inArrayRow(pass, item, twin);
6452
6452
  if (Array.isArray(item) && Array.isArray(twin)) return inArray(pass, item, twin);
6453
6453
  return item;
6454
6454
  });
@@ -6459,7 +6459,7 @@ function inArrayRow(pass, incoming, stored) {
6459
6459
  const twin = stored[key];
6460
6460
  if (isSecretMarker(twin)) {
6461
6461
  if (typeof value === "string" && value === resolvedValue(pass, twin)) out[key] = twin;
6462
- } else if (isRecord$2(value) && isRecord$2(twin)) out[key] = inArrayRow(pass, value, twin);
6462
+ } else if (isRecord$3(value) && isRecord$3(twin)) out[key] = inArrayRow(pass, value, twin);
6463
6463
  else if (Array.isArray(value) && Array.isArray(twin)) out[key] = inArray(pass, value, twin);
6464
6464
  }
6465
6465
  return out;
@@ -6467,7 +6467,7 @@ function inArrayRow(pass, incoming, stored) {
6467
6467
  async function walk$1(pass, incoming, stored) {
6468
6468
  if (isSecretMarker(stored)) return atMarker(pass, incoming, stored);
6469
6469
  if (Array.isArray(incoming) && Array.isArray(stored)) return inArray(pass, incoming, stored);
6470
- if (!isRecord$2(incoming) || !isRecord$2(stored)) return incoming;
6470
+ if (!isRecord$3(incoming) || !isRecord$3(stored)) return incoming;
6471
6471
  const out = { ...incoming };
6472
6472
  for (const [key, value] of Object.entries(incoming)) out[key] = await walk$1(pass, value, stored[key]);
6473
6473
  return out;
@@ -6498,7 +6498,7 @@ async function restoreUnchangedSecrets(input) {
6498
6498
  function isJsonEqual(a, b) {
6499
6499
  if (Object.is(a, b)) return true;
6500
6500
  if (Array.isArray(a)) return Array.isArray(b) && a.length === b.length && a.every((v, i) => isJsonEqual(v, b[i]));
6501
- if (isRecord$2(a) && isRecord$2(b)) {
6501
+ if (isRecord$3(a) && isRecord$3(b)) {
6502
6502
  const keys = Object.keys(a);
6503
6503
  if (keys.length !== Object.keys(b).length) return false;
6504
6504
  return keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isJsonEqual(a[k], b[k]));
@@ -6522,7 +6522,7 @@ function markerKeysOf(blob, owner) {
6522
6522
  }
6523
6523
  function nodeFromStored(value, owner) {
6524
6524
  if (isSecretMarker(value)) return isSecretRefOwnedBy(value.$secret, owner) ? { kind: "leaf" } : null;
6525
- if (!isRecord$2(value)) return null;
6525
+ if (!isRecord$3(value)) return null;
6526
6526
  const children = /* @__PURE__ */ new Map();
6527
6527
  for (const [key, child] of Object.entries(value)) {
6528
6528
  const node = nodeFromStored(child, owner);
@@ -7310,7 +7310,7 @@ var BaseAddon = class {
7310
7310
  if (!ctx) return;
7311
7311
  const addonId = ctx.id;
7312
7312
  setImmediate(() => {
7313
- ctx.api.addons?.restartAddon?.mutate({ addonId }).then(() => {
7313
+ ctx.api.addons.restartAddon.mutate({ addonId }).then(() => {
7314
7314
  ctx.logger.info("addon auto-restart triggered by restart-required setting change", { meta: { changedFields: patchKeys.filter((k) => restartKeys.has(k)) } });
7315
7315
  }).catch((err) => {
7316
7316
  ctx.logger.error("addon auto-restart failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
@@ -16337,13 +16337,23 @@ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: arr
16337
16337
  }), RecordQueryResultSchema, { auth: "admin" }), method(object({
16338
16338
  owner: string().min(1),
16339
16339
  kind: RecordKindNameSchema,
16340
- records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX),
16340
+ records: array(RecordInputSchema).max(RECORD_BATCH_MAX),
16341
16341
  /** The LAST batch: the copy is complete, the boot guard stops asking. */
16342
16342
  complete: boolean().optional()
16343
- }), object({ adopted: number().int() }), {
16343
+ }).refine((input) => input.records.length > 0 || input.complete === true, { message: "records must be non-empty unless complete is true" }), object({ adopted: number().int() }), {
16344
16344
  kind: "mutation",
16345
16345
  auth: "admin"
16346
- });
16346
+ }), method(object({
16347
+ collection: string().min(1),
16348
+ cursor: string().optional(),
16349
+ limit: number().int().min(1).max(1e3).optional()
16350
+ }), object({
16351
+ rows: array(object({
16352
+ id: string(),
16353
+ data: record(string(), unknown())
16354
+ })),
16355
+ nextCursor: string().nullable()
16356
+ }), { auth: "admin" }), method(object({ collection: string().min(1) }), object({ adopted: boolean() }), { auth: "admin" });
16347
16357
  /**
16348
16358
  * record-entries - the ONE admin surface for every list of user-created entries
16349
16359
  * (D881): notification targets, brokers, LLM profiles, anything an addon
@@ -69306,6 +69316,12 @@ Object.freeze({
69306
69316
  addonId: null,
69307
69317
  access: "delete"
69308
69318
  },
69319
+ "storageAdmin.isAdoptedLegacyTable": {
69320
+ capName: "storage-admin",
69321
+ capScope: "system",
69322
+ addonId: null,
69323
+ access: "view"
69324
+ },
69309
69325
  "storageAdmin.listKinds": {
69310
69326
  capName: "storage-admin",
69311
69327
  capScope: "system",
@@ -69318,6 +69334,12 @@ Object.freeze({
69318
69334
  addonId: null,
69319
69335
  access: "view"
69320
69336
  },
69337
+ "storageAdmin.readLegacyCollection": {
69338
+ capName: "storage-admin",
69339
+ capScope: "system",
69340
+ addonId: null,
69341
+ access: "view"
69342
+ },
69321
69343
  "storageAdmin.readRecords": {
69322
69344
  capName: "storage-admin",
69323
69345
  capScope: "system",
@@ -1,6 +1,6 @@
1
1
  import { S as e, d as t, u as n, v as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C-pbjC7c.mjs";
2
2
  import { n as i, r as a, t as o } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
3
- import { c as s, l as c } from "./responsive-xOj-SfJF.mjs";
3
+ import { c as s, l as c } from "./responsive-BHlSXMJE.mjs";
4
4
  var l = c("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",
6
6
  key: "qrunsl"
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-epKXdpkT.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-BXh9f7q7.mjs";
2
2
  export { t as get, e as init };
@@ -1,6 +1,6 @@
1
1
  import { S as e, d as t, g as n, i as r, l as i, n as a, r as o, u as s, v as c, y as l } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C-pbjC7c.mjs";
2
2
  import "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
3
- import { i as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Dfue3rir.mjs";
3
+ import { i as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DAgSwKUp.mjs";
4
4
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
5
5
  e();
6
6
  var d = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), f = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), p = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), m = (e) => {
@@ -1,6 +1,6 @@
1
1
  import { S as e, g as t, l as n, v as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C-pbjC7c.mjs";
2
2
  import { n as i } from "./ui-text-BitwQ50T.mjs";
3
- import { l as a } from "./responsive-xOj-SfJF.mjs";
3
+ import { l as a } from "./responsive-BHlSXMJE.mjs";
4
4
  var o = a("camera", [["path", {
5
5
  d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
6
6
  key: "18u6gg"
@@ -1,4 +1,4 @@
1
- import { l as e } from "./responsive-xOj-SfJF.mjs";
1
+ import { l as e } from "./responsive-BHlSXMJE.mjs";
2
2
  var t = e("eye-off", [
3
3
  ["path", {
4
4
  d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",
@@ -1,4 +1,4 @@
1
- import { l as e } from "./responsive-xOj-SfJF.mjs";
1
+ import { l as e } from "./responsive-BHlSXMJE.mjs";
2
2
  var t = e("trash-2", [
3
3
  ["path", {
4
4
  d: "M10 11v6",
@@ -2753,7 +2753,7 @@ async function rr(e) {
2753
2753
  }
2754
2754
  }
2755
2755
  async function ir() {
2756
- return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-DkadILEV.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-CWKUwM9u.mjs")).catch((e) => {
2757
2757
  throw tr = void 0, e;
2758
2758
  }), tr;
2759
2759
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-osd-manager",
3
- "version": "0.1.244",
3
+ "version": "0.1.245",
4
4
  "description": "Binds camera on-screen-display slots to live state and recognitions",
5
5
  "keywords": [
6
6
  "camstack",