update agent

This commit is contained in:
2026-07-17 15:41:05 +07:00
parent 13bea66473
commit 476c41cf08
15 changed files with 467 additions and 20 deletions

View File

@@ -10,6 +10,7 @@ const EMAIL_CONFIRMATION_EXPIRES_MS = Number(process.env.EMAIL_CONFIRMATION_EXPI
let emailConfirmationSchemaPromise;
let applicationOpenUrlSchemaPromise;
let packageTypeSchemaPromise;
function padDatePart(value) {
return String(value).padStart(2, '0');
@@ -326,6 +327,37 @@ LEFT JOIN dbo.PackageVersions AS pv
return applicationOpenUrlSchemaPromise;
}
async function ensurePackageTypeSchema() {
if (!packageTypeSchemaPromise) {
packageTypeSchemaPromise = getPool().then((pool) => pool.request().query(`
IF EXISTS (
SELECT 1
FROM sys.check_constraints
WHERE name = N'CK_Packages_PackageType'
AND parent_object_id = OBJECT_ID(N'dbo.Packages')
AND definition NOT LIKE N'%apt%'
)
BEGIN
ALTER TABLE dbo.Packages DROP CONSTRAINT CK_Packages_PackageType;
END;
IF NOT EXISTS (
SELECT 1
FROM sys.check_constraints
WHERE name = N'CK_Packages_PackageType'
AND parent_object_id = OBJECT_ID(N'dbo.Packages')
)
BEGIN
ALTER TABLE dbo.Packages WITH CHECK
ADD CONSTRAINT CK_Packages_PackageType
CHECK (PackageType IN (N'deb', N'apt', N'docker'));
END;
`));
}
return packageTypeSchemaPromise;
}
function normalizePackageStatus(isActive) {
return isActive ? 'Active' : 'Archived';
}
@@ -850,6 +882,7 @@ async function deleteUser(userId) {
}
async function listPackages() {
await ensurePackageTypeSchema();
const pool = await getPool();
const result = await pool.request().query(`
SELECT *
@@ -996,7 +1029,10 @@ async function getApplicationById(id) {
}
async function getApplicationManifest(appCode, version, baseUrl) {
await ensureApplicationOpenUrlSchema();
await Promise.all([
ensureApplicationOpenUrlSchema(),
ensurePackageTypeSchema()
]);
const pool = await getPool();
const appResult = await pool.request()
.input('AppCode', sql.NVarChar(100), String(appCode || '').trim())
@@ -1048,6 +1084,17 @@ async function getApplicationManifest(appCode, version, baseUrl) {
const components = componentResult.recordset.map((row) => {
const installOrder = Number(row.InstallOrder || 10);
if (row.PackageType === 'apt') {
return {
componentId: row.PackageCode,
type: 'apt',
installOrder,
required: true,
packageName: row.PackageCode,
version: row.Version || undefined
};
}
if (row.PackageType === 'docker') {
return {
componentId: row.PackageCode,
@@ -1167,6 +1214,7 @@ async function getPackageVersionDownload(packageVersionId) {
}
async function createPackageWithVersion(input) {
await ensurePackageTypeSchema();
const pool = await getPool();
const transaction = new sql.Transaction(pool);