@axium/sysadmin 0.2.4 → 0.2.6
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.
- package/dist/client/info.js +29 -21
- package/dist/common.d.ts +21 -14
- package/lib/SystemCard.svelte +1 -1
- package/lib/UserCard.svelte +1 -1
- package/lib/tsconfig.json +1 -1
- package/package.json +5 -4
- package/routes/tsconfig.json +1 -1
- package/dist/web_hook.d.ts +0 -8
- package/dist/web_hook.js +0 -4
package/dist/client/info.js
CHANGED
|
@@ -111,31 +111,19 @@ function storage() {
|
|
|
111
111
|
}
|
|
112
112
|
return result;
|
|
113
113
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (!match)
|
|
121
|
-
continue;
|
|
122
|
-
const [, key, value] = match;
|
|
123
|
-
info[key] = BigInt(value) * (line.endsWith('kB') ? 1024n : 1n);
|
|
124
|
-
}
|
|
125
|
-
const total = info.MemTotal ?? BigInt(os.totalmem());
|
|
126
|
-
const available = info.MemAvailable ?? BigInt(os.freemem());
|
|
127
|
-
const memory = {
|
|
128
|
-
speed: 0,
|
|
129
|
-
total,
|
|
130
|
-
used: total - available,
|
|
131
|
-
};
|
|
114
|
+
let dmiMemory;
|
|
115
|
+
/** Static memory hardware details from DMI. */
|
|
116
|
+
function memoryHardware() {
|
|
117
|
+
if (dmiMemory)
|
|
118
|
+
return dmiMemory;
|
|
119
|
+
dmiMemory = { speed: 0 };
|
|
132
120
|
try {
|
|
133
121
|
const dmiMemoryInfo = execFileSync('sudo', ['-n', 'dmidecode', '-t', '17'], {
|
|
134
122
|
encoding: 'utf8',
|
|
135
123
|
stdio: ['ignore', 'pipe', 'ignore'],
|
|
136
124
|
});
|
|
137
125
|
for (const match of dmiMemoryInfo.matchAll(/^\s*(?:Configured Memory|Configured Clock)?\s*Speed:\s*(\d+)\s*MT\/s/gim)) {
|
|
138
|
-
|
|
126
|
+
dmiMemory.speed = Math.max(dmiMemory.speed, Number(match[1]));
|
|
139
127
|
}
|
|
140
128
|
const populated = (field) => {
|
|
141
129
|
for (const [, match] of dmiMemoryInfo.matchAll(new RegExp(`^[ \\t]*${field}:[ \\t]*(.+)$`, 'gim'))) {
|
|
@@ -144,12 +132,32 @@ function memory() {
|
|
|
144
132
|
return value;
|
|
145
133
|
}
|
|
146
134
|
};
|
|
147
|
-
|
|
148
|
-
|
|
135
|
+
dmiMemory.formFactor = populated('Form Factor');
|
|
136
|
+
dmiMemory.type = populated('Type');
|
|
149
137
|
}
|
|
150
138
|
catch {
|
|
151
139
|
// dmidecode missing, not root, or sudo needs a password
|
|
152
140
|
}
|
|
141
|
+
return dmiMemory;
|
|
142
|
+
}
|
|
143
|
+
function memory() {
|
|
144
|
+
const info = {};
|
|
145
|
+
const content = read('/proc/meminfo');
|
|
146
|
+
if (content)
|
|
147
|
+
for (const line of content.split('\n')) {
|
|
148
|
+
const match = /^(\w+):\s+(\d+)(?:\s+kB)?$/.exec(line.trim());
|
|
149
|
+
if (!match)
|
|
150
|
+
continue;
|
|
151
|
+
const [, key, value] = match;
|
|
152
|
+
info[key] = BigInt(value) * (line.endsWith('kB') ? 1024n : 1n);
|
|
153
|
+
}
|
|
154
|
+
const total = info.MemTotal ?? BigInt(os.totalmem());
|
|
155
|
+
const available = info.MemAvailable ?? BigInt(os.freemem());
|
|
156
|
+
const memory = {
|
|
157
|
+
...memoryHardware(),
|
|
158
|
+
total,
|
|
159
|
+
used: total - available,
|
|
160
|
+
};
|
|
153
161
|
const swapTotal = info.SwapTotal ?? 0n;
|
|
154
162
|
if (swapTotal > 0n)
|
|
155
163
|
memory.swap = { total: swapTotal, used: swapTotal - (info.SwapFree ?? 0n) };
|
package/dist/common.d.ts
CHANGED
|
@@ -26,11 +26,12 @@ export declare const System: z.ZodObject<{
|
|
|
26
26
|
user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
27
27
|
id: z.ZodUUID;
|
|
28
28
|
name: z.ZodString;
|
|
29
|
-
username: z.
|
|
30
|
-
email: z.ZodOptional<z.ZodEmail
|
|
29
|
+
username: z.ZodString;
|
|
30
|
+
email: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodEmail>>>;
|
|
31
31
|
emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
|
|
32
32
|
preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
|
|
33
33
|
debug: z.ZodDefault<z.ZodBoolean>;
|
|
34
|
+
theme: z.ZodDefault<z.ZodLiteral<"default" | "light" | "forest" | "midnight" | "beach" | "cherry" | "volcano">>;
|
|
34
35
|
}, z.core.$strip>>>;
|
|
35
36
|
roles: z.ZodArray<z.ZodString>;
|
|
36
37
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -81,11 +82,12 @@ declare const SysadminAPI: {
|
|
|
81
82
|
user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
82
83
|
id: z.ZodUUID;
|
|
83
84
|
name: z.ZodString;
|
|
84
|
-
username: z.
|
|
85
|
-
email: z.ZodOptional<z.ZodEmail
|
|
85
|
+
username: z.ZodString;
|
|
86
|
+
email: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodEmail>>>;
|
|
86
87
|
emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
|
|
87
88
|
preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
|
|
88
89
|
debug: z.ZodDefault<z.ZodBoolean>;
|
|
90
|
+
theme: z.ZodDefault<z.ZodLiteral<"default" | "light" | "forest" | "midnight" | "beach" | "cherry" | "volcano">>;
|
|
89
91
|
}, z.core.$strip>>>;
|
|
90
92
|
roles: z.ZodArray<z.ZodString>;
|
|
91
93
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -117,11 +119,12 @@ declare const SysadminAPI: {
|
|
|
117
119
|
user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
118
120
|
id: z.ZodUUID;
|
|
119
121
|
name: z.ZodString;
|
|
120
|
-
username: z.
|
|
121
|
-
email: z.ZodOptional<z.ZodEmail
|
|
122
|
+
username: z.ZodString;
|
|
123
|
+
email: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodEmail>>>;
|
|
122
124
|
emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
|
|
123
125
|
preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
|
|
124
126
|
debug: z.ZodDefault<z.ZodBoolean>;
|
|
127
|
+
theme: z.ZodDefault<z.ZodLiteral<"default" | "light" | "forest" | "midnight" | "beach" | "cherry" | "volcano">>;
|
|
125
128
|
}, z.core.$strip>>>;
|
|
126
129
|
roles: z.ZodArray<z.ZodString>;
|
|
127
130
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -167,11 +170,12 @@ declare const SysadminAPI: {
|
|
|
167
170
|
user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
168
171
|
id: z.ZodUUID;
|
|
169
172
|
name: z.ZodString;
|
|
170
|
-
username: z.
|
|
171
|
-
email: z.ZodOptional<z.ZodEmail
|
|
173
|
+
username: z.ZodString;
|
|
174
|
+
email: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodEmail>>>;
|
|
172
175
|
emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
|
|
173
176
|
preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
|
|
174
177
|
debug: z.ZodDefault<z.ZodBoolean>;
|
|
178
|
+
theme: z.ZodDefault<z.ZodLiteral<"default" | "light" | "forest" | "midnight" | "beach" | "cherry" | "volcano">>;
|
|
175
179
|
}, z.core.$strip>>>;
|
|
176
180
|
roles: z.ZodArray<z.ZodString>;
|
|
177
181
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -203,11 +207,12 @@ declare const SysadminAPI: {
|
|
|
203
207
|
user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
204
208
|
id: z.ZodUUID;
|
|
205
209
|
name: z.ZodString;
|
|
206
|
-
username: z.
|
|
207
|
-
email: z.ZodOptional<z.ZodEmail
|
|
210
|
+
username: z.ZodString;
|
|
211
|
+
email: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodEmail>>>;
|
|
208
212
|
emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
|
|
209
213
|
preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
|
|
210
214
|
debug: z.ZodDefault<z.ZodBoolean>;
|
|
215
|
+
theme: z.ZodDefault<z.ZodLiteral<"default" | "light" | "forest" | "midnight" | "beach" | "cherry" | "volcano">>;
|
|
211
216
|
}, z.core.$strip>>>;
|
|
212
217
|
roles: z.ZodArray<z.ZodString>;
|
|
213
218
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -234,11 +239,12 @@ declare const SysadminAPI: {
|
|
|
234
239
|
user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
235
240
|
id: z.ZodUUID;
|
|
236
241
|
name: z.ZodString;
|
|
237
|
-
username: z.
|
|
238
|
-
email: z.ZodOptional<z.ZodEmail
|
|
242
|
+
username: z.ZodString;
|
|
243
|
+
email: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodEmail>>>;
|
|
239
244
|
emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
|
|
240
245
|
preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
|
|
241
246
|
debug: z.ZodDefault<z.ZodBoolean>;
|
|
247
|
+
theme: z.ZodDefault<z.ZodLiteral<"default" | "light" | "forest" | "midnight" | "beach" | "cherry" | "volcano">>;
|
|
242
248
|
}, z.core.$strip>>>;
|
|
243
249
|
roles: z.ZodArray<z.ZodString>;
|
|
244
250
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -290,11 +296,12 @@ declare const SysadminAPI: {
|
|
|
290
296
|
user: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
291
297
|
id: z.ZodUUID;
|
|
292
298
|
name: z.ZodString;
|
|
293
|
-
username: z.
|
|
294
|
-
email: z.ZodOptional<z.ZodEmail
|
|
299
|
+
username: z.ZodString;
|
|
300
|
+
email: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodEmail>>>;
|
|
295
301
|
emailVerified: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>>;
|
|
296
302
|
preferences: z.ZodOptional<z.ZodLazy<z.ZodObject<{
|
|
297
303
|
debug: z.ZodDefault<z.ZodBoolean>;
|
|
304
|
+
theme: z.ZodDefault<z.ZodLiteral<"default" | "light" | "forest" | "midnight" | "beach" | "cherry" | "volcano">>;
|
|
298
305
|
}, z.core.$strip>>>;
|
|
299
306
|
roles: z.ZodArray<z.ZodString>;
|
|
300
307
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
package/lib/SystemCard.svelte
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { fetchAPI, text } from '@axium/client';
|
|
3
3
|
import { contextMenu, type ContextMenuItem } from '@axium/client/attachments';
|
|
4
4
|
import { Icon, Popover } from '@axium/client/components';
|
|
5
|
-
import { copy } from '@axium/client/
|
|
5
|
+
import { copy } from '@axium/client/web';
|
|
6
6
|
import { toastStatus } from '@axium/client/toast';
|
|
7
7
|
import { systemTypeIcons, type System } from '@axium/sysadmin';
|
|
8
8
|
import SystemInitDialog from './SystemInitDialog.svelte';
|
package/lib/UserCard.svelte
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { fetchAPI, text } from '@axium/client';
|
|
3
3
|
import { contextMenu, type ContextMenuItem } from '@axium/client/attachments';
|
|
4
4
|
import { Icon, Popover } from '@axium/client/components';
|
|
5
|
-
import { copy } from '@axium/client/
|
|
5
|
+
import { copy } from '@axium/client/web';
|
|
6
6
|
import { toastStatus } from '@axium/client/toast';
|
|
7
7
|
import type { SystemUser } from '@axium/sysadmin';
|
|
8
8
|
import UserInitDialog from './UserInitDialog.svelte';
|
package/lib/tsconfig.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axium/sysadmin",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"author": "James Prevett <axium@jamespre.dev>",
|
|
5
5
|
"description": "System administration for Axium",
|
|
6
6
|
"funding": {
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"build": "tsc"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@axium/client": ">=0.
|
|
40
|
-
"@axium/core": ">=0.
|
|
39
|
+
"@axium/client": ">=0.37.0",
|
|
40
|
+
"@axium/core": ">=0.39.0",
|
|
41
41
|
"@axium/server": ">=0.47.0",
|
|
42
42
|
"@sveltejs/kit": "^2.27.3",
|
|
43
43
|
"kysely": "^0.29.0",
|
|
@@ -49,11 +49,12 @@
|
|
|
49
49
|
"zod": "^4.0.5"
|
|
50
50
|
},
|
|
51
51
|
"axium": {
|
|
52
|
+
"locales": "locales",
|
|
52
53
|
"server": {
|
|
53
54
|
"routes": "routes",
|
|
54
55
|
"hooks": "./dist/server/hooks.js",
|
|
55
56
|
"db": "./db.json",
|
|
56
|
-
"web_client_hooks": "./dist/
|
|
57
|
+
"web_client_hooks": "./dist/common.js"
|
|
57
58
|
},
|
|
58
59
|
"client": {
|
|
59
60
|
"hooks": "./dist/client/hooks.js",
|
package/routes/tsconfig.json
CHANGED
package/dist/web_hook.d.ts
DELETED
package/dist/web_hook.js
DELETED