/** * Seed RPC `bare_os.capabilities` and `/proc/bare_os_features` wire format v2: * all eleven capability masks live under one JSON object `kernelCapabilityWords` * (semantic camelCase keys). Numeric masks and bit positions are unchanged from v1; * only the JSON shape changed. */ export const BARE_OS_KERNEL_CAPABILITY_WIRE_VERSION = 2 /** Top-level key on capabilities / features JSON. */ export const BARE_OS_KERNEL_CAPABILITY_WORDS_JSON_KEY = 'kernelCapabilityWords' export const BARE_OS_KERNEL_CAPABILITY_KEY_PRIMARY = 'primary' export const BARE_OS_KERNEL_CAPABILITY_KEY_EXTENDED_SEEDING_PLATFORM = 'extendedSeedingPlatform' export const BARE_OS_KERNEL_CAPABILITY_KEY_RLIMITS_DELEGATES_SHELL = 'rlimitsDelegatesShell' export const BARE_OS_KERNEL_CAPABILITY_KEY_OFFLINE_NET_EXTENSIONS = 'offlineNetExtensions' export const BARE_OS_KERNEL_CAPABILITY_KEY_HOST_TRANSPORT_DELEGATES = 'hostTransportDelegates' export const BARE_OS_KERNEL_CAPABILITY_KEY_REPLICATION_OPERATOR_SURFACE = 'replicationOperatorSurface' export const BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_CORESTORE_HRPC = 'pearCorestoreHrpc' export const BARE_OS_KERNEL_CAPABILITY_KEY_BARE_RUNTIME_PROTO_MUX = 'bareRuntimeProtoMux' export const BARE_OS_KERNEL_CAPABILITY_KEY_BARE_MODULE_CRYPTO_STAGING = 'bareModuleCryptoStaging' export const BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_INSPECT_LOGGER_TLS = 'pearInspectLoggerTls' export const BARE_OS_KERNEL_CAPABILITY_KEY_HYPERCORE_PACK_HRPC_LIFECYCLE = 'hypercorePackHrpcLifecycle' /** Ordered keys matching stock mask word order (primary → eleventh). */ export const BARE_OS_KERNEL_CAPABILITY_WORD_KEYS = Object.freeze([ 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 ]) /** * @param {number} primary * @param {number} extendedSeedingPlatform * @param {number} rlimitsDelegatesShell * @param {number} offlineNetExtensions * @param {number} hostTransportDelegates * @param {number} replicationOperatorSurface * @param {number} pearCorestoreHrpc * @param {number} bareRuntimeProtoMux * @param {number} bareModuleCryptoStaging * @param {number} pearInspectLoggerTls * @param {number} hypercorePackHrpcLifecycle */ export function buildKernelCapabilityWordsObject( primary, extendedSeedingPlatform, rlimitsDelegatesShell, offlineNetExtensions, hostTransportDelegates, replicationOperatorSurface, pearCorestoreHrpc, bareRuntimeProtoMux, bareModuleCryptoStaging, pearInspectLoggerTls, hypercorePackHrpcLifecycle ) { return Object.freeze({ [BARE_OS_KERNEL_CAPABILITY_KEY_PRIMARY]: primary >>> 0, [BARE_OS_KERNEL_CAPABILITY_KEY_EXTENDED_SEEDING_PLATFORM]: extendedSeedingPlatform >>> 0, [BARE_OS_KERNEL_CAPABILITY_KEY_RLIMITS_DELEGATES_SHELL]: rlimitsDelegatesShell >>> 0, [BARE_OS_KERNEL_CAPABILITY_KEY_OFFLINE_NET_EXTENSIONS]: offlineNetExtensions >>> 0, [BARE_OS_KERNEL_CAPABILITY_KEY_HOST_TRANSPORT_DELEGATES]: hostTransportDelegates >>> 0, [BARE_OS_KERNEL_CAPABILITY_KEY_REPLICATION_OPERATOR_SURFACE]: replicationOperatorSurface >>> 0, [BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_CORESTORE_HRPC]: pearCorestoreHrpc >>> 0, [BARE_OS_KERNEL_CAPABILITY_KEY_BARE_RUNTIME_PROTO_MUX]: bareRuntimeProtoMux >>> 0, [BARE_OS_KERNEL_CAPABILITY_KEY_BARE_MODULE_CRYPTO_STAGING]: bareModuleCryptoStaging >>> 0, [BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_INSPECT_LOGGER_TLS]: pearInspectLoggerTls >>> 0, [BARE_OS_KERNEL_CAPABILITY_KEY_HYPERCORE_PACK_HRPC_LIFECYCLE]: hypercorePackHrpcLifecycle >>> 0 }) } /** * @param {unknown} cap * @returns {Record | null} */ export function getKernelCapabilityWords(cap) { if (!cap || typeof cap !== 'object') return null const raw = /** @type {Record} */ (cap)[ BARE_OS_KERNEL_CAPABILITY_WORDS_JSON_KEY ] if (!raw || typeof raw !== 'object') return null return /** @type {Record} */ (raw) } /** * @param {Record | null | undefined} words * @param {string} key * @returns {number} */ export function readKernelCapabilityWord(words, key) { if (!words || typeof words !== 'object') return 0 const v = words[key] return typeof v === 'number' ? v >>> 0 : 0 }