Files
bare-operating-system/packages/bare-os-booter/lib/bare-os-capability-registry.js
T
2026-04-04 18:46:00 -04:00

119 lines
4.5 KiB
JavaScript

/**
* Authoritative stock kernel capability word construction and seed strict rows.
* Consumed by the booter and kernel loader paths.
* @module bare-os-capability-registry
*/
import {
BARE_OS_KERNEL_CAPABILITY_KEY_PRIMARY,
BARE_OS_KERNEL_CAPABILITY_KEY_EXTENDED_SEEDING_PLATFORM,
BARE_OS_KERNEL_CAPABILITY_KEY_RLIMITS_DELEGATES_SHELL,
BARE_OS_KERNEL_CAPABILITY_KEY_OFFLINE_NET_EXTENSIONS,
BARE_OS_KERNEL_CAPABILITY_KEY_HOST_TRANSPORT_DELEGATES,
BARE_OS_KERNEL_CAPABILITY_KEY_REPLICATION_OPERATOR_SURFACE,
BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_CORESTORE_HRPC,
BARE_OS_KERNEL_CAPABILITY_KEY_BARE_RUNTIME_PROTO_MUX,
BARE_OS_KERNEL_CAPABILITY_KEY_BARE_MODULE_CRYPTO_STAGING,
BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_INSPECT_LOGGER_TLS,
BARE_OS_KERNEL_CAPABILITY_KEY_HYPERCORE_PACK_HRPC_LIFECYCLE,
BARE_OS_KERNEL_CAPABILITY_WORD_KEYS,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_PRIMARY,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_EXTENDED_SEEDING_PLATFORM,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_RLIMITS_DELEGATES_SHELL,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_OFFLINE_NET_EXTENSIONS,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_HOST_TRANSPORT_DELEGATES,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_REPLICATION_OPERATOR_SURFACE,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_RUNTIME_PROTO_MUX,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE,
buildKernelCapabilityWordsObject,
getKernelCapabilityWords,
readKernelCapabilityWord
} from 'bare-os-protocol'
/** @type {ReadonlyArray<readonly [string, number]>} */
export const KERNEL_CAPABILITY_SEED_STRICT_ROWS = Object.freeze([
[BARE_OS_KERNEL_CAPABILITY_KEY_PRIMARY, BARE_OS_KERNEL_FEATURES_STOCK_WORD_PRIMARY],
[
BARE_OS_KERNEL_CAPABILITY_KEY_EXTENDED_SEEDING_PLATFORM,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_EXTENDED_SEEDING_PLATFORM
],
[
BARE_OS_KERNEL_CAPABILITY_KEY_RLIMITS_DELEGATES_SHELL,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_RLIMITS_DELEGATES_SHELL
],
[
BARE_OS_KERNEL_CAPABILITY_KEY_OFFLINE_NET_EXTENSIONS,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_OFFLINE_NET_EXTENSIONS
],
[
BARE_OS_KERNEL_CAPABILITY_KEY_HOST_TRANSPORT_DELEGATES,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_HOST_TRANSPORT_DELEGATES
],
[
BARE_OS_KERNEL_CAPABILITY_KEY_REPLICATION_OPERATOR_SURFACE,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_REPLICATION_OPERATOR_SURFACE
],
[
BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_CORESTORE_HRPC,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC
],
[
BARE_OS_KERNEL_CAPABILITY_KEY_BARE_RUNTIME_PROTO_MUX,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_RUNTIME_PROTO_MUX
],
[
BARE_OS_KERNEL_CAPABILITY_KEY_BARE_MODULE_CRYPTO_STAGING,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING
],
[
BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_INSPECT_LOGGER_TLS,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS
],
[
BARE_OS_KERNEL_CAPABILITY_KEY_HYPERCORE_PACK_HRPC_LIFECYCLE,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE
]
])
/**
* @param {number} primaryWord
*/
export function buildStockKernelCapabilityWords(primaryWord) {
return buildKernelCapabilityWordsObject(
primaryWord >>> 0,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_EXTENDED_SEEDING_PLATFORM >>> 0,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_RLIMITS_DELEGATES_SHELL >>> 0,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_OFFLINE_NET_EXTENSIONS >>> 0,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_HOST_TRANSPORT_DELEGATES >>> 0,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_REPLICATION_OPERATOR_SURFACE >>> 0,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC >>> 0,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_RUNTIME_PROTO_MUX >>> 0,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING >>> 0,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS >>> 0,
BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE >>> 0
)
}
/**
* @param {unknown} info
* @returns {Readonly<Record<string, number>> | null}
*/
export function freezeKernelCapabilityWordsFromCapabilities(info) {
if (
!info ||
typeof info !== 'object' ||
Object.prototype.hasOwnProperty.call(info, 'error')
) {
return null
}
const src = getKernelCapabilityWords(info)
if (!src) return null
const o = /** @type {Record<string, number>} */ ({})
for (const k of BARE_OS_KERNEL_CAPABILITY_WORD_KEYS) {
o[k] = readKernelCapabilityWord(src, k) >>> 0
}
return Object.freeze(o)
}