@camstack/system 1.2.456 → 1.2.457

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 (117) hide show
  1. package/dist/addon-runner.js +96 -10
  2. package/dist/addon-runner.mjs +96 -10
  3. package/dist/{agent-https-fm4AR8XL.mjs → agent-https-CK9Z4sSR.mjs} +2 -2
  4. package/dist/{agent-https-yjxdfJDA.js → agent-https-CoyOZ3pC.js} +2 -2
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  9. package/dist/builtins/alerts/alerts.addon.js +2 -2
  10. package/dist/builtins/alerts/alerts.addon.mjs +2 -2
  11. package/dist/builtins/autotrack/index.js +1 -1
  12. package/dist/builtins/autotrack/index.mjs +1 -1
  13. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  14. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  15. package/dist/builtins/calendars/calendars.addon.js +1 -1
  16. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  17. package/dist/builtins/camera-grid/index.js +1 -1
  18. package/dist/builtins/camera-grid/index.mjs +1 -1
  19. package/dist/builtins/composer/composer.addon.js +2 -2
  20. package/dist/builtins/composer/composer.addon.mjs +2 -2
  21. package/dist/builtins/console-logging/console-destination.d.ts +1 -2
  22. package/dist/builtins/console-logging/index.js +1 -4
  23. package/dist/builtins/console-logging/index.mjs +1 -4
  24. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  25. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  26. package/dist/builtins/device-history/capture/capture-engine.d.ts +6 -0
  27. package/dist/builtins/device-history/device-history.addon.js +441 -83
  28. package/dist/builtins/device-history/device-history.addon.mjs +441 -83
  29. package/dist/builtins/device-history/query/history-query.d.ts +35 -9
  30. package/dist/builtins/device-history/query/point-shape.d.ts +33 -0
  31. package/dist/builtins/device-history/retention/retention.d.ts +1 -1
  32. package/dist/builtins/device-history/rollup/rollup-engine.d.ts +2 -0
  33. package/dist/builtins/device-history/rollup/rollup-math.d.ts +6 -0
  34. package/dist/builtins/device-history/store/history-store.d.ts +7 -0
  35. package/dist/builtins/device-history/store/series-registry.d.ts +26 -1
  36. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  37. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  38. package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts +1 -2
  39. package/dist/builtins/hub-forwarder/index.js +1 -4
  40. package/dist/builtins/hub-forwarder/index.mjs +1 -4
  41. package/dist/builtins/keychain/index.js +4 -4
  42. package/dist/builtins/keychain/index.mjs +4 -4
  43. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  44. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  45. package/dist/builtins/local-auth/local-auth.addon.js +3 -3
  46. package/dist/builtins/local-auth/local-auth.addon.mjs +3 -3
  47. package/dist/builtins/local-network/local-network.addon.js +2 -2
  48. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  49. package/dist/builtins/loki-logging/index.js +323 -7
  50. package/dist/builtins/loki-logging/index.mjs +323 -7
  51. package/dist/builtins/loki-logging/loki-destination.d.ts +20 -3
  52. package/dist/builtins/loki-logging/loki-read.d.ts +51 -0
  53. package/dist/builtins/native-metrics/native-metrics.addon.js +290 -112
  54. package/dist/builtins/native-metrics/native-metrics.addon.mjs +290 -112
  55. package/dist/builtins/native-metrics/node-metrics-history-recorder.d.ts +106 -35
  56. package/dist/builtins/platform-probe/index.js +1 -1
  57. package/dist/builtins/platform-probe/index.mjs +1 -1
  58. package/dist/builtins/record-entries/index.js +1 -1
  59. package/dist/builtins/record-entries/index.mjs +1 -1
  60. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  61. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  62. package/dist/builtins/snapshot/index.js +1 -1
  63. package/dist/builtins/snapshot/index.mjs +1 -1
  64. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  65. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  66. package/dist/builtins/sqlite-storage/index.js +1 -1
  67. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  68. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +2 -2
  69. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +2 -2
  70. package/dist/builtins/storage-orchestrator/location-history-recorder.d.ts +76 -0
  71. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +9 -0
  72. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +144 -1
  73. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +144 -1
  74. package/dist/builtins/system-config/system-config.addon.js +3 -3
  75. package/dist/builtins/system-config/system-config.addon.mjs +3 -3
  76. package/dist/builtins/winston-logging/index.js +165 -3
  77. package/dist/builtins/winston-logging/index.mjs +165 -3
  78. package/dist/builtins/winston-logging/log-file-cursor.d.ts +12 -0
  79. package/dist/builtins/winston-logging/log-file-index-store.d.ts +11 -0
  80. package/dist/builtins/winston-logging/log-file-index.d.ts +77 -0
  81. package/dist/builtins/winston-logging/log-file-read-client.d.ts +44 -0
  82. package/dist/builtins/winston-logging/log-file-read-protocol.d.ts +41 -0
  83. package/dist/builtins/winston-logging/log-file-read-worker.d.ts +1 -0
  84. package/dist/builtins/winston-logging/log-file-reader.d.ts +51 -0
  85. package/dist/builtins/winston-logging/winston-destination.d.ts +20 -2
  86. package/dist/{composition-sources-Ds0Vr6eD.mjs → composition-sources-B_jeZDRJ.mjs} +1 -1
  87. package/dist/{composition-sources-gB4coDJR.js → composition-sources-qKyvMAvc.js} +1 -1
  88. package/dist/{constants-CavyKfHZ.js → constants-B_X9cWEK.js} +1 -1
  89. package/dist/{constants-i5oD_gLB.mjs → constants-cxKcZRMi.mjs} +1 -1
  90. package/dist/{device-ca-qz1Pmeu1.mjs → device-ca-BB6nHAL5.mjs} +1 -1
  91. package/dist/{device-ca-bpoEr0zG.js → device-ca-CVK3YcR_.js} +1 -1
  92. package/dist/{dist-BpqA2CT0.js → dist-C89nqNnn.js} +471 -47
  93. package/dist/{dist-BSF_C8W2.mjs → dist-Dhux90yB.mjs} +454 -48
  94. package/dist/file-host-worker.js +1 -1
  95. package/dist/file-host-worker.mjs +1 -1
  96. package/dist/{hub-mdns-ciao-CHaGDzyz.mjs → hub-mdns-ciao-B8olZqqd.mjs} +2 -2
  97. package/dist/{hub-mdns-ciao-CZlZRxxA.js → hub-mdns-ciao-DB1Y9agt.js} +2 -2
  98. package/dist/index.d.ts +1 -0
  99. package/dist/index.js +135 -20
  100. package/dist/index.mjs +129 -21
  101. package/dist/kernel/config-schema.d.ts +5 -0
  102. package/dist/kernel/moleculer/accessory-prune-gate.d.ts +55 -0
  103. package/dist/log-file-read-protocol-B7M3X3bT.mjs +785 -0
  104. package/dist/log-file-read-protocol-D0WcLbIV.js +817 -0
  105. package/dist/log-file-read-worker.js +64 -0
  106. package/dist/log-file-read-worker.mjs +64 -0
  107. package/dist/log-read-filter-Bi066jwU.js +134 -0
  108. package/dist/log-read-filter-D7Ev3zm-.mjs +93 -0
  109. package/dist/logging/log-manager.d.ts +10 -6
  110. package/dist/logging/log-read-filter.d.ts +43 -0
  111. package/dist/{phase6-declare-gate-n-IZRklX.js → phase6-declare-gate-BO-_jLh_.js} +1 -1
  112. package/dist/{phase6-declare-gate-B4yfsf2n.mjs → phase6-declare-gate-x9ZCbQJP.mjs} +1 -1
  113. package/dist/{restore-archive-B4QG7XmX.js → restore-archive-4DOUR5Gu.js} +1 -1
  114. package/dist/{restore-archive-BGUM4FKf.mjs → restore-archive-DyOaPeAr.mjs} +1 -1
  115. package/dist/{wal-maintenance-AerF4XE6.mjs → wal-maintenance-BMiX6UIa.mjs} +0 -0
  116. package/dist/{wal-maintenance-CNEs_I94.js → wal-maintenance-DVN-DiVP.js} +0 -0
  117. package/package.json +1 -1
@@ -745,7 +745,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
745
745
  return EventCategory;
746
746
  }({});
747
747
  //#endregion
748
- //#region ../types/dist/sleep-yKL5gfrH.mjs
748
+ //#region ../types/dist/sleep-BSuCCFjf.mjs
749
749
  /**
750
750
  * The audio chunk plane's byte format, and the ONE expansion from a coded
751
751
  * window to float samples (D455).
@@ -17748,11 +17748,30 @@ var DeviceHistorySubjectSchema = zod.z.discriminatedUnion("kind", [zod.z.object(
17748
17748
  kind: zod.z.literal("node"),
17749
17749
  nodeId: zod.z.string().min(1)
17750
17750
  })]);
17751
+ /**
17752
+ * `enum` stores a STATE as the ordinal of its value in the series' value list
17753
+ * (`DeviceHistorySeriesInfo.values`, append-only, so an ordinal never changes
17754
+ * meaning); a rollup keeps the time spent in each state (`states`).
17755
+ */
17751
17756
  var DeviceHistoryKindSchema = zod.z.enum([
17757
+ "gauge",
17758
+ "counter",
17759
+ "boolean",
17760
+ "enum"
17761
+ ]);
17762
+ /** What a PRODUCER may declare. `enum` is cap-only: its value list is the cap field's. */
17763
+ var DeviceHistoryProducerKindSchema = zod.z.enum([
17752
17764
  "gauge",
17753
17765
  "counter",
17754
17766
  "boolean"
17755
17767
  ]);
17768
+ /**
17769
+ * A key computed at READ time from stored series of the same device, never
17770
+ * stored itself. Energy (kWh per bucket) comes from the power meter's
17771
+ * `kwhTotal` counter when the device has one, else from integrating its
17772
+ * `watts` gauge over time.
17773
+ */
17774
+ var DEVICE_HISTORY_ENERGY_KEY = "derived:energy.kwh";
17756
17775
  var DeviceHistoryResolutionSchema = zod.z.enum([
17757
17776
  "raw",
17758
17777
  "5m",
@@ -17785,7 +17804,13 @@ var SeriesInfoSchema = zod.z.object({
17785
17804
  /** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
17786
17805
  unit: zod.z.string().nullable(),
17787
17806
  displayName: zod.z.string(),
17788
- source: zod.z.enum(["cap", "addon"]),
17807
+ source: zod.z.enum([
17808
+ "cap",
17809
+ "addon",
17810
+ "derived"
17811
+ ]),
17812
+ /** `enum`: the value of each ordinal (index = ordinal); `null` for every other kind. */
17813
+ values: zod.z.array(zod.z.string()).readonly().nullable(),
17789
17814
  firstTs: zod.z.number(),
17790
17815
  lastTs: zod.z.number()
17791
17816
  });
@@ -17799,17 +17824,31 @@ var QueryPointSchema = zod.z.object({
17799
17824
  twMean: zod.z.number().nullable(),
17800
17825
  min: zod.z.number(),
17801
17826
  max: zod.z.number(),
17802
- /** `null` is unknown, never zero (D393). */
17803
- last: zod.z.number().nullable()
17827
+ /** `null` is unknown, never zero (D393). For an `enum` series: the ordinal of {@link state}. */
17828
+ last: zod.z.number().nullable(),
17829
+ /**
17830
+ * The increase over the point: a `counter`'s growth since the previous point
17831
+ * or bucket (a drop is a reset, counted from zero), and for
17832
+ * {@link DEVICE_HISTORY_ENERGY_KEY} the kWh used in the bucket. `null` for
17833
+ * every other kind, and when it cannot be known.
17834
+ */
17835
+ delta: zod.z.number().nullable(),
17836
+ /** `enum`: the state in force at the end of the point (the name of `last`); `null` otherwise. */
17837
+ state: zod.z.string().nullable(),
17838
+ /** `enum` rollup: milliseconds spent in each state inside the bucket; `null` for raw points and other kinds. */
17839
+ states: zod.z.record(zod.z.string(), zod.z.number()).nullable()
17804
17840
  });
17805
17841
  var QuerySeriesSchema = zod.z.object({
17806
17842
  scope: zod.z.string(),
17807
17843
  /** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
17808
17844
  before: zod.z.object({
17809
17845
  t: zod.z.number(),
17810
- value: zod.z.number().nullable()
17846
+ value: zod.z.number().nullable(),
17847
+ state: zod.z.string().nullable()
17811
17848
  }).nullable(),
17812
- points: zod.z.array(QueryPointSchema).readonly()
17849
+ points: zod.z.array(QueryPointSchema).readonly(),
17850
+ /** A derived key: the stored key its points were computed from; `null` for a stored series. */
17851
+ derivedFrom: zod.z.string().nullable()
17813
17852
  });
17814
17853
  /** The window part of a query, shared by the device and node forms. */
17815
17854
  var QueryWindowShape = {
@@ -17825,6 +17864,23 @@ var QueryResultSchema = zod.z.object({
17825
17864
  series: zod.z.array(QuerySeriesSchema).readonly(),
17826
17865
  truncated: zod.z.boolean()
17827
17866
  });
17867
+ /** One read of a batch: a device's key or a node's key (exactly one subject). */
17868
+ var QueryManyItemSchema = zod.z.union([zod.z.object({
17869
+ deviceId: zod.z.number().int(),
17870
+ key: zod.z.string(),
17871
+ scope: zod.z.string().optional()
17872
+ }), zod.z.object({
17873
+ forNodeId: zod.z.string().min(1),
17874
+ key: zod.z.string(),
17875
+ scope: zod.z.string().optional()
17876
+ })]);
17877
+ var QueryManyEntrySchema = zod.z.discriminatedUnion("ok", [zod.z.object({
17878
+ ok: zod.z.literal(true),
17879
+ result: QueryResultSchema
17880
+ }), zod.z.object({
17881
+ ok: zod.z.literal(false),
17882
+ error: zod.z.string()
17883
+ })]);
17828
17884
  var TierStatusSchema = zod.z.object({
17829
17885
  tier: DeviceHistoryResolutionSchema,
17830
17886
  /** `null` until the first background count answered. */
@@ -17893,26 +17949,45 @@ var deviceHistoryCapability = {
17893
17949
  * `listNodeSeries` / `queryNode`.
17894
17950
  */
17895
17951
  listSeries: method(zod.z.object({ deviceId: zod.z.number().int() }), zod.z.array(SeriesInfoSchema).readonly()),
17896
- listNodeSeries: method(zod.z.object({ nodeId: zod.z.string().min(1) }), zod.z.array(SeriesInfoSchema).readonly(), { auth: "admin" }),
17952
+ /**
17953
+ * A NODE's series. The subject is `forNodeId`, never `nodeId`: a top-level
17954
+ * `nodeId` is the cap ROUTING key, and `nodeId: 'little-unraid'` sent the
17955
+ * read to that agent, which hosts no device-history.
17956
+ */
17957
+ listNodeSeries: method(zod.z.object({ forNodeId: zod.z.string().min(1) }), zod.z.array(SeriesInfoSchema).readonly(), { auth: "admin" }),
17897
17958
  /**
17898
17959
  * One series (or every scope of it) at one resolution. `auto` picks the
17899
17960
  * finest tier whose retention covers `from` and whose point count fits
17900
17961
  * `maxPoints`; when even the coarsest tier does not fit, the newest
17901
- * `maxPoints` points are returned and `truncated` is true.
17962
+ * `maxPoints` points are returned and `truncated` is true. A series fed by
17963
+ * closed buckets has no raw rows, so `auto` never answers it from raw; nor
17964
+ * {@link DEVICE_HISTORY_ENERGY_KEY}, which is computed from rollups.
17902
17965
  */
17903
17966
  query: method(zod.z.object({
17904
17967
  deviceId: zod.z.number().int(),
17905
17968
  ...QueryWindowShape
17906
17969
  }), QueryResultSchema),
17907
17970
  queryNode: method(zod.z.object({
17908
- nodeId: zod.z.string().min(1),
17971
+ forNodeId: zod.z.string().min(1),
17909
17972
  ...QueryWindowShape
17910
17973
  }), QueryResultSchema, { auth: "admin" }),
17974
+ /**
17975
+ * Several reads over ONE window, answered in order (one entry per item).
17976
+ * Admin-only: its subjects are nested in `items`, where the device scope
17977
+ * gate cannot see them — a principal limited to one device uses `query`.
17978
+ */
17979
+ queryMany: method(zod.z.object({
17980
+ items: zod.z.array(QueryManyItemSchema).min(1).max(24),
17981
+ from: QueryWindowShape.from,
17982
+ to: QueryWindowShape.to,
17983
+ resolution: QueryWindowShape.resolution,
17984
+ maxPoints: QueryWindowShape.maxPoints
17985
+ }), zod.z.object({ results: zod.z.array(QueryManyEntrySchema).readonly() }), { auth: "admin" }),
17911
17986
  /** Producer: declare (idempotent) a series key this addon owns: `addon:<callerAddonId>/<name>`. */
17912
17987
  declareSeries: method(zod.z.object({
17913
17988
  name: zod.z.string().regex(/^[a-z0-9-]+$/),
17914
17989
  subjectKind: zod.z.enum(["device", "node"]),
17915
- kind: DeviceHistoryKindSchema,
17990
+ kind: DeviceHistoryProducerKindSchema,
17916
17991
  unit: zod.z.string().optional(),
17917
17992
  displayName: zod.z.string().min(1),
17918
17993
  ingest: zod.z.enum(["points", "buckets"])
@@ -42839,6 +42914,103 @@ var LogEntrySchema = zod.z.object({
42839
42914
  meta: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
42840
42915
  tags: zod.z.record(zod.z.string(), zod.z.string()).optional()
42841
42916
  });
42917
+ /**
42918
+ * A history READ against one destination (D898).
42919
+ *
42920
+ * Every filter is applied by the PROVIDER, before the limit — a filter the
42921
+ * browser applied after the limit is what made a rare device's lines
42922
+ * unreachable behind a busy one's. `before` / `after` are cursors the provider
42923
+ * minted (opaque to everyone else): a file position for the rotated files, a
42924
+ * nanosecond timestamp for Loki.
42925
+ *
42926
+ * A read is BOUNDED by `budgetMs`: a filter that matches nothing on a 30-day
42927
+ * store answers `done: false` with the cursor it reached and the bytes it
42928
+ * scanned, and the caller decides whether to go on. That is what makes a long
42929
+ * scan show progress and stop when asked — `cancelRead` ends the slice in
42930
+ * flight, and not asking for the next slice ends the scan.
42931
+ */
42932
+ var LogReadQuerySchema = zod.z.object({
42933
+ /** Correlates `cancelRead`. Caller-chosen, unique per in-flight read. */
42934
+ requestId: zod.z.string().min(1).max(64).optional(),
42935
+ /** The device the line is about (`tags.deviceId`, numeric). */
42936
+ deviceId: zod.z.number().int().optional(),
42937
+ /**
42938
+ * The emitting addon — bare manifest id; `@<version>` / `::<sub>` suffixes
42939
+ * match. Not `addonId`: a cap router reads that name as "which provider".
42940
+ */
42941
+ fromAddonId: zod.z.string().min(1).max(200).optional(),
42942
+ /**
42943
+ * The emitting node: matches the agent that emitted the line, the node
42944
+ * itself, or a worker under it (`<agent>/<runner>`) — the `agentId`
42945
+ * semantics of `matchesLogTags`. Not `nodeId`: a cap router reads that
42946
+ * name as "which node's provider".
42947
+ */
42948
+ fromNodeId: zod.z.string().min(1).max(200).optional(),
42949
+ /** Any other tag, exact match (AND). */
42950
+ tags: zod.z.record(zod.z.string(), zod.z.union([zod.z.string(), zod.z.number()])).optional(),
42951
+ /** Severity FLOOR: this level and above. */
42952
+ level: LogLevelSchema.optional(),
42953
+ /** Case-insensitive substring over message, scope, tag values and meta values. */
42954
+ text: zod.z.string().min(1).max(200).optional(),
42955
+ /** Epoch ms, inclusive. */
42956
+ since: zod.z.number().optional(),
42957
+ /** Epoch ms, inclusive. */
42958
+ until: zod.z.number().optional(),
42959
+ /** Older than this cursor (exclusive). Absent with `after` absent ⇒ from the newest. */
42960
+ before: zod.z.string().min(1).max(1024).optional(),
42961
+ /** Newer than this cursor (exclusive). */
42962
+ after: zod.z.string().min(1).max(1024).optional(),
42963
+ limit: zod.z.number().int().min(1).max(1e3).optional(),
42964
+ /** Wall-clock bound of this slice. The provider caps it. */
42965
+ budgetMs: zod.z.number().int().min(50).max(1e4).optional()
42966
+ });
42967
+ var LogReadEntrySchema = zod.z.object({
42968
+ /** `<bootId>.<seq>` minted by the emitting LogManager — the dedupe key. */
42969
+ id: zod.z.string().optional(),
42970
+ /** Epoch ms. */
42971
+ timestamp: zod.z.number(),
42972
+ level: LogLevelSchema,
42973
+ scope: zod.z.string().optional(),
42974
+ message: zod.z.string(),
42975
+ tags: zod.z.record(zod.z.string(), zod.z.union([zod.z.string(), zod.z.number()])).optional(),
42976
+ meta: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
42977
+ });
42978
+ var LogReadResultSchema = zod.z.object({
42979
+ /** Newest first. */
42980
+ entries: zod.z.array(LogReadEntrySchema),
42981
+ /** Pass as `before` for the next older page; null when nothing older exists. */
42982
+ nextBefore: zod.z.string().nullable(),
42983
+ /** Pass as `after` to read what arrived since; null when unknown. */
42984
+ nextAfter: zod.z.string().nullable(),
42985
+ /** Bytes this slice read (files) or received (remote). Progress, not a promise. */
42986
+ scannedBytes: zod.z.number().int().nonnegative(),
42987
+ /**
42988
+ * True when the scan in this direction reached the end of the store.
42989
+ * False with fewer than `limit` entries means the budget ran out first —
42990
+ * call again with `nextBefore` to go on.
42991
+ */
42992
+ done: zod.z.boolean(),
42993
+ /** True when `cancelRead` ended this slice early. */
42994
+ cancelled: zod.z.boolean().optional()
42995
+ });
42996
+ var LogReadCapabilitiesSchema = zod.z.object({
42997
+ /** False ⇒ this destination only ships lines (console, forwarder, an unconfigured Loki). */
42998
+ readable: zod.z.boolean(),
42999
+ /** Why not, when `readable` is false — rendered next to the source. */
43000
+ reason: zod.z.string().nullable(),
43001
+ /** Filters the provider applies itself. A false one is applied by nobody. */
43002
+ filters: zod.z.object({
43003
+ deviceId: zod.z.boolean(),
43004
+ addonId: zod.z.boolean(),
43005
+ nodeId: zod.z.boolean(),
43006
+ tags: zod.z.boolean(),
43007
+ level: zod.z.boolean(),
43008
+ text: zod.z.boolean(),
43009
+ timeRange: zod.z.boolean()
43010
+ }),
43011
+ /** How far back the store reaches, when the provider knows (days). */
43012
+ retentionDays: zod.z.number().nullable()
43013
+ });
42842
43014
  var logDestinationCapability = {
42843
43015
  name: "log-destination",
42844
43016
  scope: "system",
@@ -42846,14 +43018,13 @@ var logDestinationCapability = {
42846
43018
  internal: true,
42847
43019
  methods: {
42848
43020
  write: method(LogEntrySchema, zod.z.void(), { kind: "mutation" }),
42849
- query: method(zod.z.object({
42850
- scope: zod.z.array(zod.z.string()).optional(),
42851
- level: LogLevelSchema.optional(),
42852
- since: zod.z.date().optional(),
42853
- until: zod.z.date().optional(),
42854
- limit: zod.z.number().optional(),
42855
- tags: zod.z.record(zod.z.string(), zod.z.string()).optional()
42856
- }), zod.z.array(LogEntrySchema).readonly())
43021
+ /** Absent ⇒ the destination cannot read back (same as `readable: false`). */
43022
+ describeRead: optionalMethod(zod.z.void(), LogReadCapabilitiesSchema, { auth: "admin" }),
43023
+ read: optionalMethod(LogReadQuerySchema, LogReadResultSchema, { auth: "admin" }),
43024
+ cancelRead: optionalMethod(zod.z.object({ requestId: zod.z.string().min(1).max(64) }), zod.z.object({ cancelled: zod.z.boolean() }), {
43025
+ kind: "mutation",
43026
+ auth: "admin"
43027
+ })
42857
43028
  },
42858
43029
  /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
42859
43030
  mount: { kind: "skip" }
@@ -44763,9 +44934,11 @@ var alarmPanelCapability = {
44763
44934
  */
44764
44935
  durability: "restored",
44765
44936
  /**
44766
- * History (D850): none — enum state; arm/disarm history belongs in the events ledger.
44937
+ * History (D850): the panel's lifecycle state as an `enum` series —
44938
+ * change-only, no floor, so an `arming -> pending -> triggered` sequence of a
44939
+ * few seconds keeps every step. Who armed it stays in the events ledger.
44767
44940
  */
44768
- history: "none",
44941
+ history: { fields: { state: { kind: "enum" } } },
44769
44942
  /** Clock fields: written, but excluded from the compare that decides
44770
44943
  * whether persisting is worth a SQLite commit. */
44771
44944
  volatileStateFields: ["lastChangedAt"]
@@ -45656,6 +45829,33 @@ var NcRuleTargetSchema = zod.z.object({
45656
45829
  params: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
45657
45830
  });
45658
45831
  /**
45832
+ * WHAT THE NOTIFICATION'S PICTURE IS (D897) — the ONE media choice of a rule.
45833
+ *
45834
+ * Every mode starts from the same CLEAN source frame of the trigger moment
45835
+ * (keyFrame → sceneFrame → lastSceneFrame, narrowed to the trigger instant and
45836
+ * to the zone that fired the rule) and renders it once at send time:
45837
+ * - `scene-boxes` — the whole scene, the subject outlined thick in the accent
45838
+ * colour and every OTHER track visible at that instant outlined thin, each
45839
+ * labelled with class and confidence ("dog 87%").
45840
+ * - `crop` — the subject cut out of that frame around its box at that instant.
45841
+ * - `clean` — the whole scene with nothing drawn on it.
45842
+ * - `none` — no picture.
45843
+ *
45844
+ * A mode that cannot be honoured (no box at that instant, a photograph with no
45845
+ * tracked subject) ships `clean` and names the reason in the log, per camera.
45846
+ * It replaces the `attach` × `frame` × `zoneCrop` triple, which let one rule
45847
+ * ship a crop on one event and a boxed scene on the next depending on which
45848
+ * stored kind had landed.
45849
+ */
45850
+ var NcMediaImageSchema = zod.z.enum([
45851
+ "scene-boxes",
45852
+ "crop",
45853
+ "clean",
45854
+ "none"
45855
+ ]);
45856
+ /**
45857
+ * @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
45858
+ *
45659
45859
  * Media attachment policy (P1 still-image subset).
45660
45860
  * - `best` — the best AVAILABLE subject image at dispatch time (D-3).
45661
45861
  * - `best-matching` — the media that explains WHY the rule fired: a rule
@@ -45669,6 +45869,8 @@ var NcRuleTargetSchema = zod.z.object({
45669
45869
  * - `none` — no attachment.
45670
45870
  */
45671
45871
  /**
45872
+ * @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
45873
+ *
45672
45874
  * WHAT THE PICTURE SHOWS — chosen explicitly, because the implicit ladders
45673
45875
  * conflate it with the selection strategy and betray the request: asking for
45674
45876
  * the clean scene frame on an object-event owner used to start at
@@ -45697,16 +45899,29 @@ var NcMediaFrameSchema = zod.z.enum([
45697
45899
  */
45698
45900
  var NcLinkedCameraModeSchema = zod.z.enum(["mosaic", "each"]);
45699
45901
  var NcMediaPolicySchema = zod.z.object({
45902
+ /**
45903
+ * The picture — see {@link NcMediaImageSchema}. Absent on a rule nobody has
45904
+ * saved since D897: `normalizeNcMediaPolicy` derives it from the legacy
45905
+ * triple below, at load and at every write, and the store keeps only this.
45906
+ */
45907
+ image: NcMediaImageSchema.optional(),
45908
+ /**
45909
+ * Draw the zone that FIRED the rule on the picture (`scene-boxes` / `clean`;
45910
+ * a `crop` never shows it). Valid only on a rule whose trigger is a zone —
45911
+ * `conditions.zones` or an occupancy zone — and refused on save otherwise.
45912
+ * Replaces `zoneCrop`.
45913
+ */
45914
+ showTriggerZone: zod.z.boolean().optional(),
45915
+ /** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
45700
45916
  attach: zod.z.enum([
45701
45917
  "best",
45702
45918
  "best-matching",
45703
45919
  "keyFrame",
45704
45920
  "none"
45705
- ]).default("best"),
45706
- /** What the still shows. Absent = `cropped` (the historical `best` shape). */
45921
+ ]).optional(),
45922
+ /** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
45707
45923
  frame: NcMediaFrameSchema.optional(),
45708
- /** Crop the attached still to the rule's condition-zone bbox (padded) —
45709
- * "show me the ZONE", not the whole scene or the subject crop. */
45924
+ /** @deprecated D897 — folded into `image: 'clean'` + `showTriggerZone` on save. */
45710
45925
  zoneCrop: zod.z.boolean().optional(),
45711
45926
  /**
45712
45927
  * Also attach a short GIF cut from the stream broker's clip ring around the
@@ -45878,7 +46093,9 @@ var NcRuleInputSchema = zod.z.object({
45878
46093
  * targets.
45879
46094
  */
45880
46095
  targetUsers: zod.z.array(zod.z.string()).optional(),
45881
- media: NcMediaPolicySchema.default({ attach: "best" }),
46096
+ /** Absent = the kind's default picture (`resolveNcMediaImage`): the subject crop for a
46097
+ * detection, the clean scene for a sensor or a sound. Set explicitly on save (D897). */
46098
+ media: NcMediaPolicySchema.default({}),
45882
46099
  throttle: NcThrottleSchema.default({
45883
46100
  cooldownSec: 60,
45884
46101
  scope: "rule-device"
@@ -46836,13 +47053,37 @@ var NcAlarmModeOpeningsSchema = zod.z.object({
46836
47053
  /** Covered devices whose state could not be read (D49): neither open nor closed. */
46837
47054
  unknown: zod.z.array(zod.z.number().int())
46838
47055
  });
47056
+ /**
47057
+ * One alarm INPUT — a (rule, device) pair — the operator bypassed until the
47058
+ * next disarm ("Bypass this input until disarm" on a trigger notification, or
47059
+ * `nc.bypassAlarmInput`). Reported so an armed alarm with a silenced input
47060
+ * never looks fully armed (D62: off must never look like broken).
47061
+ */
47062
+ var NcAlarmInputBypassViewSchema = zod.z.object({
47063
+ ruleId: zod.z.string(),
47064
+ /** The rule's current name (its frozen name when the rule is gone). */
47065
+ ruleName: zod.z.string(),
47066
+ /** The input: the sensor of the match, else its camera. */
47067
+ deviceId: zod.z.number().int(),
47068
+ /** The input's current name. */
47069
+ name: zod.z.string(),
47070
+ /** When it was bypassed (ms epoch). */
47071
+ since: zod.z.number(),
47072
+ /** Triggers from this input dropped since. */
47073
+ dropped: zod.z.number().int().min(0)
47074
+ });
46839
47075
  var NcAlarmLiveSchema = zod.z.object({
46840
47076
  state: AlarmStateSchema,
46841
47077
  /** The mode being armed into (exit delay) or held; null when disarmed. */
46842
47078
  targetMode: AlarmArmModeSchema.nullable(),
46843
47079
  availableModes: zod.z.array(AlarmArmModeSchema),
46844
47080
  openings: zod.z.array(NcAlarmModeOpeningsSchema),
46845
- exclusions: zod.z.array(NcAlarmExclusionViewSchema)
47081
+ exclusions: zod.z.array(NcAlarmExclusionViewSchema),
47082
+ /**
47083
+ * Inputs bypassed for the rest of this arm session; cleared on disarm.
47084
+ * Defaulted so an older hub answer still parses (as "none known").
47085
+ */
47086
+ bypassedInputs: zod.z.array(NcAlarmInputBypassViewSchema).default([])
46846
47087
  });
46847
47088
  var NcAlarmConfigSchema = zod.z.object({
46848
47089
  /**
@@ -60737,9 +60978,11 @@ var connectivityCapability = {
60737
60978
  */
60738
60979
  durability: "restored",
60739
60980
  /**
60740
- * History (D850): none — duplicates device-status.online (one authority for availability).
60981
+ * History (D850): `connected` as a boolean series — change-only, no floor. It
60982
+ * is the upstream entity's own link (a HA connectivity sensor), not the
60983
+ * device's reachability, which stays `device-status.online`.
60741
60984
  */
60742
- history: "none",
60985
+ history: { fields: { connected: { kind: "boolean" } } },
60743
60986
  /** Clock fields: written, but excluded from the compare that decides
60744
60987
  * whether persisting is worth a SQLite commit. */
60745
60988
  volatileStateFields: ["lastChangedAt"]
@@ -61609,11 +61852,22 @@ var dishwasherCapability = {
61609
61852
  },
61610
61853
  runtimeState: DishwasherStatusSchema,
61611
61854
  durability: "session",
61612
- history: { fields: { progressPercent: {
61613
- kind: "gauge",
61614
- unit: "%",
61615
- deadband: 2
61616
- } } }
61855
+ history: { fields: {
61856
+ progressPercent: {
61857
+ kind: "gauge",
61858
+ unit: "%",
61859
+ deadband: 2
61860
+ },
61861
+ state: { kind: "enum" },
61862
+ operationState: { kind: "enum" },
61863
+ remainingSeconds: {
61864
+ kind: "gauge",
61865
+ unit: "s",
61866
+ minIntervalMs: 6e4
61867
+ },
61868
+ doorOpen: { kind: "boolean" },
61869
+ powerOn: { kind: "boolean" }
61870
+ } }
61617
61871
  };
61618
61872
  var DoorbellStatusSchema = zod.z.object({
61619
61873
  /** Ms epoch of the last press. null = never observed since this provider started. */
@@ -61730,9 +61984,15 @@ var enumSensorCapability = {
61730
61984
  */
61731
61985
  durability: "restored",
61732
61986
  /**
61733
- * History (D850): none — text/enum state has no history (non-goal).
61987
+ * History (D850): the value as an `enum` series (an appliance's program or
61988
+ * operation state, an HVAC action). The option set is per device, so the
61989
+ * value list is LEARNED as values are first seen (bounded). A sensor with a
61990
+ * `format` carries a timestamp, not a state, and is not recorded.
61734
61991
  */
61735
- history: "none",
61992
+ history: { fields: { value: {
61993
+ kind: "enum",
61994
+ skipWhenSet: "format"
61995
+ } } },
61736
61996
  /** Clock fields: written, but excluded from the compare that decides
61737
61997
  * whether persisting is worth a SQLite commit. */
61738
61998
  volatileStateFields: ["lastFetchedAt"]
@@ -63954,9 +64214,10 @@ var lockControlCapability = {
63954
64214
  */
63955
64215
  durability: "restored",
63956
64216
  /**
63957
- * History (D850): none — enum state; lock events belong in the events ledger.
64217
+ * History (D850): the lock's state as an `enum` series — change-only, no
64218
+ * floor: a jam or an unlock lasting seconds is the edge an operator looks for.
63958
64219
  */
63959
- history: "none",
64220
+ history: { fields: { state: { kind: "enum" } } },
63960
64221
  /** Clock fields: written, but excluded from the compare that decides
63961
64222
  * whether persisting is worth a SQLite commit. */
63962
64223
  volatileStateFields: ["lastChangedAt"]
@@ -64130,9 +64391,18 @@ var mediaPlayerCapability = {
64130
64391
  */
64131
64392
  durability: "session",
64132
64393
  /**
64133
- * History (D850): none — `positionMs` moves continuously while playing; volume is transient.
64394
+ * History (D850): volume (a level an operator or an automation sets; the
64395
+ * default 10 s floor folds a slider drag into its end value) and mute.
64396
+ * `positionMs` is not recorded: it moves continuously while playing.
64134
64397
  */
64135
- history: "none"
64398
+ history: { fields: {
64399
+ volumeLevel: {
64400
+ kind: "gauge",
64401
+ unit: "%",
64402
+ deadband: 1
64403
+ },
64404
+ isMuted: { kind: "boolean" }
64405
+ } }
64136
64406
  };
64137
64407
  /**
64138
64408
  * mesh-network — collection cap for mesh-VPN providers.
@@ -70278,9 +70548,29 @@ var streamParamsCapability = {
70278
70548
  */
70279
70549
  durability: "restored",
70280
70550
  /**
70281
- * History (D850): none — encoder configuration.
70551
+ * History (D850): the configured bitrate and frame rate of the main and sub
70552
+ * profiles. Configuration, so change-only on the default floor: a point is an
70553
+ * operator's (or a tuner's) edit, which is exactly what a chart of a stream's
70554
+ * quality over time must show.
70282
70555
  */
70283
- history: "none",
70556
+ history: { fields: {
70557
+ "main.bitrate": {
70558
+ kind: "gauge",
70559
+ unit: "kbps"
70560
+ },
70561
+ "main.framerate": {
70562
+ kind: "gauge",
70563
+ unit: "fps"
70564
+ },
70565
+ "sub.bitrate": {
70566
+ kind: "gauge",
70567
+ unit: "kbps"
70568
+ },
70569
+ "sub.framerate": {
70570
+ kind: "gauge",
70571
+ unit: "fps"
70572
+ }
70573
+ } },
70284
70574
  /** Clock fields: written, but excluded from the compare that decides
70285
70575
  * whether persisting is worth a SQLite commit. */
70286
70576
  volatileStateFields: ["lastFetchedAt"]
@@ -74483,6 +74773,15 @@ var BaseDevice = class {
74483
74773
  * Drivers can use the `getProbeFlags()` helper to read the flag bag
74484
74774
  * with a typed cast.
74485
74775
  *
74776
+ * Answer what you KNOW. A plain array is read as the complete list only
74777
+ * while this device is `online` and probed; return
74778
+ * `accessoryChildrenUnknown(reason)` whenever you cannot know the list right
74779
+ * now (no credentials, parent not connected, a failed or partial read) —
74780
+ * the kernel then deletes nothing. Return `accessoryChildrenComplete(list)`
74781
+ * to say "connected, and this is the complete list" explicitly. A shrink is
74782
+ * deleted only after a second agreeing complete read on a later probe (D49;
74783
+ * `packages/system/src/kernel/moleculer/accessory-prune-gate.ts`).
74784
+ *
74486
74785
  * Default: no children.
74487
74786
  */
74488
74787
  getAccessoryChildren() {
@@ -78392,7 +78691,19 @@ var METHOD_ACCESS_MAP = Object.freeze({
78392
78691
  addonId: null,
78393
78692
  access: "view"
78394
78693
  },
78395
- "logDestination.query": {
78694
+ "logDestination.cancelRead": {
78695
+ capName: "log-destination",
78696
+ capScope: "system",
78697
+ addonId: null,
78698
+ access: "create"
78699
+ },
78700
+ "logDestination.describeRead": {
78701
+ capName: "log-destination",
78702
+ capScope: "system",
78703
+ addonId: null,
78704
+ access: "view"
78705
+ },
78706
+ "logDestination.read": {
78396
78707
  capName: "log-destination",
78397
78708
  capScope: "system",
78398
78709
  addonId: null,
@@ -84670,6 +84981,11 @@ Object.freeze({
84670
84981
  form: "single",
84671
84982
  optional: false
84672
84983
  }],
84984
+ "logDestination.read": [{
84985
+ name: "deviceId",
84986
+ form: "single",
84987
+ optional: true
84988
+ }],
84673
84989
  "mediaPlayer.getStatus": [{
84674
84990
  name: "deviceId",
84675
84991
  form: "single",
@@ -86678,7 +86994,7 @@ var SESSION_ONLY_POLICY = {
86678
86994
  };
86679
86995
  /**
86680
86996
  * Cap history catalog, projected from every `*.cap.ts` `history` block.
86681
- * 34 caps with series (62 series), 37 caps answered `'none'`.
86997
+ * 40 caps with series (77 series), 31 caps answered `'none'`.
86682
86998
  * Field keys are `runtimeState` paths (`a.b` into fixed objects only).
86683
86999
  */
86684
87000
  var HISTORY_CATALOG = {
@@ -86709,6 +87025,21 @@ var HISTORY_CATALOG = {
86709
87025
  deadband: 1
86710
87026
  }
86711
87027
  },
87028
+ "alarm-panel": { "state": {
87029
+ kind: "enum",
87030
+ values: [
87031
+ "disarmed",
87032
+ "armed_home",
87033
+ "armed_away",
87034
+ "armed_night",
87035
+ "armed_vacation",
87036
+ "armed_custom_bypass",
87037
+ "arming",
87038
+ "disarming",
87039
+ "pending",
87040
+ "triggered"
87041
+ ]
87042
+ } },
86712
87043
  "ambient-light-sensor": { "lux": {
86713
87044
  kind: "gauge",
86714
87045
  unit: "lx",
@@ -86753,6 +87084,7 @@ var HISTORY_CATALOG = {
86753
87084
  minIntervalMs: 0
86754
87085
  }
86755
87086
  },
87087
+ "connectivity": { "connected": { kind: "boolean" } },
86756
87088
  "contact": { "entryOpen": { kind: "boolean" } },
86757
87089
  "cover": { "position": {
86758
87090
  kind: "gauge",
@@ -86760,10 +87092,48 @@ var HISTORY_CATALOG = {
86760
87092
  minIntervalMs: 0
86761
87093
  } },
86762
87094
  "device-status": { "online": { kind: "boolean" } },
86763
- "dishwasher": { "progressPercent": {
86764
- kind: "gauge",
86765
- unit: "%",
86766
- deadband: 2
87095
+ "dishwasher": {
87096
+ "progressPercent": {
87097
+ kind: "gauge",
87098
+ unit: "%",
87099
+ deadband: 2
87100
+ },
87101
+ "state": {
87102
+ kind: "enum",
87103
+ values: [
87104
+ "idle",
87105
+ "running",
87106
+ "paused",
87107
+ "finished",
87108
+ "error",
87109
+ "unavailable"
87110
+ ]
87111
+ },
87112
+ "operationState": {
87113
+ kind: "enum",
87114
+ values: [
87115
+ "Inactive",
87116
+ "Ready",
87117
+ "DelayedStart",
87118
+ "Run",
87119
+ "Pause",
87120
+ "ActionRequired",
87121
+ "Finished",
87122
+ "Error",
87123
+ "Aborting"
87124
+ ]
87125
+ },
87126
+ "remainingSeconds": {
87127
+ kind: "gauge",
87128
+ unit: "s",
87129
+ minIntervalMs: 6e4
87130
+ },
87131
+ "doorOpen": { kind: "boolean" },
87132
+ "powerOn": { kind: "boolean" }
87133
+ },
87134
+ "enum-sensor": { "value": {
87135
+ kind: "enum",
87136
+ skipWhenSet: "format"
86767
87137
  } },
86768
87138
  "fan-control": {
86769
87139
  "percentage": {
@@ -86798,6 +87168,24 @@ var HISTORY_CATALOG = {
86798
87168
  unit: "%",
86799
87169
  deadband: 2
86800
87170
  } },
87171
+ "lock-control": { "state": {
87172
+ kind: "enum",
87173
+ values: [
87174
+ "locked",
87175
+ "unlocked",
87176
+ "locking",
87177
+ "unlocking",
87178
+ "jammed"
87179
+ ]
87180
+ } },
87181
+ "media-player": {
87182
+ "volumeLevel": {
87183
+ kind: "gauge",
87184
+ unit: "%",
87185
+ deadband: 1
87186
+ },
87187
+ "isMuted": { kind: "boolean" }
87188
+ },
86801
87189
  "motion": { "detected": {
86802
87190
  kind: "boolean",
86803
87191
  excludeDeviceTypes: [DeviceType.Camera]
@@ -86884,6 +87272,24 @@ var HISTORY_CATALOG = {
86884
87272
  deadband: .1
86885
87273
  } },
86886
87274
  "smoke": { "detected": { kind: "boolean" } },
87275
+ "stream-params": {
87276
+ "main.bitrate": {
87277
+ kind: "gauge",
87278
+ unit: "kbps"
87279
+ },
87280
+ "main.framerate": {
87281
+ kind: "gauge",
87282
+ unit: "fps"
87283
+ },
87284
+ "sub.bitrate": {
87285
+ kind: "gauge",
87286
+ unit: "kbps"
87287
+ },
87288
+ "sub.framerate": {
87289
+ kind: "gauge",
87290
+ unit: "fps"
87291
+ }
87292
+ },
86887
87293
  "switch": { "on": { kind: "boolean" } },
86888
87294
  "tamper": { "tampered": { kind: "boolean" } },
86889
87295
  "temperature-sensor": { "celsius": {
@@ -88662,6 +89068,12 @@ Object.defineProperty(exports, "DEVICE_ENROLLMENT_TTL_MS", {
88662
89068
  return DEVICE_ENROLLMENT_TTL_MS;
88663
89069
  }
88664
89070
  });
89071
+ Object.defineProperty(exports, "DEVICE_HISTORY_ENERGY_KEY", {
89072
+ enumerable: true,
89073
+ get: function() {
89074
+ return DEVICE_HISTORY_ENERGY_KEY;
89075
+ }
89076
+ });
88665
89077
  Object.defineProperty(exports, "DEVICE_NONCE_TTL_MS", {
88666
89078
  enumerable: true,
88667
89079
  get: function() {
@@ -88944,6 +89356,12 @@ Object.defineProperty(exports, "REMOVE_LEAF", {
88944
89356
  return REMOVE_LEAF;
88945
89357
  }
88946
89358
  });
89359
+ Object.defineProperty(exports, "ROOT_BUCKET_KEY", {
89360
+ enumerable: true,
89361
+ get: function() {
89362
+ return ROOT_BUCKET_KEY;
89363
+ }
89364
+ });
88947
89365
  Object.defineProperty(exports, "RUNTIME_DEFAULTS", {
88948
89366
  enumerable: true,
88949
89367
  get: function() {
@@ -89076,6 +89494,12 @@ Object.defineProperty(exports, "TokenScopeSchema", {
89076
89494
  return TokenScopeSchema;
89077
89495
  }
89078
89496
  });
89497
+ Object.defineProperty(exports, "UNATTRIBUTED_BUCKET_KEY", {
89498
+ enumerable: true,
89499
+ get: function() {
89500
+ return UNATTRIBUTED_BUCKET_KEY;
89501
+ }
89502
+ });
89079
89503
  Object.defineProperty(exports, "UnindexedFilterError", {
89080
89504
  enumerable: true,
89081
89505
  get: function() {