and seeder/kernel parity. Booter / ctx (1.44.0) - bareOsReadPearRuntimeSnapshotJson; hrpc stock routes documented (kernel.*, vfs.readText, bare_os.echo, bare_os.disk_os_hints). - Peer admission: BARE_OS_DHT_ADDRESS_CLASS_ALLOWLIST + meta.dhtAddressClass; shouldAttemptPeer(peerKey, meta). - Optional BARE_OS_VFS_WARM_CACHE_INVALIDATE_ON_APPEND on system drive cores. - maybeMergeBareFromDrive: path dedupe + early exit when manifest keys satisfied. - identity-account: zero UTF-8 passphrase buffer after PBKDF2 (string path). Shell / utilities - BARE_OS_SHELL_ERREXIT and set -e / set +e; tests in bare-os-booter/test.js. - expand: comma-separated POSIX-style tab stops; man page + coreutils tests. Tooling / docs - kernel-microbench vfs: warmReplicationPathClassify sketch. - holepunch-drift-repos suggestedCriticalRepos; sync-holepunch-clones report. - scripts/README: pretest maintainer runbook; handbook/12 P2P vs POSIX. - KERNEL_CONTRACT, environment appendix, PLACEHOLDER_BASELINE (multisig gate), compatibility matrix, posix artifacts, syscalls.example.json, seeder sync. Requires: npm run pretest && npm test (already green in session).
105 lines
3.1 KiB
JavaScript
105 lines
3.1 KiB
JavaScript
/**
|
||
* Optional peer admission gate from **`BARE_OS_PEER_ALLOWLIST_HEX`**
|
||
* (comma-separated hex public keys; empty = allow all).
|
||
*
|
||
* When **`BARE_OS_DHT_ADDRESS_CLASS_ALLOWLIST`** is set and callers pass
|
||
* **`dhtAddressClass`** (hyperdht-address–style hint), the class must appear in
|
||
* the allow list after the key gate passes.
|
||
*
|
||
* @param {Record<string, unknown> | null | undefined} env
|
||
* @param {string} peerKeyHex
|
||
* @param {{ dhtAddressClass?: string } | null | undefined} [meta]
|
||
*/
|
||
export function evaluateBareOsPeerAdmission(env, peerKeyHex, meta = undefined) {
|
||
const raw = String(env?.BARE_OS_PEER_ALLOWLIST_HEX || '').trim()
|
||
const strict =
|
||
env?.BARE_OS_PEER_ALLOWLIST_STRICT === '1' ||
|
||
env?.BARE_OS_PEER_ALLOWLIST_STRICT === 'true'
|
||
/** @type {{ schema: number, verdict: string, note?: string, allowlistSize?: number, strictProfile?: boolean, atMs?: number, dhtAddressClassGate?: Record<string, unknown> }} */
|
||
let base
|
||
if (!raw) {
|
||
if (strict) {
|
||
base = {
|
||
schema: 1,
|
||
verdict: 'deny',
|
||
note:
|
||
'BARE_OS_PEER_ALLOWLIST_STRICT is set but BARE_OS_PEER_ALLOWLIST_HEX is empty — no peers admitted.'
|
||
}
|
||
} else {
|
||
base = {
|
||
schema: 1,
|
||
verdict: 'allow',
|
||
note: 'No allowlist; all peers admitted (subject to Hyperswarm topic).'
|
||
}
|
||
}
|
||
} else {
|
||
const want = String(peerKeyHex || '')
|
||
.trim()
|
||
.toLowerCase()
|
||
.replace(/^0x/, '')
|
||
const set = new Set(
|
||
raw
|
||
.split(/[\s,]+/)
|
||
.map((s) => s.trim().toLowerCase().replace(/^0x/, ''))
|
||
.filter(Boolean)
|
||
)
|
||
const ok = want && set.has(want)
|
||
base = {
|
||
schema: 1,
|
||
verdict: ok ? 'allow' : 'deny',
|
||
allowlistSize: set.size,
|
||
strictProfile: strict || undefined,
|
||
atMs: Date.now()
|
||
}
|
||
}
|
||
|
||
const classRaw = String(env?.BARE_OS_DHT_ADDRESS_CLASS_ALLOWLIST || '').trim()
|
||
if (!classRaw) {
|
||
if (base.atMs == null) base.atMs = Date.now()
|
||
return base
|
||
}
|
||
|
||
const allowClasses = new Set(
|
||
classRaw.split(',').map((s) => s.trim().toLowerCase()).filter(Boolean)
|
||
)
|
||
if (allowClasses.size === 0) {
|
||
if (base.atMs == null) base.atMs = Date.now()
|
||
return base
|
||
}
|
||
|
||
const cls = String(meta?.dhtAddressClass || '')
|
||
.trim()
|
||
.toLowerCase()
|
||
if (!cls) {
|
||
return {
|
||
...base,
|
||
atMs: base.atMs ?? Date.now(),
|
||
dhtAddressClassGate: {
|
||
schema: 1,
|
||
mode: 'no_peer_class_hint',
|
||
note: 'BARE_OS_DHT_ADDRESS_CLASS_ALLOWLIST is set but caller did not supply dhtAddressClass — stock Hyperswarm path does not classify peers; allow key verdict only.'
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!allowClasses.has(cls)) {
|
||
return {
|
||
schema: 1,
|
||
verdict: 'deny',
|
||
reason: 'dht_address_class',
|
||
dhtAddressClass: cls,
|
||
allowedClasses: [...allowClasses],
|
||
note: 'Peer DHT address class not listed in BARE_OS_DHT_ADDRESS_CLASS_ALLOWLIST.',
|
||
atMs: Date.now()
|
||
}
|
||
}
|
||
|
||
if (base.verdict === 'deny') return base
|
||
|
||
return {
|
||
...base,
|
||
atMs: base.atMs ?? Date.now(),
|
||
dhtAddressClassGate: { schema: 1, mode: 'allow', class: cls }
|
||
}
|
||
}
|