@axium/server 0.44.2 → 0.44.4
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/build.js +22 -10
- package/dist/cli/db.js +15 -34
- package/dist/cli/index.js +6 -11
- package/dist/db/data.d.ts +7 -7
- package/dist/db/data.js +1 -2
- package/dist/db/delta.d.ts +6 -6
- package/dist/db/delta.js +129 -65
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.js +25 -42
- package/dist/db/schema.d.ts +6 -5
- package/dist/db/schema.js +1 -0
- package/dist/io.js +10 -25
- package/dist/main.js +1 -0
- package/dist/serve.d.ts +0 -4
- package/dist/serve.js +0 -4
- package/package.json +2 -2
- package/schemas/db.json +8 -8
package/dist/db/delta.js
CHANGED
|
@@ -1,3 +1,55 @@
|
|
|
1
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
+
}
|
|
18
|
+
else if (async) {
|
|
19
|
+
env.stack.push({ async: true });
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
+
return function (env) {
|
|
25
|
+
function fail(e) {
|
|
26
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
+
env.hasError = true;
|
|
28
|
+
}
|
|
29
|
+
var r, s = 0;
|
|
30
|
+
function next() {
|
|
31
|
+
while (r = env.stack.pop()) {
|
|
32
|
+
try {
|
|
33
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
+
if (r.dispose) {
|
|
35
|
+
var result = r.dispose.call(r.value);
|
|
36
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
+
}
|
|
38
|
+
else s |= 1;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
fail(e);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
+
if (env.hasError) throw env.error;
|
|
46
|
+
}
|
|
47
|
+
return next();
|
|
48
|
+
};
|
|
49
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
+
var e = new Error(message);
|
|
51
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
+
});
|
|
1
53
|
import * as io from 'ioium/node';
|
|
2
54
|
import { sql } from 'kysely';
|
|
3
55
|
import { styleText } from 'node:util';
|
|
@@ -339,91 +391,103 @@ export async function apply(delta, forceAbort = false) {
|
|
|
339
391
|
const tx = await database.startTransaction().execute();
|
|
340
392
|
try {
|
|
341
393
|
for (const [tableName, table] of Object.entries(delta.add_tables)) {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
394
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
395
|
+
try {
|
|
396
|
+
const _ = __addDisposableResource(env_1, io.start('Adding table ' + tableName), false);
|
|
397
|
+
let query = tx.schema.createTable(tableName);
|
|
398
|
+
const columns = Object.entries(table.columns);
|
|
399
|
+
const pkColumns = columns.filter(([, column]) => column.primary).map(([name, column]) => ({ name, ...column }));
|
|
400
|
+
const needsSpecialConstraint = pkColumns.length > 1 || pkColumns.some(col => !col.required);
|
|
401
|
+
for (const [colName, column] of columns) {
|
|
402
|
+
query = query.addColumn(colName, sql.raw(column.type), data.buildColumn(column, !needsSpecialConstraint));
|
|
403
|
+
}
|
|
404
|
+
if (needsSpecialConstraint) {
|
|
405
|
+
query = query.addPrimaryKeyConstraint('PK_' + tableName.replaceAll('.', '_'), pkColumns.map(col => col.name));
|
|
406
|
+
}
|
|
407
|
+
await query.execute();
|
|
408
|
+
io.done();
|
|
409
|
+
}
|
|
410
|
+
catch (e_1) {
|
|
411
|
+
env_1.error = e_1;
|
|
412
|
+
env_1.hasError = true;
|
|
349
413
|
}
|
|
350
|
-
|
|
351
|
-
|
|
414
|
+
finally {
|
|
415
|
+
__disposeResources(env_1);
|
|
352
416
|
}
|
|
353
|
-
await query.execute();
|
|
354
|
-
io.done();
|
|
355
417
|
}
|
|
356
418
|
for (const tableName of delta.drop_tables) {
|
|
357
|
-
io.
|
|
358
|
-
await tx.schema.dropTable(tableName).execute();
|
|
359
|
-
io.done();
|
|
419
|
+
await io.track('Dropping table ' + tableName, tx.schema.dropTable(tableName).execute());
|
|
360
420
|
}
|
|
361
421
|
for (const [tableName, tableDelta] of Object.entries(delta.alter_tables)) {
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
422
|
+
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
423
|
+
try {
|
|
424
|
+
const _ = __addDisposableResource(env_2, io.start(`Modifying table ${tableName}`), false);
|
|
425
|
+
const query = tx.schema.alterTable(tableName);
|
|
426
|
+
for (const constraint of tableDelta.drop_constraints) {
|
|
427
|
+
await query.dropConstraint(constraint).execute();
|
|
428
|
+
}
|
|
429
|
+
for (const colName of tableDelta.drop_columns) {
|
|
430
|
+
await query.dropColumn(colName).execute();
|
|
431
|
+
}
|
|
432
|
+
for (const [colName, column] of Object.entries(tableDelta.add_columns)) {
|
|
433
|
+
await query.addColumn(colName, sql.raw(column.type), data.buildColumn(column, false)).execute();
|
|
434
|
+
}
|
|
435
|
+
for (const [colName, column] of Object.entries(tableDelta.alter_columns)) {
|
|
436
|
+
if (column.default)
|
|
437
|
+
await query.alterColumn(colName, col => col.setDefault(sql.raw(String(column.default)))).execute();
|
|
438
|
+
if (column.type)
|
|
439
|
+
await query.alterColumn(colName, col => col.setDataType(sql.raw(column.type))).execute();
|
|
440
|
+
for (const op of column.ops ?? []) {
|
|
441
|
+
switch (op) {
|
|
442
|
+
case 'drop_default':
|
|
443
|
+
if (column.default)
|
|
444
|
+
throw 'Cannot set and drop default at the same time';
|
|
445
|
+
await query.alterColumn(colName, col => col.dropDefault()).execute();
|
|
446
|
+
break;
|
|
447
|
+
case 'set_required':
|
|
448
|
+
await query.alterColumn(colName, col => col.setNotNull()).execute();
|
|
449
|
+
break;
|
|
450
|
+
case 'drop_required':
|
|
451
|
+
await query.alterColumn(colName, col => col.dropNotNull()).execute();
|
|
452
|
+
break;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
for (const [name, con] of Object.entries(tableDelta.add_constraints)) {
|
|
457
|
+
switch (con.type) {
|
|
458
|
+
case 'unique':
|
|
459
|
+
await query.addUniqueConstraint(name, con.on, b => (con.nulls_not_distinct ? b.nullsNotDistinct() : b)).execute();
|
|
384
460
|
break;
|
|
385
|
-
case '
|
|
386
|
-
await query.
|
|
461
|
+
case 'check':
|
|
462
|
+
await query.addCheckConstraint(name, sql.raw(con.check)).execute();
|
|
387
463
|
break;
|
|
388
|
-
case '
|
|
389
|
-
await query.
|
|
464
|
+
case 'foreign_key':
|
|
465
|
+
await query.addForeignKeyConstraint(name, con.on, con.target, con.references, b => b).execute();
|
|
466
|
+
break;
|
|
467
|
+
case 'primary_key':
|
|
468
|
+
await query.addPrimaryKeyConstraint(name, con.on).execute();
|
|
390
469
|
break;
|
|
391
470
|
}
|
|
392
471
|
}
|
|
472
|
+
io.done();
|
|
393
473
|
}
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
await query.addCheckConstraint(name, sql.raw(con.check)).execute();
|
|
401
|
-
break;
|
|
402
|
-
case 'foreign_key':
|
|
403
|
-
await query.addForeignKeyConstraint(name, con.on, con.target, con.references, b => b).execute();
|
|
404
|
-
break;
|
|
405
|
-
case 'primary_key':
|
|
406
|
-
await query.addPrimaryKeyConstraint(name, con.on).execute();
|
|
407
|
-
break;
|
|
408
|
-
}
|
|
474
|
+
catch (e_2) {
|
|
475
|
+
env_2.error = e_2;
|
|
476
|
+
env_2.hasError = true;
|
|
477
|
+
}
|
|
478
|
+
finally {
|
|
479
|
+
__disposeResources(env_2);
|
|
409
480
|
}
|
|
410
|
-
io.done();
|
|
411
481
|
}
|
|
412
482
|
for (const [indexName, index] of Object.entries(delta.add_indexes)) {
|
|
413
|
-
io.
|
|
414
|
-
await tx.schema.createIndex(indexName).on(index.on).columns(index.columns).execute();
|
|
415
|
-
io.done();
|
|
483
|
+
await io.track('Creating index ' + indexName, tx.schema.createIndex(indexName).on(index.on).columns(index.columns).execute());
|
|
416
484
|
}
|
|
417
485
|
for (const index of delta.drop_indexes) {
|
|
418
|
-
io.
|
|
419
|
-
await tx.schema.dropIndex(index).execute();
|
|
420
|
-
io.done();
|
|
486
|
+
await io.track('Dropping index ' + index, tx.schema.dropIndex(index).execute());
|
|
421
487
|
}
|
|
422
488
|
if (forceAbort)
|
|
423
489
|
throw 'Rolling back due to --abort';
|
|
424
|
-
io.
|
|
425
|
-
await tx.commit().execute();
|
|
426
|
-
io.done();
|
|
490
|
+
await io.track('Committing', tx.commit().execute());
|
|
427
491
|
}
|
|
428
492
|
catch (e) {
|
|
429
493
|
await tx.rollback().execute();
|
package/dist/db/index.d.ts
CHANGED
|
@@ -47,7 +47,7 @@ export interface InitOptions extends OpOptions {
|
|
|
47
47
|
check: boolean;
|
|
48
48
|
}
|
|
49
49
|
export declare function shouldRecreate(opt: InitOptions): boolean;
|
|
50
|
-
export declare function getHBA(
|
|
50
|
+
export declare function getHBA(): Promise<[content: string, writeBack: (newContent: string) => void]>;
|
|
51
51
|
/** @internal @hidden */
|
|
52
52
|
export declare const _pgHba = "\nlocal axium axium md5\nhost axium axium 127.0.0.1/32 md5\nhost axium axium ::1/128 md5\n";
|
|
53
53
|
/** @internal @hidden */
|
package/dist/db/index.js
CHANGED
|
@@ -136,23 +136,17 @@ export function shouldRecreate(opt) {
|
|
|
136
136
|
io.warn('already exists. Use --skip to skip or --force to re-create.');
|
|
137
137
|
throw 2;
|
|
138
138
|
}
|
|
139
|
-
export async function getHBA(
|
|
140
|
-
const hbaShowResult = await io.
|
|
141
|
-
io.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
139
|
+
export async function getHBA() {
|
|
140
|
+
const hbaShowResult = await io.runShell('Finding pg_hba.conf', `sudo -u postgres psql -c "SHOW hba_file"`);
|
|
141
|
+
const hbaPath = io.track('Resolving pg_hba.conf path', () => {
|
|
142
|
+
const result = hbaShowResult.match(/^\s*(.+\.conf)\s*$/m)?.[1]?.trim();
|
|
143
|
+
if (!result)
|
|
144
|
+
throw 'failed. You will need to add password-based auth for the axium user manually.';
|
|
145
|
+
return result;
|
|
146
|
+
});
|
|
147
147
|
io.debug(`Found pg_hba.conf at ${hbaPath}`);
|
|
148
|
-
io.
|
|
149
|
-
const
|
|
150
|
-
io.done();
|
|
151
|
-
const writeBack = (newContent) => {
|
|
152
|
-
io.start('Writing HBA configuration');
|
|
153
|
-
writeFileSync(hbaPath, newContent);
|
|
154
|
-
io.done();
|
|
155
|
-
};
|
|
148
|
+
const content = io.track('Reading HBA configuration', () => readFileSync(hbaPath, 'utf-8'));
|
|
149
|
+
const writeBack = (newContent) => io.track('Writing HBA configuration', () => writeFileSync(hbaPath, newContent));
|
|
156
150
|
return [content, writeBack];
|
|
157
151
|
}
|
|
158
152
|
/** @internal @hidden */
|
|
@@ -162,7 +156,7 @@ host axium axium 127.0.0.1/32 md5
|
|
|
162
156
|
host axium axium ::1/128 md5
|
|
163
157
|
`;
|
|
164
158
|
/** @internal @hidden */
|
|
165
|
-
export const _sql = (command, message) => io.
|
|
159
|
+
export const _sql = (command, message) => io.runShell(message, `sudo -u postgres psql -c "${command}"`);
|
|
166
160
|
/** Shortcut to output a warning if an error is thrown because relation already exists */
|
|
167
161
|
export const warnExists = io.someWarnings([/\w+ "[\w.]+" already exists/, 'already exists.']);
|
|
168
162
|
export async function init(opt) {
|
|
@@ -172,8 +166,8 @@ export async function init(opt) {
|
|
|
172
166
|
config.save({ db: { password: randomBytes(32).toString('base64') } }, true);
|
|
173
167
|
io.debug('Generated password and wrote to global config');
|
|
174
168
|
}
|
|
175
|
-
await io.
|
|
176
|
-
await io.
|
|
169
|
+
await io.runShell('Checking for sudo', 'which sudo');
|
|
170
|
+
await io.runShell('Checking for psql', 'which psql');
|
|
177
171
|
await _sql('CREATE DATABASE axium', 'Creating database').catch(async (error) => {
|
|
178
172
|
if (error != 'database "axium" already exists')
|
|
179
173
|
throw error;
|
|
@@ -195,24 +189,19 @@ export async function init(opt) {
|
|
|
195
189
|
await _sql('GRANT ALL PRIVILEGES ON DATABASE axium TO axium', 'Granting database privileges');
|
|
196
190
|
await _sql('GRANT ALL PRIVILEGES ON SCHEMA public TO axium', 'Granting schema privileges');
|
|
197
191
|
await _sql('ALTER DATABASE axium OWNER TO axium', 'Setting database owner');
|
|
198
|
-
await getHBA(
|
|
192
|
+
await getHBA()
|
|
199
193
|
.then(([content, writeBack]) => {
|
|
200
|
-
io.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
io.
|
|
205
|
-
const newContent = content.replace(/^local\s+all\s+all.*$/m, `$&\n${_pgHba}`);
|
|
206
|
-
io.done();
|
|
194
|
+
io.track('Checking for Axium HBA configuration', () => {
|
|
195
|
+
if (content.includes(_pgHba))
|
|
196
|
+
throw 'already exists.';
|
|
197
|
+
});
|
|
198
|
+
const newContent = io.track('Adding Axium HBA configuration', () => content.replace(/^local\s+all\s+all.*$/m, `$&\n${_pgHba}`));
|
|
207
199
|
writeBack(newContent);
|
|
208
200
|
})
|
|
209
201
|
.catch(io.warn);
|
|
210
202
|
await _sql('SELECT pg_reload_conf()', 'Reloading configuration');
|
|
211
|
-
io.
|
|
212
|
-
|
|
213
|
-
io.done();
|
|
214
|
-
io.start('Creating schema acl');
|
|
215
|
-
await database.schema.createSchema('acl').execute().then(io.done).catch(warnExists);
|
|
203
|
+
const _ = __addDisposableResource(env_1, io.track('Connecting to database', connect), true);
|
|
204
|
+
await io.track('Creating schema acl', database.schema.createSchema('acl').execute()).catch(warnExists);
|
|
216
205
|
}
|
|
217
206
|
catch (e_1) {
|
|
218
207
|
env_1.error = e_1;
|
|
@@ -286,10 +275,8 @@ export async function checkTableTypes(tableName, types, opt, tableMetadata) {
|
|
|
286
275
|
}
|
|
287
276
|
export async function clean(opt) {
|
|
288
277
|
const now = new Date();
|
|
289
|
-
io.
|
|
290
|
-
await database.deleteFrom('
|
|
291
|
-
io.start('Removing expired verifications');
|
|
292
|
-
await database.deleteFrom('verifications').where('verifications.expires', '<', now).execute().then(io.done);
|
|
278
|
+
await io.track('Removing expired sessions', database.deleteFrom('sessions').where('sessions.expires', '<', now).execute());
|
|
279
|
+
await io.track('Removing expired verifications', database.deleteFrom('verifications').where('verifications.expires', '<', now).execute());
|
|
293
280
|
for (const plugin of plugins.values()) {
|
|
294
281
|
if (!plugin._hooks?.clean)
|
|
295
282
|
continue;
|
|
@@ -298,11 +285,7 @@ export async function clean(opt) {
|
|
|
298
285
|
}
|
|
299
286
|
}
|
|
300
287
|
export async function rotatePassword() {
|
|
301
|
-
io.
|
|
302
|
-
|
|
303
|
-
io.done();
|
|
304
|
-
io.start('Updating global config');
|
|
305
|
-
config.save({ db: { password } }, true);
|
|
306
|
-
io.done();
|
|
288
|
+
const password = io.track('Generating new password', () => randomBytes(32).toString('base64'));
|
|
289
|
+
io.track('Updating global config', () => config.save({ db: { password } }, true));
|
|
307
290
|
await _sql(`ALTER USER axium WITH ENCRYPTED PASSWORD '${password}'`, 'Updating database user password');
|
|
308
291
|
}
|
package/dist/db/schema.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export * from './data.js';
|
|
|
7
7
|
export declare const SchemaDecl: z.ZodObject<{
|
|
8
8
|
tables: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
9
9
|
columns: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
10
|
-
type: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodLiteral<"bigint" | "boolean" | "uuid" | "date" | "binary" | "integer" | "int2" | "int4" | "
|
|
10
|
+
type: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodLiteral<"bigint" | "boolean" | "uuid" | "date" | "binary" | "integer" | "int2" | "int4" | "smallint" | "real" | "double precision" | "float4" | "float8" | "decimal" | "numeric" | "serial" | "int8" | "bigserial" | "bool" | "varchar" | "char" | "text" | "datetime" | "time" | "timetz" | "timestamp" | "timestamptz" | "bytea" | "varbinary" | "blob" | "int4range" | "numrange" | "tsrange" | "tstzrange" | "daterange" | "int4multirange" | "int8multirange" | "nummultirange" | "tsmultirange" | "tstzmultirange" | "datemultirange" | "json" | "jsonb">, z.ZodTemplateLiteral<`binary(${number})` | `varchar(${number})` | `char(${number})` | `datetime(${number})` | `time(${number})` | `timetz(${number})` | `timestamp(${number})` | `timestamptz(${number})` | `varbinary(${number})`>, z.ZodTemplateLiteral<`decimal(${number},${number})` | `decimal(${number}, ${number})` | `numeric(${number},${number})` | `numeric(${number}, ${number})`>]>, z.ZodTemplateLiteral<"bigint[]" | "boolean[]" | "uuid[]" | "date[]" | "binary[]" | "integer[]" | "int2[]" | "int4[]" | "smallint[]" | "real[]" | "double precision[]" | "float4[]" | "float8[]" | "decimal[]" | "numeric[]" | "serial[]" | "int8[]" | "bigserial[]" | "bool[]" | "varchar[]" | "char[]" | "text[]" | "datetime[]" | "time[]" | "timetz[]" | "timestamp[]" | "timestamptz[]" | "bytea[]" | "varbinary[]" | "blob[]" | "int4range[]" | "numrange[]" | "tsrange[]" | "tstzrange[]" | "daterange[]" | "int4multirange[]" | "int8multirange[]" | "nummultirange[]" | "tsmultirange[]" | "tstzmultirange[]" | "datemultirange[]" | "json[]" | "jsonb[]" | `binary(${number})[]` | `varchar(${number})[]` | `char(${number})[]` | `datetime(${number})[]` | `time(${number})[]` | `timetz(${number})[]` | `timestamp(${number})[]` | `timestamptz(${number})[]` | `varbinary(${number})[]` | `decimal(${number},${number})[]` | `decimal(${number}, ${number})[]` | `numeric(${number},${number})[]` | `numeric(${number}, ${number})[]` | `bigint[${number}]` | `boolean[${number}]` | `uuid[${number}]` | `date[${number}]` | `binary[${number}]` | `integer[${number}]` | `int2[${number}]` | `int4[${number}]` | `smallint[${number}]` | `real[${number}]` | `double precision[${number}]` | `float4[${number}]` | `float8[${number}]` | `decimal[${number}]` | `numeric[${number}]` | `serial[${number}]` | `int8[${number}]` | `bigserial[${number}]` | `bool[${number}]` | `varchar[${number}]` | `char[${number}]` | `text[${number}]` | `datetime[${number}]` | `time[${number}]` | `timetz[${number}]` | `timestamp[${number}]` | `timestamptz[${number}]` | `bytea[${number}]` | `varbinary[${number}]` | `blob[${number}]` | `int4range[${number}]` | `numrange[${number}]` | `tsrange[${number}]` | `tstzrange[${number}]` | `daterange[${number}]` | `int4multirange[${number}]` | `int8multirange[${number}]` | `nummultirange[${number}]` | `tsmultirange[${number}]` | `tstzmultirange[${number}]` | `datemultirange[${number}]` | `json[${number}]` | `jsonb[${number}]` | `binary(${number})[${number}]` | `varchar(${number})[${number}]` | `char(${number})[${number}]` | `datetime(${number})[${number}]` | `time(${number})[${number}]` | `timetz(${number})[${number}]` | `timestamp(${number})[${number}]` | `timestamptz(${number})[${number}]` | `varbinary(${number})[${number}]` | `decimal(${number},${number})[${number}]` | `decimal(${number}, ${number})[${number}]` | `numeric(${number},${number})[${number}]` | `numeric(${number}, ${number})[${number}]`>]>;
|
|
11
11
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
12
12
|
unique: z.ZodDefault<z.ZodBoolean>;
|
|
13
13
|
primary: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -51,7 +51,7 @@ export declare const SchemaFile: z.ZodObject<{
|
|
|
51
51
|
versions: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
52
52
|
tables: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
53
53
|
columns: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
54
|
-
type: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodLiteral<"bigint" | "boolean" | "uuid" | "date" | "binary" | "integer" | "int2" | "int4" | "
|
|
54
|
+
type: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodLiteral<"bigint" | "boolean" | "uuid" | "date" | "binary" | "integer" | "int2" | "int4" | "smallint" | "real" | "double precision" | "float4" | "float8" | "decimal" | "numeric" | "serial" | "int8" | "bigserial" | "bool" | "varchar" | "char" | "text" | "datetime" | "time" | "timetz" | "timestamp" | "timestamptz" | "bytea" | "varbinary" | "blob" | "int4range" | "numrange" | "tsrange" | "tstzrange" | "daterange" | "int4multirange" | "int8multirange" | "nummultirange" | "tsmultirange" | "tstzmultirange" | "datemultirange" | "json" | "jsonb">, z.ZodTemplateLiteral<`binary(${number})` | `varchar(${number})` | `char(${number})` | `datetime(${number})` | `time(${number})` | `timetz(${number})` | `timestamp(${number})` | `timestamptz(${number})` | `varbinary(${number})`>, z.ZodTemplateLiteral<`decimal(${number},${number})` | `decimal(${number}, ${number})` | `numeric(${number},${number})` | `numeric(${number}, ${number})`>]>, z.ZodTemplateLiteral<"bigint[]" | "boolean[]" | "uuid[]" | "date[]" | "binary[]" | "integer[]" | "int2[]" | "int4[]" | "smallint[]" | "real[]" | "double precision[]" | "float4[]" | "float8[]" | "decimal[]" | "numeric[]" | "serial[]" | "int8[]" | "bigserial[]" | "bool[]" | "varchar[]" | "char[]" | "text[]" | "datetime[]" | "time[]" | "timetz[]" | "timestamp[]" | "timestamptz[]" | "bytea[]" | "varbinary[]" | "blob[]" | "int4range[]" | "numrange[]" | "tsrange[]" | "tstzrange[]" | "daterange[]" | "int4multirange[]" | "int8multirange[]" | "nummultirange[]" | "tsmultirange[]" | "tstzmultirange[]" | "datemultirange[]" | "json[]" | "jsonb[]" | `binary(${number})[]` | `varchar(${number})[]` | `char(${number})[]` | `datetime(${number})[]` | `time(${number})[]` | `timetz(${number})[]` | `timestamp(${number})[]` | `timestamptz(${number})[]` | `varbinary(${number})[]` | `decimal(${number},${number})[]` | `decimal(${number}, ${number})[]` | `numeric(${number},${number})[]` | `numeric(${number}, ${number})[]` | `bigint[${number}]` | `boolean[${number}]` | `uuid[${number}]` | `date[${number}]` | `binary[${number}]` | `integer[${number}]` | `int2[${number}]` | `int4[${number}]` | `smallint[${number}]` | `real[${number}]` | `double precision[${number}]` | `float4[${number}]` | `float8[${number}]` | `decimal[${number}]` | `numeric[${number}]` | `serial[${number}]` | `int8[${number}]` | `bigserial[${number}]` | `bool[${number}]` | `varchar[${number}]` | `char[${number}]` | `text[${number}]` | `datetime[${number}]` | `time[${number}]` | `timetz[${number}]` | `timestamp[${number}]` | `timestamptz[${number}]` | `bytea[${number}]` | `varbinary[${number}]` | `blob[${number}]` | `int4range[${number}]` | `numrange[${number}]` | `tsrange[${number}]` | `tstzrange[${number}]` | `daterange[${number}]` | `int4multirange[${number}]` | `int8multirange[${number}]` | `nummultirange[${number}]` | `tsmultirange[${number}]` | `tstzmultirange[${number}]` | `datemultirange[${number}]` | `json[${number}]` | `jsonb[${number}]` | `binary(${number})[${number}]` | `varchar(${number})[${number}]` | `char(${number})[${number}]` | `datetime(${number})[${number}]` | `time(${number})[${number}]` | `timetz(${number})[${number}]` | `timestamp(${number})[${number}]` | `timestamptz(${number})[${number}]` | `varbinary(${number})[${number}]` | `decimal(${number},${number})[${number}]` | `decimal(${number}, ${number})[${number}]` | `numeric(${number},${number})[${number}]` | `numeric(${number}, ${number})[${number}]`>]>;
|
|
55
55
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
56
56
|
unique: z.ZodDefault<z.ZodBoolean>;
|
|
57
57
|
primary: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -92,7 +92,7 @@ export declare const SchemaFile: z.ZodObject<{
|
|
|
92
92
|
delta: z.ZodLiteral<true>;
|
|
93
93
|
add_tables: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
94
94
|
columns: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
95
|
-
type: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodLiteral<"bigint" | "boolean" | "uuid" | "date" | "binary" | "integer" | "int2" | "int4" | "
|
|
95
|
+
type: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodLiteral<"bigint" | "boolean" | "uuid" | "date" | "binary" | "integer" | "int2" | "int4" | "smallint" | "real" | "double precision" | "float4" | "float8" | "decimal" | "numeric" | "serial" | "int8" | "bigserial" | "bool" | "varchar" | "char" | "text" | "datetime" | "time" | "timetz" | "timestamp" | "timestamptz" | "bytea" | "varbinary" | "blob" | "int4range" | "numrange" | "tsrange" | "tstzrange" | "daterange" | "int4multirange" | "int8multirange" | "nummultirange" | "tsmultirange" | "tstzmultirange" | "datemultirange" | "json" | "jsonb">, z.ZodTemplateLiteral<`binary(${number})` | `varchar(${number})` | `char(${number})` | `datetime(${number})` | `time(${number})` | `timetz(${number})` | `timestamp(${number})` | `timestamptz(${number})` | `varbinary(${number})`>, z.ZodTemplateLiteral<`decimal(${number},${number})` | `decimal(${number}, ${number})` | `numeric(${number},${number})` | `numeric(${number}, ${number})`>]>, z.ZodTemplateLiteral<"bigint[]" | "boolean[]" | "uuid[]" | "date[]" | "binary[]" | "integer[]" | "int2[]" | "int4[]" | "smallint[]" | "real[]" | "double precision[]" | "float4[]" | "float8[]" | "decimal[]" | "numeric[]" | "serial[]" | "int8[]" | "bigserial[]" | "bool[]" | "varchar[]" | "char[]" | "text[]" | "datetime[]" | "time[]" | "timetz[]" | "timestamp[]" | "timestamptz[]" | "bytea[]" | "varbinary[]" | "blob[]" | "int4range[]" | "numrange[]" | "tsrange[]" | "tstzrange[]" | "daterange[]" | "int4multirange[]" | "int8multirange[]" | "nummultirange[]" | "tsmultirange[]" | "tstzmultirange[]" | "datemultirange[]" | "json[]" | "jsonb[]" | `binary(${number})[]` | `varchar(${number})[]` | `char(${number})[]` | `datetime(${number})[]` | `time(${number})[]` | `timetz(${number})[]` | `timestamp(${number})[]` | `timestamptz(${number})[]` | `varbinary(${number})[]` | `decimal(${number},${number})[]` | `decimal(${number}, ${number})[]` | `numeric(${number},${number})[]` | `numeric(${number}, ${number})[]` | `bigint[${number}]` | `boolean[${number}]` | `uuid[${number}]` | `date[${number}]` | `binary[${number}]` | `integer[${number}]` | `int2[${number}]` | `int4[${number}]` | `smallint[${number}]` | `real[${number}]` | `double precision[${number}]` | `float4[${number}]` | `float8[${number}]` | `decimal[${number}]` | `numeric[${number}]` | `serial[${number}]` | `int8[${number}]` | `bigserial[${number}]` | `bool[${number}]` | `varchar[${number}]` | `char[${number}]` | `text[${number}]` | `datetime[${number}]` | `time[${number}]` | `timetz[${number}]` | `timestamp[${number}]` | `timestamptz[${number}]` | `bytea[${number}]` | `varbinary[${number}]` | `blob[${number}]` | `int4range[${number}]` | `numrange[${number}]` | `tsrange[${number}]` | `tstzrange[${number}]` | `daterange[${number}]` | `int4multirange[${number}]` | `int8multirange[${number}]` | `nummultirange[${number}]` | `tsmultirange[${number}]` | `tstzmultirange[${number}]` | `datemultirange[${number}]` | `json[${number}]` | `jsonb[${number}]` | `binary(${number})[${number}]` | `varchar(${number})[${number}]` | `char(${number})[${number}]` | `datetime(${number})[${number}]` | `time(${number})[${number}]` | `timetz(${number})[${number}]` | `timestamp(${number})[${number}]` | `timestamptz(${number})[${number}]` | `varbinary(${number})[${number}]` | `decimal(${number},${number})[${number}]` | `decimal(${number}, ${number})[${number}]` | `numeric(${number},${number})[${number}]` | `numeric(${number}, ${number})[${number}]`>]>;
|
|
96
96
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
97
97
|
unique: z.ZodDefault<z.ZodBoolean>;
|
|
98
98
|
primary: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -127,7 +127,7 @@ export declare const SchemaFile: z.ZodObject<{
|
|
|
127
127
|
drop_tables: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
|
|
128
128
|
alter_tables: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
129
129
|
add_columns: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
130
|
-
type: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodLiteral<"bigint" | "boolean" | "uuid" | "date" | "binary" | "integer" | "int2" | "int4" | "
|
|
130
|
+
type: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodLiteral<"bigint" | "boolean" | "uuid" | "date" | "binary" | "integer" | "int2" | "int4" | "smallint" | "real" | "double precision" | "float4" | "float8" | "decimal" | "numeric" | "serial" | "int8" | "bigserial" | "bool" | "varchar" | "char" | "text" | "datetime" | "time" | "timetz" | "timestamp" | "timestamptz" | "bytea" | "varbinary" | "blob" | "int4range" | "numrange" | "tsrange" | "tstzrange" | "daterange" | "int4multirange" | "int8multirange" | "nummultirange" | "tsmultirange" | "tstzmultirange" | "datemultirange" | "json" | "jsonb">, z.ZodTemplateLiteral<`binary(${number})` | `varchar(${number})` | `char(${number})` | `datetime(${number})` | `time(${number})` | `timetz(${number})` | `timestamp(${number})` | `timestamptz(${number})` | `varbinary(${number})`>, z.ZodTemplateLiteral<`decimal(${number},${number})` | `decimal(${number}, ${number})` | `numeric(${number},${number})` | `numeric(${number}, ${number})`>]>, z.ZodTemplateLiteral<"bigint[]" | "boolean[]" | "uuid[]" | "date[]" | "binary[]" | "integer[]" | "int2[]" | "int4[]" | "smallint[]" | "real[]" | "double precision[]" | "float4[]" | "float8[]" | "decimal[]" | "numeric[]" | "serial[]" | "int8[]" | "bigserial[]" | "bool[]" | "varchar[]" | "char[]" | "text[]" | "datetime[]" | "time[]" | "timetz[]" | "timestamp[]" | "timestamptz[]" | "bytea[]" | "varbinary[]" | "blob[]" | "int4range[]" | "numrange[]" | "tsrange[]" | "tstzrange[]" | "daterange[]" | "int4multirange[]" | "int8multirange[]" | "nummultirange[]" | "tsmultirange[]" | "tstzmultirange[]" | "datemultirange[]" | "json[]" | "jsonb[]" | `binary(${number})[]` | `varchar(${number})[]` | `char(${number})[]` | `datetime(${number})[]` | `time(${number})[]` | `timetz(${number})[]` | `timestamp(${number})[]` | `timestamptz(${number})[]` | `varbinary(${number})[]` | `decimal(${number},${number})[]` | `decimal(${number}, ${number})[]` | `numeric(${number},${number})[]` | `numeric(${number}, ${number})[]` | `bigint[${number}]` | `boolean[${number}]` | `uuid[${number}]` | `date[${number}]` | `binary[${number}]` | `integer[${number}]` | `int2[${number}]` | `int4[${number}]` | `smallint[${number}]` | `real[${number}]` | `double precision[${number}]` | `float4[${number}]` | `float8[${number}]` | `decimal[${number}]` | `numeric[${number}]` | `serial[${number}]` | `int8[${number}]` | `bigserial[${number}]` | `bool[${number}]` | `varchar[${number}]` | `char[${number}]` | `text[${number}]` | `datetime[${number}]` | `time[${number}]` | `timetz[${number}]` | `timestamp[${number}]` | `timestamptz[${number}]` | `bytea[${number}]` | `varbinary[${number}]` | `blob[${number}]` | `int4range[${number}]` | `numrange[${number}]` | `tsrange[${number}]` | `tstzrange[${number}]` | `daterange[${number}]` | `int4multirange[${number}]` | `int8multirange[${number}]` | `nummultirange[${number}]` | `tsmultirange[${number}]` | `tstzmultirange[${number}]` | `datemultirange[${number}]` | `json[${number}]` | `jsonb[${number}]` | `binary(${number})[${number}]` | `varchar(${number})[${number}]` | `char(${number})[${number}]` | `datetime(${number})[${number}]` | `time(${number})[${number}]` | `timetz(${number})[${number}]` | `timestamp(${number})[${number}]` | `timestamptz(${number})[${number}]` | `varbinary(${number})[${number}]` | `decimal(${number},${number})[${number}]` | `decimal(${number}, ${number})[${number}]` | `numeric(${number},${number})[${number}]` | `numeric(${number}, ${number})[${number}]`>]>;
|
|
131
131
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
132
132
|
unique: z.ZodDefault<z.ZodBoolean>;
|
|
133
133
|
primary: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -144,7 +144,7 @@ export declare const SchemaFile: z.ZodObject<{
|
|
|
144
144
|
}, z.core.$strict>>>>;
|
|
145
145
|
drop_columns: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
|
|
146
146
|
alter_columns: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
147
|
-
type: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodLiteral<"bigint" | "boolean" | "uuid" | "date" | "binary" | "integer" | "int2" | "int4" | "
|
|
147
|
+
type: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodLiteral<"bigint" | "boolean" | "uuid" | "date" | "binary" | "integer" | "int2" | "int4" | "smallint" | "real" | "double precision" | "float4" | "float8" | "decimal" | "numeric" | "serial" | "int8" | "bigserial" | "bool" | "varchar" | "char" | "text" | "datetime" | "time" | "timetz" | "timestamp" | "timestamptz" | "bytea" | "varbinary" | "blob" | "int4range" | "numrange" | "tsrange" | "tstzrange" | "daterange" | "int4multirange" | "int8multirange" | "nummultirange" | "tsmultirange" | "tstzmultirange" | "datemultirange" | "json" | "jsonb">, z.ZodTemplateLiteral<`binary(${number})` | `varchar(${number})` | `char(${number})` | `datetime(${number})` | `time(${number})` | `timetz(${number})` | `timestamp(${number})` | `timestamptz(${number})` | `varbinary(${number})`>, z.ZodTemplateLiteral<`decimal(${number},${number})` | `decimal(${number}, ${number})` | `numeric(${number},${number})` | `numeric(${number}, ${number})`>]>, z.ZodTemplateLiteral<"bigint[]" | "boolean[]" | "uuid[]" | "date[]" | "binary[]" | "integer[]" | "int2[]" | "int4[]" | "smallint[]" | "real[]" | "double precision[]" | "float4[]" | "float8[]" | "decimal[]" | "numeric[]" | "serial[]" | "int8[]" | "bigserial[]" | "bool[]" | "varchar[]" | "char[]" | "text[]" | "datetime[]" | "time[]" | "timetz[]" | "timestamp[]" | "timestamptz[]" | "bytea[]" | "varbinary[]" | "blob[]" | "int4range[]" | "numrange[]" | "tsrange[]" | "tstzrange[]" | "daterange[]" | "int4multirange[]" | "int8multirange[]" | "nummultirange[]" | "tsmultirange[]" | "tstzmultirange[]" | "datemultirange[]" | "json[]" | "jsonb[]" | `binary(${number})[]` | `varchar(${number})[]` | `char(${number})[]` | `datetime(${number})[]` | `time(${number})[]` | `timetz(${number})[]` | `timestamp(${number})[]` | `timestamptz(${number})[]` | `varbinary(${number})[]` | `decimal(${number},${number})[]` | `decimal(${number}, ${number})[]` | `numeric(${number},${number})[]` | `numeric(${number}, ${number})[]` | `bigint[${number}]` | `boolean[${number}]` | `uuid[${number}]` | `date[${number}]` | `binary[${number}]` | `integer[${number}]` | `int2[${number}]` | `int4[${number}]` | `smallint[${number}]` | `real[${number}]` | `double precision[${number}]` | `float4[${number}]` | `float8[${number}]` | `decimal[${number}]` | `numeric[${number}]` | `serial[${number}]` | `int8[${number}]` | `bigserial[${number}]` | `bool[${number}]` | `varchar[${number}]` | `char[${number}]` | `text[${number}]` | `datetime[${number}]` | `time[${number}]` | `timetz[${number}]` | `timestamp[${number}]` | `timestamptz[${number}]` | `bytea[${number}]` | `varbinary[${number}]` | `blob[${number}]` | `int4range[${number}]` | `numrange[${number}]` | `tsrange[${number}]` | `tstzrange[${number}]` | `daterange[${number}]` | `int4multirange[${number}]` | `int8multirange[${number}]` | `nummultirange[${number}]` | `tsmultirange[${number}]` | `tstzmultirange[${number}]` | `datemultirange[${number}]` | `json[${number}]` | `jsonb[${number}]` | `binary(${number})[${number}]` | `varchar(${number})[${number}]` | `char(${number})[${number}]` | `datetime(${number})[${number}]` | `time(${number})[${number}]` | `timetz(${number})[${number}]` | `timestamp(${number})[${number}]` | `timestamptz(${number})[${number}]` | `varbinary(${number})[${number}]` | `decimal(${number},${number})[${number}]` | `decimal(${number}, ${number})[${number}]` | `numeric(${number},${number})[${number}]` | `numeric(${number}, ${number})[${number}]`>]>>;
|
|
148
148
|
default: z.ZodOptional<z.ZodString>;
|
|
149
149
|
ops: z.ZodOptional<z.ZodArray<z.ZodLiteral<"drop_default" | "set_required" | "drop_required">>>;
|
|
150
150
|
}, z.core.$strict>>>>;
|
|
@@ -264,5 +264,6 @@ export declare function toGraph(schema: SchemaDecl): Generator<string>;
|
|
|
264
264
|
export declare const toIntrospected: {
|
|
265
265
|
boolean: string;
|
|
266
266
|
integer: string;
|
|
267
|
+
bigint: string;
|
|
267
268
|
'text[]': string;
|
|
268
269
|
};
|
package/dist/db/schema.js
CHANGED
package/dist/io.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Logger } from 'logzen';
|
|
|
6
6
|
import * as fs from 'node:fs';
|
|
7
7
|
import { dirname, join, resolve } from 'node:path/posix';
|
|
8
8
|
import { _unique } from './state.js';
|
|
9
|
-
import { pick } from 'utilium';
|
|
9
|
+
import { _throw, pick } from 'utilium';
|
|
10
10
|
export const systemDir = '/etc/axium';
|
|
11
11
|
export const dirs = _unique('dirs', [systemDir]);
|
|
12
12
|
for (let dir = resolve(process.cwd()); dir !== '/'; dir = dirname(dir)) {
|
|
@@ -36,47 +36,32 @@ export const _portActions = ['enable', 'disable'];
|
|
|
36
36
|
* If the origin has a port, passkeys do not work correctly with some password managers.
|
|
37
37
|
*/
|
|
38
38
|
export async function restrictedPorts(opt) {
|
|
39
|
-
io.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
io.done();
|
|
43
|
-
io.start('Checking ports method');
|
|
44
|
-
if (!_portMethods.includes(opt.method))
|
|
45
|
-
throw 'invalid';
|
|
46
|
-
io.done();
|
|
47
|
-
io.start('Checking ports action');
|
|
48
|
-
if (!_portActions.includes(opt.action))
|
|
49
|
-
throw 'invalid';
|
|
50
|
-
io.done();
|
|
39
|
+
io.track('Checking for root privileges', () => process.getuid?.() != 0 && _throw('root privileges are needed to change restricted ports.'));
|
|
40
|
+
io.track('Checking ports method', () => !_portMethods.includes(opt.method) && _throw('invalid'));
|
|
41
|
+
io.track('Checking ports action', () => !_portActions.includes(opt.action) && _throw('invalid'));
|
|
51
42
|
switch (opt.method) {
|
|
52
43
|
case 'node-cap': {
|
|
53
44
|
const setcap = await io
|
|
54
|
-
.
|
|
45
|
+
.runShell('Finding setcap', 'command -v setcap')
|
|
55
46
|
.then(e => e.trim())
|
|
56
47
|
.catch(() => {
|
|
57
48
|
io.warn('not in path.');
|
|
58
|
-
io.
|
|
59
|
-
fs.accessSync('/usr/sbin/setcap', fs.constants.X_OK);
|
|
60
|
-
io.done();
|
|
49
|
+
io.track('Checking for /usr/sbin/setcap', () => fs.accessSync('/usr/sbin/setcap', fs.constants.X_OK));
|
|
61
50
|
return '/usr/sbin/setcap';
|
|
62
51
|
});
|
|
63
52
|
io.debug('Using setcap at ' + setcap);
|
|
64
53
|
let { node } = opt;
|
|
65
54
|
node ||= await io
|
|
66
|
-
.
|
|
55
|
+
.runShell('Finding node', 'command -v node')
|
|
67
56
|
.then(e => e.trim())
|
|
68
57
|
.catch(() => {
|
|
69
58
|
io.warn('not in path.');
|
|
70
|
-
io.
|
|
71
|
-
fs.accessSync('/usr/bin/node', fs.constants.X_OK);
|
|
72
|
-
io.done();
|
|
59
|
+
io.track('Checking for /usr/bin/node', () => fs.accessSync('/usr/bin/node', fs.constants.X_OK));
|
|
73
60
|
return '/usr/bin/node';
|
|
74
61
|
});
|
|
75
|
-
io.
|
|
76
|
-
node = fs.realpathSync(node);
|
|
77
|
-
io.done();
|
|
62
|
+
node = io.track('Resolving real path for node', () => fs.realpathSync(node));
|
|
78
63
|
io.debug('Using node at ' + node);
|
|
79
|
-
await io.
|
|
64
|
+
await io.runShell('Setting ports capability', `${setcap} cap_net_bind_service=${opt.action == 'enable' ? '+' : '-'}ep ${node}`);
|
|
80
65
|
break;
|
|
81
66
|
}
|
|
82
67
|
}
|
package/dist/main.js
CHANGED
package/dist/serve.d.ts
CHANGED
|
@@ -12,7 +12,3 @@ export interface ServeOptions {
|
|
|
12
12
|
multiBuild: boolean;
|
|
13
13
|
}
|
|
14
14
|
export declare function serve(opt: Partial<ServeOptions>): Promise<Server>;
|
|
15
|
-
/**
|
|
16
|
-
* Perform initial setup for when the server is serving web pages.
|
|
17
|
-
*/
|
|
18
|
-
export declare function init(): Promise<void>;
|
package/dist/serve.js
CHANGED
|
@@ -168,7 +168,3 @@ export async function serve(opt) {
|
|
|
168
168
|
return createServer(handle);
|
|
169
169
|
return createSecureServer({ key: readFileSync(opt.ssl_key || config.web.ssl_key), cert: readFileSync(opt.ssl_cert || config.web.ssl_cert) }, handle);
|
|
170
170
|
}
|
|
171
|
-
/**
|
|
172
|
-
* Perform initial setup for when the server is serving web pages.
|
|
173
|
-
*/
|
|
174
|
-
export async function init() { }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axium/server",
|
|
3
|
-
"version": "0.44.
|
|
3
|
+
"version": "0.44.4",
|
|
4
4
|
"author": "James Prevett <axium@jamespre.dev>",
|
|
5
5
|
"funding": {
|
|
6
6
|
"type": "individual",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"@types/pg": "^8.11.11",
|
|
64
64
|
"commander": "^14.0.0",
|
|
65
65
|
"cookie_v1": "npm:cookie@^1.0.2",
|
|
66
|
-
"ioium": "^1.
|
|
66
|
+
"ioium": "^1.1.0",
|
|
67
67
|
"logzen": "^0.7.0",
|
|
68
68
|
"patch-package": "^8.0.1",
|
|
69
69
|
"pg": "^8.14.1",
|