surfer/src/commands/updates/addons.ts
2022-07-12 16:29:27 +10:00

50 lines
1.3 KiB
TypeScript

import { stat, writeFile } from 'fs/promises'
import { dirname, join } from 'path'
import { create } from 'xmlbuilder2'
import { DIST_DIR } from '../../constants'
import { dynamicConfig, ensureDir, generateHash, getSize } from '../../utils'
import {
downloadAddon,
getAddons,
resolveAddonDownloadUrl,
} from '../download/addon'
export async function generateAddonUpdateFiles() {
const addons = []
for (const addon of getAddons()) {
const url = await resolveAddonDownloadUrl(addon)
const xpi = await downloadAddon(url, addon)
addons.push({
...addon,
url,
xpi,
hash: await generateHash(xpi, 'sha256'),
hashType: 'sha256',
size: await getSize(xpi),
})
}
const root = create().ele('updates').ele('addons')
for (const addon of addons) {
const addonNode = root.ele('addon')
addonNode.att('id', addon.id)
addonNode.att('URL', addon.url)
addonNode.att('hashFunction', addon.hashType)
addonNode.att('hashValue', addon.hash)
addonNode.att('size', addon.size.toString())
addonNode.att('version', addon.version)
}
const path = join(
DIST_DIR,
'update/browser/addons',
dynamicConfig.get('brand'),
'update.xml'
)
ensureDir(path)
await writeFile(path, root.end({ prettyPrint: true }))
}