@camera.ui/server 0.0.94 → 0.0.96

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 (121) hide show
  1. package/dist/interface/assets/{404-BvpgHGlA.js → 404-Clo6qjGo.js} +1 -1
  2. package/dist/interface/assets/{About-BCNMNyg8.js → About-Bfjj72u5.js} +1 -1
  3. package/dist/interface/assets/{Adminpanel-B0OTwlea.js → Adminpanel-B_SQSHyD.js} +1 -1
  4. package/dist/interface/assets/{Automation-BTp9IgO9.js → Automation-CQm0ZHfh.js} +2 -2
  5. package/dist/interface/assets/{Automations-DYnpW6sZ.js → Automations-Dbs6NMx-.js} +1 -1
  6. package/dist/interface/assets/{Camera-BaYP1YDU.js → Camera-CTIUE1PX.js} +2 -2
  7. package/dist/interface/assets/{CameraConsole-BdmOe5_y.js → CameraConsole-BQVlxqb1.js} +1 -1
  8. package/dist/interface/assets/{Cameras-BX1vYQf1.js → Cameras-CyZMjvQu.js} +1 -1
  9. package/dist/interface/assets/{Camview-WKrFnWE_.js → Camview-BnpJaGfI.js} +1 -1
  10. package/dist/interface/assets/{Config-MiH-DMPP.js → Config-Dc7jeUIy.js} +1 -1
  11. package/dist/interface/assets/{ConfigActionCameraControl-DY9lfyb-.js → ConfigActionCameraControl-aMa-699v.js} +1 -1
  12. package/dist/interface/assets/{ConfigActionNotification-BzoTjUZt.js → ConfigActionNotification-D_4Y919Q.js} +1 -1
  13. package/dist/interface/assets/{ConfigActionPlugin-DdXWHgcG.js → ConfigActionPlugin-DMAUig6Q.js} +1 -1
  14. package/dist/interface/assets/{ConfigActionSensor-D8_z1S-I.js → ConfigActionSensor-DuHOX22J.js} +1 -1
  15. package/dist/interface/assets/{ConfigActionSnapshot-BImtQaNm.js → ConfigActionSnapshot-Dtde_3hQ.js} +1 -1
  16. package/dist/interface/assets/{ConfigConditionSensorState-BiZJOBjM.js → ConfigConditionSensorState-CyPhwS7K.js} +1 -1
  17. package/dist/interface/assets/{ConfigTriggerDetection-Cd7sZk8S.js → ConfigTriggerDetection-C7RtR75f.js} +1 -1
  18. package/dist/interface/assets/{ConfigTriggerGeofence-qhLKaH1I.js → ConfigTriggerGeofence-CDU2jx7z.js} +1 -1
  19. package/dist/interface/assets/{ConfigTriggerSensor-fn74bD5T.js → ConfigTriggerSensor-t0MTHl1T.js} +1 -1
  20. package/dist/interface/assets/{ConfigTriggerSystem-C6tHuU5p.js → ConfigTriggerSystem-DXCusYWo.js} +1 -1
  21. package/dist/interface/assets/{Console-CouprsTc.js → Console-D32_FF2q.js} +1 -1
  22. package/dist/interface/assets/{CuiAvatar-4mQ1VfCP.js → CuiAvatar-DQfgB_0j.js} +1 -1
  23. package/dist/interface/assets/{CuiBottomSheet-k8Zb5XD1.js → CuiBottomSheet-Cgbt7aQP.js} +1 -1
  24. package/dist/interface/assets/CuiBottomSheet-HO59nDTz.js +1 -0
  25. package/dist/interface/assets/{CuiCameraCard-CGhZ-FYr.js → CuiCameraCard-BJpi9GYb.js} +1 -1
  26. package/dist/interface/assets/{CuiCameraPipCard-BzzOZlKR.js → CuiCameraPipCard-CLa09t5W.js} +1 -1
  27. package/dist/interface/assets/{CuiCameraRecordings-vljiYHz7.js → CuiCameraRecordings-DbPr4N27.js} +1 -1
  28. package/dist/interface/assets/{CuiCameraShares-kPpvCTUH.js → CuiCameraShares-BCTN3Ie-.js} +1 -1
  29. package/dist/interface/assets/{CuiCameraSnapshot-BWDbpVN7.js → CuiCameraSnapshot-fX1tTzWs.js} +1 -1
  30. package/dist/interface/assets/{CuiCameraTable-C8X20w8S.js → CuiCameraTable-DMKLoisE.js} +1 -1
  31. package/dist/interface/assets/{CuiImage-CJBGhAfQ.js → CuiImage-Ab94PYIg.js} +1 -1
  32. package/dist/interface/assets/{CuiMenu-DhzA8fK1.js → CuiMenu-CX2XxBmg.js} +1 -1
  33. package/dist/interface/assets/{CuiPluginCard-cbmwOjLF.js → CuiPluginCard-DQXny68Q.js} +2 -2
  34. package/dist/interface/assets/{CuiPluginOAuthButton-Dn87Ix6E.js → CuiPluginOAuthButton-BvRVOPAt.js} +2 -2
  35. package/dist/interface/assets/{CuiQRCode-CMROqC15.js → CuiQRCode-DOVuTNfQ.js} +1 -1
  36. package/dist/interface/assets/{CuiRecordingsGrid-BkA9YcHq.js → CuiRecordingsGrid-CS01gjpz.js} +1 -1
  37. package/dist/interface/assets/{CuiSchema-BeMqdQ_W.js → CuiSchema-L35JTZ5Y.js} +1 -1
  38. package/dist/interface/assets/{Faces-CNRBtzW7.js → Faces-DLdVxTYg.js} +1 -1
  39. package/dist/interface/assets/{FirstSteps-CNuVbY5-.js → FirstSteps-c4m_l-s9.js} +1 -1
  40. package/dist/interface/assets/{Instances-CrUVwyDT.js → Instances-BE8EkRQ4.js} +1 -1
  41. package/dist/interface/assets/{Menu-DMCqoiJX.js → Menu-BK9rk_sp.js} +1 -1
  42. package/dist/interface/assets/{OAuthDeviceFlow-DVHqJJ0-.js → OAuthDeviceFlow-DwoyMn6e.js} +1 -1
  43. package/dist/interface/assets/{Plugin-4QhPU2z5.js → Plugin-B4UvyHA4.js} +1 -1
  44. package/dist/interface/assets/{PluginConsole-BGcYTBBP.js → PluginConsole-00dw-HUB.js} +1 -1
  45. package/dist/interface/assets/{PluginSchema-BsQbR0zX.js → PluginSchema-7qwKEn6c.js} +1 -1
  46. package/dist/interface/assets/{Plugins-B5g1RJAK.js → Plugins-CFXvg0P-.js} +2 -2
  47. package/dist/interface/assets/{Recordings-KHQAIrEW.js → Recordings-MSRod46b.js} +1 -1
  48. package/dist/interface/assets/{Settings-DRsnud_Q.js → Settings-CnGCN9cC.js} +1 -1
  49. package/dist/interface/assets/SettingsAccount-DoFSZhI5.js +1 -0
  50. package/dist/interface/assets/{SettingsAccount-DySpU4el.js → SettingsAccount-lIy74Kjh.js} +1 -1
  51. package/dist/interface/assets/SettingsAppearance-DA8ON3Ts.js +1 -0
  52. package/dist/interface/assets/{SettingsAppearance-CGdPmMkM.js → SettingsAppearance-DLnlx8bM.js} +1 -1
  53. package/dist/interface/assets/{SettingsBackup-BmGR_7CF.js → SettingsBackup-CpBqig7H.js} +1 -1
  54. package/dist/interface/assets/{SettingsNotifications-BVKeFwwT.js → SettingsNotifications-di325j-b.js} +1 -1
  55. package/dist/interface/assets/{SettingsRecordings-Dr9-c7f7.js → SettingsRecordings-DvNlji2N.js} +1 -1
  56. package/dist/interface/assets/{SettingsRemote-ht_onhMJ.js → SettingsRemote-Kb-ichM0.js} +1 -1
  57. package/dist/interface/assets/{SettingsSystem-B0UMgWbE.js → SettingsSystem-C0OHXycw.js} +2 -2
  58. package/dist/interface/assets/{SettingsUsers-Bb1juUy8.js → SettingsUsers-Dx8Fm2QE.js} +1 -1
  59. package/dist/interface/assets/{Terminal-DvvXgMu-.js → Terminal-BR9InMiL.js} +1 -1
  60. package/dist/interface/assets/VersionsHandler-J7N_cZBS.js +7 -0
  61. package/dist/interface/assets/{Workers-D_wZn8hC.js → Workers-BINNsLDU.js} +1 -1
  62. package/dist/interface/assets/{api-DbOpzNbt.js → api-D23Y8GEd.js} +1 -1
  63. package/dist/interface/assets/api-DjhIYzsF.js +2 -0
  64. package/dist/interface/assets/{auth-C14L3iEn.js → auth-CeN6oTgU.js} +1 -1
  65. package/dist/interface/assets/{automations-BwTCZACp.js → automations-G3fWqK-C.js} +1 -1
  66. package/dist/interface/assets/{backup-I44o7LfB.js → backup-KFYNv85J.js} +1 -1
  67. package/dist/interface/assets/{cameras-CJU6PhVu.js → cameras-DeAGPYqb.js} +1 -1
  68. package/dist/interface/assets/cloudHandoff-Di9OHN7W.js +1 -0
  69. package/dist/interface/assets/copy-16-filled-DUaht4LK.js +1 -0
  70. package/dist/interface/assets/{deviceId-3kTQbnbi.js → deviceId-CgRNCVsl.js} +1 -1
  71. package/dist/interface/assets/{hasPermission-CuUcJNef.js → hasPermission-nr9uI1sh.js} +1 -1
  72. package/dist/interface/assets/{instances-fJJkMjZZ.js → instances-Cz4DJwNc.js} +1 -1
  73. package/dist/interface/assets/{locale-JdE3H3At.js → locale-fNpCK2bH.js} +1 -1
  74. package/dist/interface/assets/{main-smWr0ZCq.js → main-sGc9j7q_.js} +2 -2
  75. package/dist/interface/assets/{notifications-BHvHIRSM.js → notifications-euShmBTH.js} +1 -1
  76. package/dist/interface/assets/{plugins-C6jbSDXS.js → plugins-DsiC2cVL.js} +1 -1
  77. package/dist/interface/assets/{round-restart-alt-CNkzBawa.js → round-restart-alt-AXgxJgvx.js} +1 -1
  78. package/dist/interface/assets/{router-BZ7fTrv9.js → router-BLvVFGz9.js} +2 -2
  79. package/dist/interface/assets/{server-BBHyrnAu.js → server-CfW4FWmD.js} +1 -1
  80. package/dist/interface/assets/{shares-DQJerWK4.js → shares-CifP6qUz.js} +1 -1
  81. package/dist/interface/assets/{theme-B2nITMtK.js → theme-3K07RHLA.js} +1 -1
  82. package/dist/interface/assets/{useBiometricCredentials-wKhzGV-q.js → useBiometricCredentials-DS-lOPkp.js} +1 -1
  83. package/dist/interface/assets/{useCameraOptions-CtBJS7bp.js → useCameraOptions-CO9VqYVT.js} +1 -1
  84. package/dist/interface/assets/{useCuiDialog-Bp7p3zLy.js → useCuiDialog-BlhSS0jk.js} +1 -1
  85. package/dist/interface/assets/{useFileDownload-CBx3wVDu.js → useFileDownload-DEM9UhjP.js} +1 -1
  86. package/dist/interface/assets/{useLogsSocket-BTa94fXn.js → useLogsSocket-CNAQ1g8I.js} +1 -1
  87. package/dist/interface/assets/{useStreamStatus-Dj6ybIhF.js → useStreamStatus-Bn6gxutk.js} +1 -1
  88. package/dist/interface/assets/{view-grid-CstDugYR.js → view-grid-Cg2Wk0qw.js} +1 -1
  89. package/dist/interface/index.html +26 -26
  90. package/dist/interface/sw.js +1 -1
  91. package/dist/server/package.json +10 -6
  92. package/dist/server/src/api/controllers/plugins.controller.d.ts +0 -1
  93. package/dist/server/src/api/controllers/plugins.controller.js +22 -108
  94. package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
  95. package/dist/server/src/api/controllers/server.controller.js +2 -13
  96. package/dist/server/src/api/controllers/server.controller.js.map +1 -1
  97. package/dist/server/src/api/services/backup.service.js.map +1 -1
  98. package/dist/server/src/api/services/instances.service.js.map +1 -1
  99. package/dist/server/src/api/services/plugins.service.d.ts +0 -2
  100. package/dist/server/src/api/services/plugins.service.js +10 -111
  101. package/dist/server/src/api/services/plugins.service.js.map +1 -1
  102. package/dist/server/src/api/websocket/nsp/server.d.ts +0 -2
  103. package/dist/server/src/api/websocket/nsp/server.js +17 -90
  104. package/dist/server/src/api/websocket/nsp/server.js.map +1 -1
  105. package/dist/server/src/camera/streaming/rtp-session.js +1 -0
  106. package/dist/server/src/camera/streaming/rtp-session.js.map +1 -1
  107. package/dist/server/src/utils/npm/auth.d.ts +2 -0
  108. package/dist/server/src/utils/npm/auth.js +54 -0
  109. package/dist/server/src/utils/npm/auth.js.map +1 -0
  110. package/dist/server/src/utils/npm/index.d.ts +44 -0
  111. package/dist/server/src/utils/npm/index.js +115 -0
  112. package/dist/server/src/utils/npm/index.js.map +1 -0
  113. package/package.json +10 -6
  114. package/dist/interface/assets/CuiBottomSheet-FXwjLm5t.js +0 -1
  115. package/dist/interface/assets/SettingsAccount-Cny3sanY.js +0 -1
  116. package/dist/interface/assets/SettingsAppearance-DvKlfkfH.js +0 -1
  117. package/dist/interface/assets/VersionsHandler-BkjcICiT.js +0 -7
  118. package/dist/interface/assets/api-Tan5u5QZ.js +0 -2
  119. package/dist/interface/assets/cloudHandoff-AW0MqbxU.js +0 -1
  120. package/dist/interface/assets/copy-16-filled-CG924HKI.js +0 -1
  121. /package/dist/interface/assets/{logo-512-DLKVOU2S.png → error-256-DLKVOU2S.png} +0 -0
@@ -0,0 +1,115 @@
1
+ import { getNpmPath } from '@camera.ui/common/node';
2
+ import { TTLCache } from '@isaacs/ttlcache';
3
+ import { spawn } from 'node:child_process';
4
+ import { basename, dirname } from 'node:path';
5
+ import { platform } from 'node:os';
6
+ import npmFetch from 'npm-registry-fetch';
7
+ import pacote from 'pacote';
8
+ import { gt, parse } from 'semver';
9
+ import { resolveNpmOptions } from './auth.js';
10
+ const DEP_INSTALL_TIMEOUT_MS = 5 * 60 * 1000;
11
+ const PACKUMENT_TTL_MS = 60 * 1000;
12
+ const packumentCache = new TTLCache({ ttl: PACKUMENT_TTL_MS, max: 200 });
13
+ function npmOptions(extra) {
14
+ return { ...resolveNpmOptions(), ...extra };
15
+ }
16
+ export async function getPackument(name, options) {
17
+ const full = options?.full ?? false;
18
+ const key = `${full ? 'full' : 'abbr'}:${name}`;
19
+ if (!options?.refresh) {
20
+ const cached = packumentCache.get(key);
21
+ if (cached) {
22
+ return cached;
23
+ }
24
+ }
25
+ const packument = full
26
+ ? await pacote.packument(name, { ...npmOptions(), fullMetadata: true })
27
+ : await pacote.packument(name, npmOptions());
28
+ packumentCache.set(key, packument);
29
+ return packument;
30
+ }
31
+ export function invalidatePackage(name) {
32
+ if (!name) {
33
+ packumentCache.clear();
34
+ return;
35
+ }
36
+ packumentCache.delete(`abbr:${name}`);
37
+ packumentCache.delete(`full:${name}`);
38
+ }
39
+ export async function getDistTags(name) {
40
+ const packument = await getPackument(name);
41
+ return packument['dist-tags'] ?? {};
42
+ }
43
+ export async function getManifest(spec) {
44
+ return pacote.manifest(spec, npmOptions());
45
+ }
46
+ export async function getVersionsAndDistTags(name) {
47
+ const packument = await getPackument(name);
48
+ return {
49
+ versions: Object.keys(packument.versions ?? {}).reverse(),
50
+ 'dist-tags': packument['dist-tags'] ?? {},
51
+ };
52
+ }
53
+ export async function checkForUpdate(name, currentVersion, prereleaseTag = 'beta') {
54
+ const tags = await getDistTags(name);
55
+ const latest = tags.latest;
56
+ const prerelease = tags[prereleaseTag];
57
+ const updateAvailable = latest ? gt(latest, currentVersion) : false;
58
+ let betaUpdateAvailable = false;
59
+ if (!updateAvailable && prerelease) {
60
+ const parsed = parse(currentVersion);
61
+ if (parsed?.prerelease[0] === prereleaseTag && gt(prerelease, currentVersion)) {
62
+ betaUpdateAvailable = true;
63
+ }
64
+ }
65
+ const latestVersion = betaUpdateAvailable ? prerelease : latest;
66
+ return { updateAvailable, betaUpdateAvailable, latestVersion };
67
+ }
68
+ export async function searchPackages(query, size = 250) {
69
+ const result = (await npmFetch.json(`/-/v1/search?text=${encodeURIComponent(query)}&size=${size}`, npmOptions()));
70
+ return (result.objects ?? []).map((entry) => entry.package);
71
+ }
72
+ export async function extractPackage(spec, dest) {
73
+ await pacote.extract(spec, dest, npmOptions());
74
+ }
75
+ export function installDependencies(packageDir, onOutput) {
76
+ return new Promise((resolve, reject) => {
77
+ const npmCmd = getNpmPath()[0];
78
+ const args = ['install', '--omit=dev', '--include=prod', '--no-progress'];
79
+ const env = {
80
+ ...process.env,
81
+ NODE_ENV: 'production',
82
+ npm_config_update_notifier: 'false',
83
+ npm_config_prefer_online: 'true',
84
+ npm_config_progress: 'false',
85
+ npm_config_prefix: packageDir,
86
+ npm_config_color: 'always',
87
+ FORCE_COLOR: '1',
88
+ };
89
+ if (platform() !== 'win32' && basename(packageDir) === 'lib') {
90
+ env.npm_config_prefix = dirname(packageDir);
91
+ }
92
+ const child = spawn(npmCmd, args, { cwd: packageDir, env, stdio: ['ignore', 'pipe', 'pipe'] });
93
+ const handleChunk = (data) => onOutput?.(data.toString());
94
+ child.stdout.on('data', handleChunk);
95
+ child.stderr.on('data', handleChunk);
96
+ const timeoutTimer = setTimeout(() => {
97
+ child.kill('SIGTERM');
98
+ reject(new Error('Operation timed out after 5 minutes'));
99
+ }, DEP_INSTALL_TIMEOUT_MS);
100
+ child.on('close', (code) => {
101
+ clearTimeout(timeoutTimer);
102
+ if (code === 0) {
103
+ resolve();
104
+ }
105
+ else {
106
+ reject(new Error(`Operation failed with exit code ${code}. Please review log for details.`));
107
+ }
108
+ });
109
+ child.on('error', (err) => {
110
+ clearTimeout(timeoutTimer);
111
+ reject(new Error(`Failed to start process: ${err.message}`));
112
+ });
113
+ });
114
+ }
115
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/utils/npm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAwB9C,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7C,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC,MAAM,cAAc,GAAG,IAAI,QAAQ,CAAwC,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAOhH,SAAS,UAAU,CAAC,KAAe;IACjC,OAAO,EAAE,GAAG,iBAAiB,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC;AAC9C,CAAC;AAID,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,OAA0B;IACzE,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,KAAK,CAAC;IACpC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;IAEhD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAkC,IAAI;QACnD,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE,YAAY,EAAE,IAAa,EAAE,CAAC;QAChF,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAE/C,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACnC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACtC,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAY;IACvD,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;QACzD,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,cAAsB,EAAE,aAAa,GAAG,MAAM;IAC/F,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IAEvC,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEpE,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAEhC,IAAI,CAAC,eAAe,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;QACrC,IAAI,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,aAAa,IAAI,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;YAC9E,mBAAmB,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,aAAa,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,IAAI,GAAG,GAAG;IAC5D,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,qBAAqB,kBAAkB,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAE/G,CAAC;IAEF,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY;IAC7D,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,QAAkC;IACxF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAE1E,MAAM,GAAG,GAAsB;YAC7B,GAAG,OAAO,CAAC,GAAG;YACd,QAAQ,EAAE,YAAY;YACtB,0BAA0B,EAAE,OAAO;YACnC,wBAAwB,EAAE,MAAM;YAChC,mBAAmB,EAAE,OAAO;YAC5B,iBAAiB,EAAE,UAAU;YAC7B,gBAAgB,EAAE,QAAQ;YAC1B,WAAW,EAAE,GAAG;SACjB,CAAC;QAEF,IAAI,QAAQ,EAAE,KAAK,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,KAAK,EAAE,CAAC;YAC7D,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAE/F,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACrC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAErC,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YACnC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAC3D,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAE3B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,YAAY,CAAC,YAAY,CAAC,CAAC;YAC3B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,IAAI,kCAAkC,CAAC,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,YAAY,CAAC,YAAY,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camera.ui/server",
3
- "version": "0.0.94",
3
+ "version": "0.0.96",
4
4
  "description": "camera.ui server",
5
5
  "author": "seydx (https://github.com/cameraui/camera.ui)",
6
6
  "type": "module",
@@ -49,7 +49,7 @@
49
49
  "compare-versions": "^6.1.1",
50
50
  "dotenv": "^17.4.2",
51
51
  "express-useragent": "^2.2.0",
52
- "fastify": "^5.8.5",
52
+ "fastify": "^5.9.0",
53
53
  "fastify-plugin": "^6.0.0",
54
54
  "fastify-type-provider-zod": "7.0.0",
55
55
  "fkill": "^10.0.3",
@@ -58,10 +58,12 @@
58
58
  "js-yaml": "^5.2.0",
59
59
  "jsonwebtoken": "^9.0.3",
60
60
  "lmdb": "^3.5.6",
61
- "node-av": "^6.1.0-beta.3",
61
+ "node-av": "^6.1.1-beta.1",
62
62
  "node-forge": "^1.4.0",
63
+ "npm-registry-fetch": "^20.0.1",
63
64
  "object-path": "^0.11.8",
64
65
  "otplib": "^13.4.1",
66
+ "pacote": "^22.0.0",
65
67
  "ps-list": "^9.0.0",
66
68
  "qrcode": "^1.5.4",
67
69
  "qs": "^6.15.3",
@@ -71,7 +73,7 @@
71
73
  "socket.io": "^4.8.3",
72
74
  "systeminformation": "^5.31.11",
73
75
  "tail": "^2.2.6",
74
- "tar": "^7.5.17",
76
+ "tar": "^7.5.19",
75
77
  "tsyringe": "^4.10.0",
76
78
  "undici": "^8.5.0",
77
79
  "uuid": "^14.0.1",
@@ -86,7 +88,9 @@
86
88
  "@types/jsonwebtoken": "^9.0.10",
87
89
  "@types/node": "26.0.1",
88
90
  "@types/node-forge": "^1.3.14",
91
+ "@types/npm-registry-fetch": "^8.0.9",
89
92
  "@types/object-path": "^0.11.4",
93
+ "@types/pacote": "^11.1.8",
90
94
  "@types/qrcode": "^1.5.6",
91
95
  "@types/semver": "^7.7.1",
92
96
  "@types/tail": "^2.2.3",
@@ -96,11 +100,11 @@
96
100
  "cross-env": "^10.1.0",
97
101
  "eslint": "9.39.2",
98
102
  "globals": "^17.7.0",
99
- "prettier": "^3.8.5",
103
+ "prettier": "^3.9.1",
100
104
  "rimraf": "^6.1.3",
101
105
  "typescript": "5.9.3",
102
106
  "typescript-eslint": "^8.62.0",
103
- "updates": "^17.18.0",
107
+ "updates": "^17.18.1",
104
108
  "vitest": "^4.1.9"
105
109
  },
106
110
  "bugs": {
@@ -1 +0,0 @@
1
- import{t as e}from"./CuiBottomSheet-k8Zb5XD1.js";export{e as default};
@@ -1 +0,0 @@
1
- import{t as e}from"./SettingsAccount-DySpU4el.js";export{e as default};
@@ -1 +0,0 @@
1
- import{t as e}from"./SettingsAppearance-CGdPmMkM.js";export{e as default};
@@ -1,7 +0,0 @@
1
- import{S as e}from"./api-Tan5u5QZ.js";import{$n as t,$t as n,Cn as r,Hn as ee,In as i,Jn as te,Rn as a,Sn as o,Vn as ne,Xt as s,Yn as c,Yt as l,Zt as re,ar as ie,dn as u,dr as d,in as f,on as p,sr as m,wn as h,z as ae}from"./vendor-TwHhULaP.js";import{Bn as oe,Vn as se,di as ce}from"./vendor-cameraui-CeENiq5U.js";import{t as le}from"./useSharedComposables-Dyso8kmC.js";import{J as ue,j as de}from"./vendor-primevue-D-xm-xIu.js";import{t as fe}from"./plugins-C6jbSDXS.js";import{n as g,t as _}from"./useLogsSocket-BTa94fXn.js";import{a as v,i as pe,n as me,o as y,r as he,t as ge}from"./vendor-markdown-Cuk4GbAg.js";import{t as _e}from"./server-BBHyrnAu.js";var b={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function x(e,t){return h(),n(`svg`,b,[...t[0]||=[s(`path`,{fill:`currentColor`,d:`M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12z`},null,-1)]])}var ve=c({name:`mdi-content-copy`,render:x});function S(e){return`id`in e&&!(`type`in e)}function C(e){return`type`in e}var ye={key:0},be={class:`text-base font-semibold border-b-[1px] border-color mb-3 pb-3`},xe=[`innerHTML`],Se={key:1},Ce={class:`text-muted`},we={key:2},w={class:`cui-label`},T={key:3,class:`w-full h-full relative`},E={key:4,class:`w-full h-full p-4 flex items-center justify-center`},D=p({__name:`VersionsHandler`,props:{target:{},installVersion:{},isNewPlugin:{type:Boolean},action:{}},setup(c,{expose:p}){y.registerLanguage(`typescript`,he),y.registerLanguage(`yaml`,me),y.registerLanguage(`json`,v),y.registerLanguage(`python`,pe);let b=new fe,x=new _e,D=ae(),O=c,k=e(),{t:A}=ce(),{mdBreakpoint:j}=le(),M=u(`dialogRef`),N=u(`dialogRefProps`),{target:P,installVersion:F,isNewPlugin:I}=ie(O);b.toggleQueryActivator(`getPluginVersionsQuery`,!1),b.toggleQueryActivator(`getPluginChangelogQuery`,!1),x.toggleQueryActivator(`checkVersionQuery`,!1);let Te=l(()=>S(P.value)?P.value.pluginName:`server`),L=l(()=>O.action===`uninstall`&&S(P.value)),R=_({target:Te.value,onStdout:e=>U.value?.writeTerminal(e),onDisconnect:()=>U.value?.writeTerminal(`
2
- \rWebsocket failed to connect! Is the server running?\r
3
- \r
4
- `),onClearLog:()=>U.value?.clearTerminal(),onReconnected:()=>{U.value?.writeTerminal(`\r
5
- --- Reconnected ---\r
6
- \r
7
- `)}}),Ee=l(()=>({pluginversion:W.value||F.value})),{data:De,isBusy:z}=x.checkVersionQuery(),{data:B,isBusy:V}=b.getPluginVersionsQuery(S(P.value)?P.value.pluginName:``),{data:Oe,isBusy:ke,suspense:Ae}=b.getPluginChangelogQuery(S(P.value)?P.value.pluginName:``,Ee),{mutate:je,isPending:Me}=x.restartServerQuery(),{mutate:Ne,isPending:Pe}=b.restartPluginQuery(),{mutateAsync:Fe,isPending:Ie}=b.installPluginQuery(),{mutateAsync:Le,isPending:Re}=b.uninstallPluginQuery(),{mutateAsync:ze,isPending:Be}=x.updateServerQuery(),H=ge(`commonmark`,{highlight(e,t){if(t&&y.getLanguage(t))try{return`<pre><code class="hljs">`+y.highlight(e,{language:t,ignoreIllegals:!0}).value+`</code></pre>`}catch{}return`<pre><code class="hljs">`+H.utils.escapeHtml(e)+`</code></pre>`}}),U=i(`consoleRef`),W=t(),G=t(!1),K=t(!1),q=t(!1),J=t(!1),Y=t(!1),Ve=l(()=>V.value||z.value),He=l(()=>!!(N.loading?.value||V.value||z.value||ke.value||Ie.value||Re.value||Be.value||Pe.value||Me.value)),X=l(()=>S(P.value)?B.value?.versions||[]:C(P.value)&&De.value?.versions.toReversed()||[]),Z=l(()=>{if(S(P.value))return Oe.value}),Ue=l(()=>({fontSize:j.value?12:14}));function Q(){G.value=!0,R.connect()}async function We(){if(S(P.value))try{b.toggleQueryActivator(`getPluginChangelogQuery`,!0);let{isError:e}=await Ae();if(e)throw Error(`Failed to fetch changelog`);K.value=!0}catch{}else C(P.value)}async function $(e){if(!K.value&&(await We(),K.value)){N.confirmText&&(N.confirmText.value=A(`components.form.button.continue`)),Y.value=!0;return}Q();try{S(P.value)?await Fe({pluginData:{pluginname:P.value.pluginName,pluginversion:e}}):C(P.value)&&(await ze({serverData:{version:e}}),D.invalidateQueries({queryKey:[`api`]})),q.value=!0,N.confirmText&&(N.confirmText.value=I.value?A(`components.form.button.finish`):A(`components.form.button.restart`))}catch(e){k.add({severity:`error`,detail:e,life:3e3})}}async function Ge(){if(S(P.value)){Q();try{await Le({pluginName:P.value.pluginName}),J.value=!0,N.confirmText&&(N.confirmText.value=A(`components.form.button.finish`))}catch(e){k.add({severity:`error`,detail:e,life:3e3})}}}function Ke(){S(P.value)?Ne({pluginName:P.value.pluginName}):C(P.value)&&je()}async function qe(){if(L.value)return J.value?void 0:(await Ge(),null);if(!(q.value&&I.value)){if(q.value){Ke();return}return Y.value?(Y.value=!1,F.value?await $(F.value):W.value&&await $(W.value),null):F.value?(await $(F.value),null):W.value?(await $(W.value),null):(k.add({severity:`error`,detail:A(`components.toast.no_version_selected`),life:3e3}),null)}}return a(X,e=>{e.length&&(W.value=e[0])},{immediate:!0,deep:!0}),a(G,e=>{e?M.value.data.dialogContentClass=`not-md:px-0 h-full md:h-[50vh]`:delete M.value.data.dialogContentClass}),a(j,e=>{!e&&(G.value||K.value)&&M.value.options.props&&(M.value.options.props.style.height=`60vh`,M.value.options.props.style.width=`70vh`,M.value.options.props.style.maxWidth=`100%`)}),o(()=>{L.value||(F.value?$(F.value):S(P.value)?b.toggleQueryActivator(`getPluginVersionsQuery`,!0):C(P.value)&&x.toggleQueryActivator(`checkVersionQuery`,!0))}),r(()=>{R.disconnect()}),p({isLoading:He,onConfirm:qe}),(e,t)=>{let r=de,i=ve,a=se,o=g,c=oe,l=ue;return h(),n(`div`,null,[m(K)&&m(Z)&&!m(G)?(h(),n(`div`,ye,[s(`h3`,be,d(e.$t(`components.form.label.changelog`)),1),s(`div`,{class:`markdown-body`,innerHTML:m(H).render(m(Z))},null,8,xe)])):m(L)&&!m(G)?(h(),n(`div`,Se,[s(`p`,Ce,d(e.$t(`components.dialog.message.confirm_uninstall_plugin`)),1)])):!m(F)&&!m(G)&&!m(K)?(h(),n(`div`,we,[s(`label`,w,d(e.$t(`components.form.label.version`)),1),f(r,{modelValue:m(W),"onUpdate:modelValue":t[0]||=e=>te(W)?W.value=e:null,options:m(X),loading:m(Ve),class:`w-full mt-2`},null,8,[`modelValue`,`options`,`loading`])])):m(G)?(h(),n(`div`,T,[ee((h(),re(a,{type:`button`,severity:`secondary`,rounded:``,class:`!absolute top-2 right-2 z-10 !w-8 !h-8 !p-0 opacity-70 hover:opacity-100`,onClick:t[1]||=e=>m(U)?.copyAll()},{default:ne(()=>[f(i,{class:`w-4 h-4`})]),_:1})),[[l,e.$t(`components.form.button.copy`),void 0,{left:!0}]]),f(o,{ref_key:`consoleRef`,ref:U,options:m(Ue),class:`bg-black !w-full`,"ignore-breakpoint":``,onResize:m(R).reportSize},null,8,[`options`,`onResize`])])):(h(),n(`div`,E,[f(c,{class:`w-[30px] h-[30px] m-0`,"stroke-width":`5`})]))])}}});export{D as default};