mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 16:02:26 +00:00
96 lines
2.3 KiB
JavaScript
96 lines
2.3 KiB
JavaScript
// js/bootstrap.js
|
|
|
|
import Application from "./app.js";
|
|
import {
|
|
DEFAULT_TRUST_SEED_NPUBS,
|
|
FEATURE_TRUST_SEEDS,
|
|
} from "./constants.js";
|
|
import { accessControl } from "./accessControl.js";
|
|
import moderationService from "./services/moderationService.js";
|
|
import nostrService from "./services/nostrService.js";
|
|
import r2Service from "./services/r2Service.js";
|
|
import { loadView } from "./viewManager.js";
|
|
|
|
function mergeSeedsWithWhitelist(source) {
|
|
const seeds = new Set(DEFAULT_TRUST_SEED_NPUBS);
|
|
|
|
if (source && typeof source[Symbol.iterator] === "function") {
|
|
for (const value of source) {
|
|
if (typeof value !== "string") {
|
|
continue;
|
|
}
|
|
const trimmed = value.trim();
|
|
if (trimmed) {
|
|
seeds.add(trimmed);
|
|
}
|
|
}
|
|
}
|
|
|
|
return seeds;
|
|
}
|
|
|
|
async function bootstrapTrustedSeeds() {
|
|
if (
|
|
!(
|
|
FEATURE_TRUST_SEEDS &&
|
|
moderationService &&
|
|
typeof moderationService.setTrustedSeeds === "function"
|
|
)
|
|
) {
|
|
return;
|
|
}
|
|
|
|
const applySeeds = (whitelist = null) => {
|
|
try {
|
|
const merged = mergeSeedsWithWhitelist(
|
|
whitelist ?? accessControl?.getWhitelist?.()
|
|
);
|
|
moderationService.setTrustedSeeds(merged);
|
|
} catch {
|
|
// Swallow bootstrap errors so login flow can continue; flag enables quick rollback.
|
|
}
|
|
};
|
|
|
|
try {
|
|
if (accessControl && typeof accessControl.ensureReady === "function") {
|
|
await accessControl.ensureReady();
|
|
}
|
|
} catch {
|
|
// Swallow bootstrap errors so login flow can continue; flag enables quick rollback.
|
|
}
|
|
|
|
applySeeds();
|
|
|
|
if (accessControl && typeof accessControl.onWhitelistChange === "function") {
|
|
accessControl.onWhitelistChange((nextWhitelist) => {
|
|
applySeeds(nextWhitelist);
|
|
});
|
|
}
|
|
}
|
|
|
|
bootstrapTrustedSeeds();
|
|
|
|
function mergeServices(overrides = {}) {
|
|
const merged = { nostrService, r2Service };
|
|
|
|
if (overrides && typeof overrides === "object") {
|
|
if (overrides.nostrService) {
|
|
merged.nostrService = overrides.nostrService;
|
|
}
|
|
if (overrides.r2Service) {
|
|
merged.r2Service = overrides.r2Service;
|
|
}
|
|
}
|
|
|
|
return merged;
|
|
}
|
|
|
|
export function createApplication({ services, loadView: loadViewOverride } = {}) {
|
|
return new Application({
|
|
services: mergeServices(services),
|
|
loadView: typeof loadViewOverride === "function" ? loadViewOverride : loadView,
|
|
});
|
|
}
|
|
|
|
export default createApplication;
|