@camera.ui/browser 0.1.10 → 0.1.11

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 (2) hide show
  1. package/dist/index.js +41 -66
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import { tryOnScopeDispose, useTimeoutFn, whenever } from "@vueuse/core";
4
4
  import { SensorType } from "@camera.ui/sdk";
5
5
  import { isNoRespondersError } from "@camera.ui/rpc";
6
6
  import { classifyClose } from "@camera.ui/transport";
7
- //#region src/utils/createDebouncedCache.ts
7
+ // src/utils/createDebouncedCache.ts
8
8
  function createDebouncedCache(options = {}) {
9
9
  const { releaseDelay = 1e3, onRelease } = options;
10
10
  const cache = /* @__PURE__ */ new Map();
@@ -85,8 +85,7 @@ function createDebouncedCache(options = {}) {
85
85
  forEachValue
86
86
  };
87
87
  }
88
- //#endregion
89
- //#region src/utils/createRetryTimer.ts
88
+ // src/utils/createRetryTimer.ts
90
89
  var RETRY_MIN_MS = 1e3;
91
90
  var RETRY_MAX_MS$1 = 3e4;
92
91
  function createRetryTimer() {
@@ -113,23 +112,20 @@ function createRetryTimer() {
113
112
  reset
114
113
  };
115
114
  }
116
- //#endregion
117
- //#region src/composables/useCameraUi.ts
115
+ // src/composables/useCameraUi.ts
118
116
  function useCameraUi() {
119
117
  const context = inject(CAMERA_UI_INJECTION_KEY);
120
118
  if (!context) throw new Error("[camera.ui] useCameraUi() called without CameraUiPlugin installed. Make sure to call app.use(createCameraUiPlugin({ ... })) before using this composable.");
121
119
  return context;
122
120
  }
123
- //#endregion
124
- //#region ../../externals/camera.ui/server/src/utils/camera.ts
121
+ // ../../externals/camera.ui/server/src/utils/camera.ts
125
122
  function normalizeCameraName(name) {
126
123
  return name.replace(/ /g, "_").toLowerCase();
127
124
  }
128
125
  function createSourceName(cameraName, sourceName) {
129
126
  return `cui_${normalizeCameraName(cameraName)}_${normalizeCameraName(sourceName)}`;
130
127
  }
131
- //#endregion
132
- //#region ../../externals/camera.ui/server/src/rpc/namespaces.ts
128
+ // ../../externals/camera.ui/server/src/rpc/namespaces.ts
133
129
  var NamespaceManager = class {
134
130
  static coreManagerNamespaces() {
135
131
  return {
@@ -251,8 +247,7 @@ var NamespaceManager = class {
251
247
  return "workers.logs";
252
248
  }
253
249
  };
254
- //#endregion
255
- //#region src/composables/useRpc.ts
250
+ // src/composables/useRpc.ts
256
251
  var DEFAULT_MAX_RETRIES = 3;
257
252
  var DEFAULT_CONNECT_TIMEOUT_MS = 3e4;
258
253
  var LINK_SETTLE_MS = 3e4;
@@ -488,8 +483,7 @@ function makeAbortError() {
488
483
  err.name = "AbortError";
489
484
  return err;
490
485
  }
491
- //#endregion
492
- //#region src/composables/bulkLane.ts
486
+ // src/composables/bulkLane.ts
493
487
  var PROBE_TIMEOUT_MS = 2e3;
494
488
  var RECHECK_AFTER_MS = 6e4;
495
489
  var deadMarks = /* @__PURE__ */ new WeakMap();
@@ -544,8 +538,7 @@ function clearMark(lane) {
544
538
  deadMarks.get(lane)?.stop();
545
539
  deadMarks.delete(lane);
546
540
  }
547
- //#endregion
548
- //#region src/composables/useTabVisibility.ts
541
+ // src/composables/useTabVisibility.ts
549
542
  var DEFAULT_TAB_PAUSE_MS = 3e4;
550
543
  var log$2 = new Logger("TabVisibility");
551
544
  var _isVisible = ref(typeof document === "undefined" ? true : document.visibilityState === "visible");
@@ -662,8 +655,7 @@ function useTabVisibility() {
662
655
  onTabVisible
663
656
  };
664
657
  }
665
- //#endregion
666
- //#region src/composables/useSnapshot.ts
658
+ // src/composables/useSnapshot.ts
667
659
  var REVOKE_DELAY_MS = 5e3;
668
660
  var SERVER_CLOCK_STEP_MS = 6e4;
669
661
  var REFRESH_LINGER_MS = 500;
@@ -998,8 +990,7 @@ function useSnapshot(cameraIdOrName) {
998
990
  refresh
999
991
  };
1000
992
  }
1001
- //#endregion
1002
- //#region src/composables/useCamera.ts
993
+ // src/composables/useCamera.ts
1003
994
  var NOT_MODIFIED = "not-modified";
1004
995
  var CLOCK_SAMPLE_MAX_MS = 5e3;
1005
996
  var snapshotWithMetaSupport = /* @__PURE__ */ new WeakMap();
@@ -1386,8 +1377,7 @@ function leaveSensorEvents(client, fanout, handler) {
1386
1377
  if (sensorEventFanouts.get(client) === fanout) sensorEventFanouts.delete(client);
1387
1378
  fanout.subscribed.then((off) => off()).catch(() => {});
1388
1379
  }
1389
- //#endregion
1390
- //#region src/composables/useDeviceManager.ts
1380
+ // src/composables/useDeviceManager.ts
1391
1381
  function useDeviceManager() {
1392
1382
  const ctx = useCameraUi();
1393
1383
  const namespaces = NamespaceManager.deviceManagerNamespaces();
@@ -1397,8 +1387,7 @@ function useDeviceManager() {
1397
1387
  }
1398
1388
  return { getCamera };
1399
1389
  }
1400
- //#endregion
1401
- //#region src/composables/useCameraById.ts
1390
+ // src/composables/useCameraById.ts
1402
1391
  var cameraCache = createDebouncedCache({
1403
1392
  releaseDelay: 1e3,
1404
1393
  onRelease: (_key, device) => device.close()
@@ -1571,8 +1560,7 @@ function useCameraById(cameraIdOrName) {
1571
1560
  refresh
1572
1561
  };
1573
1562
  }
1574
- //#endregion
1575
- //#region src/composables/resolvePluginId.ts
1563
+ // src/composables/resolvePluginId.ts
1576
1564
  var pluginIdCache = /* @__PURE__ */ new Map();
1577
1565
  var pluginNames = /* @__PURE__ */ new Map();
1578
1566
  var pendingResolves = /* @__PURE__ */ new Map();
@@ -1603,8 +1591,7 @@ async function resolvePluginId(rpcRef, pluginName) {
1603
1591
  pendingResolves.set(pluginName, promise);
1604
1592
  return promise;
1605
1593
  }
1606
- //#endregion
1607
- //#region src/composables/useOAuth.ts
1594
+ // src/composables/useOAuth.ts
1608
1595
  var POLL_ACTIVE_MS = 1500;
1609
1596
  var POLL_IDLE_MS = 3e4;
1610
1597
  var oauthStates = /* @__PURE__ */ new Map();
@@ -1719,8 +1706,7 @@ function useOAuth(pluginName) {
1719
1706
  refresh
1720
1707
  };
1721
1708
  }
1722
- //#endregion
1723
- //#region src/composables/usePlugin.ts
1709
+ // src/composables/usePlugin.ts
1724
1710
  var RETRY_BASE_MS = 2e3;
1725
1711
  var RETRY_MAX_MS = 3e4;
1726
1712
  var pluginCache = createDebouncedCache({ releaseDelay: 1e3 });
@@ -2051,15 +2037,13 @@ function usePlugin(pluginName, options = {}) {
2051
2037
  refresh
2052
2038
  };
2053
2039
  }
2054
- //#endregion
2055
- //#region src/composables/utils.ts
2040
+ // src/composables/utils.ts
2056
2041
  function extractCameraId(camera) {
2057
2042
  if (!camera) return void 0;
2058
2043
  if (typeof camera === "string") return camera;
2059
2044
  return camera.id;
2060
2045
  }
2061
- //#endregion
2062
- //#region src/composables/useSensor.ts
2046
+ // src/composables/useSensor.ts
2063
2047
  function createSensorTypeGuard(sensorType) {
2064
2048
  return (sensor) => sensor.type === sensorType;
2065
2049
  }
@@ -2893,8 +2877,7 @@ function useClassifierSensors(camera) {
2893
2877
  error
2894
2878
  };
2895
2879
  }
2896
- //#endregion
2897
- //#region src/composables/useStorage.ts
2880
+ // src/composables/useStorage.ts
2898
2881
  function createReactiveStorage(proxy, client) {
2899
2882
  const config = shallowRef();
2900
2883
  const isLoading = ref(false);
@@ -3405,8 +3388,7 @@ function useSensorStorage(sensorId, pluginId) {
3405
3388
  submitValue: operations.submitValue
3406
3389
  };
3407
3390
  }
3408
- //#endregion
3409
- //#region src/composables/resetClientState.ts
3391
+ // src/composables/resetClientState.ts
3410
3392
  function resetClientState() {
3411
3393
  clearPluginCache();
3412
3394
  clearCameraCache();
@@ -3424,8 +3406,7 @@ function refreshClientStates() {
3424
3406
  forgetPluginStatus();
3425
3407
  refreshAllCameraDevices();
3426
3408
  }
3427
- //#endregion
3428
- //#region src/plugin.ts
3409
+ // src/plugin.ts
3429
3410
  var CAMERA_UI_INJECTION_KEY = Symbol("camera-ui");
3430
3411
  var log$1 = new Logger("plugin");
3431
3412
  function isContext(input) {
@@ -3536,8 +3517,7 @@ function createCameraUiPlugin(input) {
3536
3517
  app.provide(CAMERA_UI_INJECTION_KEY, ctx);
3537
3518
  } };
3538
3519
  }
3539
- //#endregion
3540
- //#region src/streaming/activityMode.ts
3520
+ // src/streaming/activityMode.ts
3541
3521
  var DEFAULT_CONFIG = {
3542
3522
  standbyTimeout: 5e3,
3543
3523
  activityTimeout: 5e3,
@@ -3682,8 +3662,7 @@ function createActivityMode(options) {
3682
3662
  dispose
3683
3663
  };
3684
3664
  }
3685
- //#endregion
3686
- //#region src/streaming/config.ts
3665
+ // src/streaming/config.ts
3687
3666
  var STREAM_CONFIG = {
3688
3667
  WEBRTC: {
3689
3668
  RECONNECT_DELAY: 1e3,
@@ -3720,8 +3699,7 @@ var STREAM_CONFIG = {
3720
3699
  ]
3721
3700
  }
3722
3701
  };
3723
- //#endregion
3724
- //#region src/streaming/mjpeg.ts
3702
+ // src/streaming/mjpeg.ts
3725
3703
  function isJpegFrame(data) {
3726
3704
  if (data.byteLength < 2) return false;
3727
3705
  const bytes = new Uint8Array(data, 0, 2);
@@ -3780,8 +3758,7 @@ function createMJPEGHandler(options) {
3780
3758
  close
3781
3759
  };
3782
3760
  }
3783
- //#endregion
3784
- //#region src/streaming/fmp4.ts
3761
+ // src/streaming/fmp4.ts
3785
3762
  var MOOV = 1836019574;
3786
3763
  var TRAK = 1953653099;
3787
3764
  var TKHD = 1953196132;
@@ -3937,8 +3914,7 @@ function scanRun(view, start, end, fragment, onKeyframe) {
3937
3914
  }
3938
3915
  return time;
3939
3916
  }
3940
- //#endregion
3941
- //#region src/streaming/utils.ts
3917
+ // src/streaming/utils.ts
3942
3918
  var H265_TEST_CODEC = "hvc1.1.6.L153.B0";
3943
3919
  function safariVersion() {
3944
3920
  return navigator.userAgent.match(/version\/(\d+)/i);
@@ -4045,8 +4021,7 @@ function abortableSleep(ms, signal) {
4045
4021
  }, { once: true });
4046
4022
  });
4047
4023
  }
4048
- //#endregion
4049
- //#region src/streaming/mse.ts
4024
+ // src/streaming/mse.ts
4050
4025
  var CUT_MARGIN = .001;
4051
4026
  var MAX_KEYFRAMES = 256;
4052
4027
  var LIVE_EDGE_MARGIN = .3;
@@ -4306,8 +4281,7 @@ async function playVideo(videoElement) {
4306
4281
  }
4307
4282
  }
4308
4283
  }
4309
- //#endregion
4310
- //#region src/streaming/webrtc.ts
4284
+ // src/streaming/webrtc.ts
4311
4285
  function newPeerConnection(iceServers = [...STREAM_CONFIG.WEBRTC.ICE_SERVERS]) {
4312
4286
  try {
4313
4287
  return new RTCPeerConnection({
@@ -4486,8 +4460,7 @@ async function processWebRTCMessage(handler, msg) {
4486
4460
  case "webrtc/candidate": if (msg.value) await handler.handleCandidate(msg.value);
4487
4461
  }
4488
4462
  }
4489
- //#endregion
4490
- //#region src/streaming/streamConnection.ts
4463
+ // src/streaming/streamConnection.ts
4491
4464
  var log = new Logger("StreamConnection");
4492
4465
  var MSE_AUDIO_CODEC = /mp4a|opus|flac|mp3/i;
4493
4466
  var RETRY_BASE_DELAY = 1e3;
@@ -5785,8 +5758,7 @@ var StreamConnection = class {
5785
5758
  function createStreamConnection(options) {
5786
5759
  return new StreamConnection(options);
5787
5760
  }
5788
- //#endregion
5789
- //#region src/streaming/streamManager.ts
5761
+ // src/streaming/streamManager.ts
5790
5762
  var StreamManager = class {
5791
5763
  streams = /* @__PURE__ */ new Map();
5792
5764
  standalone = /* @__PURE__ */ new Set();
@@ -5947,8 +5919,7 @@ var streamManager = new StreamManager();
5947
5919
  function restartConnectedStreams() {
5948
5920
  return streamManager.restartConnected();
5949
5921
  }
5950
- //#endregion
5951
- //#region src/composables/useFullscreen.ts
5922
+ // src/composables/useFullscreen.ts
5952
5923
  var fsRegistry = /* @__PURE__ */ new WeakMap();
5953
5924
  var fullscreenRoot = null;
5954
5925
  function setFullscreenRoot(el) {
@@ -6071,8 +6042,7 @@ function applyWrapperStyles(wrapper, mode) {
6071
6042
  overscrollBehavior: "contain"
6072
6043
  });
6073
6044
  }
6074
- //#endregion
6075
- //#region src/composables/useCameraStream.ts
6045
+ // src/composables/useCameraStream.ts
6076
6046
  var AUTO_STAGGER_STEP_MS = 75;
6077
6047
  var AUTO_STAGGER_RESET_MS = 500;
6078
6048
  var OFFSCREEN_STOP_DELAY_MS = 1e4;
@@ -6345,6 +6315,14 @@ function useCameraStream(options) {
6345
6315
  isUsingCachedStream.value = true;
6346
6316
  currentStream.value = cached.stream;
6347
6317
  if (camDevice && cached.cameraDeviceRef) cached.cameraDeviceRef.value = camDevice;
6318
+ const resolution = toValue(options.resolution) ?? "high-resolution";
6319
+ if (cached.stream.requestedResolution.value !== resolution) {
6320
+ streamManager.updateMediaStream(camName, null);
6321
+ cached.stream.setResolution(resolution);
6322
+ }
6323
+ cleanupFns.push(watch(() => toValue(options.resolution), (role) => {
6324
+ if (role) cached.stream.setResolution(role);
6325
+ }));
6348
6326
  let video = cached.sharedVideoElement;
6349
6327
  if (!video) {
6350
6328
  video = createVideoElement();
@@ -6733,8 +6711,7 @@ function useCameraStream(options) {
6733
6711
  captureScreenshot
6734
6712
  };
6735
6713
  }
6736
- //#endregion
6737
- //#region src/composables/useCoreManager.ts
6714
+ // src/composables/useCoreManager.ts
6738
6715
  function useCoreManager() {
6739
6716
  const ctx = useCameraUi();
6740
6717
  const namespaces = NamespaceManager.coreManagerNamespaces();
@@ -6748,8 +6725,7 @@ function useCoreManager() {
6748
6725
  getInstanceId: () => rpcCall(ctx.rpc, (rpc) => proxy(rpc).getInstanceId())
6749
6726
  };
6750
6727
  }
6751
- //#endregion
6752
- //#region src/composables/useTerminal.ts
6728
+ // src/composables/useTerminal.ts
6753
6729
  function useTerminal() {
6754
6730
  const cameraUi = useCameraUi();
6755
6731
  const { rpc, isConnected: isClientConnected } = cameraUi;
@@ -6908,5 +6884,4 @@ function useTerminal() {
6908
6884
  close
6909
6885
  };
6910
6886
  }
6911
- //#endregion
6912
6887
  export { CAMERA_UI_INJECTION_KEY, NamespaceManager, STREAM_CONFIG, acquireSensorManager, clearCameraCache, clearOAuthCache, clearPluginCache, clearSensorCache, clearSnapshotCache, clearStorageCache, createActivityMode, createCameraUiPlugin, createReactiveCameraDevice, createSensorManager, getSnapshotUrl, isReactiveAudioSensor, isReactiveBatteryInfo, isReactiveCarbonDioxideInfo, isReactiveCarbonMonoxideSensor, isReactiveClassifierSensor, isReactiveColdSensor, isReactiveContactSensor, isReactiveDoorbellTrigger, isReactiveFaceSensor, isReactiveGarageControl, isReactiveGasSensor, isReactiveHeatSensor, isReactiveHumidityInfo, isReactiveIlluminanceInfo, isReactiveLeakSensor, isReactiveLicensePlateSensor, isReactiveLightControl, isReactiveLockControl, isReactiveMotionSensor, isReactiveObjectSensor, isReactiveOccupancySensor, isReactivePTZControl, isReactivePowerSensor, isReactiveProblemSensor, isReactiveSecuritySystem, isReactiveSirenControl, isReactiveSmokeSensor, isReactiveSwitchControl, isReactiveTamperSensor, isReactiveTemperatureInfo, isReactiveVibrationSensor, refreshClientSubscriptions, releaseSensorManager, resetClientState, restartConnectedStreams, rpcCall, setFullscreenRoot, useAllSensors, useAudioSensor, useCameraById, useCameraStorage, useCameraStream, useCameraUi, useClassifierSensors, useCoreManager, useCuiFullscreen, useDeviceManager, useFaceSensor, useLicensePlateSensor, useMotionSensor, useOAuth, useObjectSensor, usePTZControl, usePlugin, usePluginStorage, useRpcCall, useRpcSubscription, useSensorById, useSensorByType, useSensorStorage, useSensors, useSensorsByType, useSnapshot, useTabVisibility, useTerminal, useTopmostFullscreenElement };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camera.ui/browser",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "description": "camera.ui browser client",
5
5
  "author": "seydx (https://github.com/cameraui/clients)",
6
6
  "type": "module",
@@ -62,9 +62,9 @@
62
62
  "typescript-eslint": "^8.72.1",
63
63
  "unplugin-dts": "^1.1.2",
64
64
  "updates": "^20.0.0",
65
- "vite": "^8.3.5",
65
+ "vite": "^8.3.6",
66
66
  "vitest": "^5.1.0",
67
- "vue": "^3.5.44",
67
+ "vue": "^3.5.45",
68
68
  "vue-tsc": "3.3.11"
69
69
  },
70
70
  "overrides": {