73 lines
2.4 KiB
JavaScript
73 lines
2.4 KiB
JavaScript
import {
|
|
classifySwordModule,
|
|
fetchSwordConfCatalog,
|
|
loadLicenseApproval,
|
|
loadSwordPilotModules,
|
|
swordPackageUrl,
|
|
writeSwordAudit,
|
|
} from './sword-lib.js'
|
|
|
|
const pilot = await loadSwordPilotModules()
|
|
const licenseRegistry = await loadLicenseApproval()
|
|
const catalog = await fetchSwordConfCatalog(pilot.repository.mods_tarball_url)
|
|
|
|
const modules = []
|
|
|
|
for (const item of pilot.modules) {
|
|
const catalogEntry = catalog.modules.get(item.id.toLowerCase())
|
|
|
|
if (!catalogEntry) {
|
|
modules.push({
|
|
id: item.id,
|
|
intended_resource_type: item.intended_resource_type,
|
|
found: false,
|
|
license_status: 'missing',
|
|
review_notes: 'Module was not found in the CrossWire catalog.',
|
|
})
|
|
continue
|
|
}
|
|
|
|
const conf = catalogEntry.conf
|
|
const license = classifySwordModule(conf, licenseRegistry)
|
|
modules.push({
|
|
id: catalogEntry.module_id,
|
|
intended_resource_type: item.intended_resource_type,
|
|
found: true,
|
|
title: conf.Description ?? catalogEntry.module_id,
|
|
abbreviation: conf.Abbreviation ?? catalogEntry.module_id,
|
|
lang: conf.Lang ?? 'n/a',
|
|
mod_drv: conf.ModDrv,
|
|
source_type: conf.SourceType,
|
|
version: conf.Version,
|
|
sword_version_date: conf.SwordVersionDate,
|
|
distribution_license: conf.DistributionLicense ?? 'n/a',
|
|
text_source: conf.TextSource ?? 'n/a',
|
|
package_url: swordPackageUrl(catalogEntry.module_id, pilot.repository.package_base_url),
|
|
license_status: license.status,
|
|
license_rule: license.rule,
|
|
redistribution: license.redistribution ?? false,
|
|
commercial_use: license.commercial_use ?? null,
|
|
share_alike: license.share_alike ?? false,
|
|
import_enabled: item.import_enabled !== false,
|
|
import_status: item.import_status ?? (item.import_enabled === false ? 'deferred' : 'candidate'),
|
|
review_notes: license.notes,
|
|
reason: item.reason,
|
|
})
|
|
}
|
|
|
|
const audit = {
|
|
schema_version: 'librebible.sword-module-audit.v1',
|
|
generated_at: new Date().toISOString(),
|
|
repository: pilot.repository,
|
|
catalog_sha256: catalog.sha256,
|
|
modules,
|
|
}
|
|
|
|
await writeSwordAudit(audit)
|
|
|
|
const approved = modules.filter((module) => module.license_status.startsWith('approved')).length
|
|
const review = modules.filter((module) => module.license_status === 'review').length
|
|
const rejected = modules.filter((module) => module.license_status === 'rejected').length
|
|
|
|
console.log(`SWORD audit complete: ${modules.length} module(s), ${approved} approved, ${review} review, ${rejected} rejected.`)
|