@metamask/ocap-kernel
Version:
OCap kernel core components
1 lines • 32.1 kB
Source Map (JSON)
{"version":3,"file":"Kernel.mjs","sourceRoot":"","sources":["../src/Kernel.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CapData } from '@endo/marshal';\nimport {\n StreamReadError,\n VatAlreadyExistsError,\n VatDeletedError,\n VatNotFoundError,\n SubclusterNotFoundError,\n} from '@metamask/kernel-errors';\nimport { RpcService } from '@metamask/kernel-rpc-methods';\nimport type { KernelDatabase } from '@metamask/kernel-store';\nimport { delay, stringify } from '@metamask/kernel-utils';\nimport type { JsonRpcCall } from '@metamask/kernel-utils';\nimport { Logger, splitLoggerStream } from '@metamask/logger';\nimport { serializeError } from '@metamask/rpc-errors';\nimport type { DuplexStream } from '@metamask/streams';\nimport { hasProperty } from '@metamask/utils';\nimport type { JsonRpcResponse } from '@metamask/utils';\n\nimport { KernelQueue } from './KernelQueue.ts';\nimport { KernelRouter } from './KernelRouter.ts';\nimport { kernelHandlers } from './rpc/index.ts';\nimport type { PingVatResult } from './rpc/index.ts';\nimport { kslot } from './services/kernel-marshal.ts';\nimport type { SlotValue } from './services/kernel-marshal.ts';\nimport { makeKernelStore } from './store/index.ts';\nimport type { KernelStore } from './store/index.ts';\nimport type {\n VatId,\n KRef,\n VatWorkerService,\n ClusterConfig,\n VatConfig,\n KernelStatus,\n Subcluster,\n} from './types.ts';\nimport { ROOT_OBJECT_VREF, isClusterConfig } from './types.ts';\nimport { Fail } from './utils/assert.ts';\nimport { VatHandle } from './VatHandle.ts';\n\nexport class Kernel {\n /** Command channel from the controlling console/browser extension/test driver */\n readonly #commandStream: DuplexStream<JsonRpcCall, JsonRpcResponse>;\n\n readonly #rpcService: RpcService<typeof kernelHandlers>;\n\n /** Currently running vats, by ID */\n readonly #vats: Map<VatId, VatHandle>;\n\n /** Service to spawn workers (in iframes) for vats to run in */\n readonly #vatWorkerService: VatWorkerService;\n\n /** Storage holding the kernel's own persistent state */\n readonly #kernelStore: KernelStore;\n\n /** Logger for outputting messages (such as errors) to the console */\n readonly #logger: Logger;\n\n /** The kernel's run queue */\n readonly #kernelQueue: KernelQueue;\n\n /** The kernel's router */\n readonly #kernelRouter: KernelRouter;\n\n /**\n * Construct a new kernel instance.\n *\n * @param commandStream - Command channel from whatever external software is driving the kernel.\n * @param vatWorkerService - Service to create a worker in which a new vat can run.\n * @param kernelDatabase - Database holding the kernel's persistent state.\n * @param options - Options for the kernel constructor.\n * @param options.resetStorage - If true, the storage will be cleared.\n * @param options.logger - Optional logger for error and diagnostic output.\n */\n // eslint-disable-next-line no-restricted-syntax\n private constructor(\n commandStream: DuplexStream<JsonRpcCall, JsonRpcResponse>,\n vatWorkerService: VatWorkerService,\n kernelDatabase: KernelDatabase,\n options: {\n resetStorage?: boolean;\n logger?: Logger;\n } = {},\n ) {\n this.#commandStream = commandStream;\n this.#rpcService = new RpcService(kernelHandlers, {});\n this.#vats = new Map();\n this.#vatWorkerService = vatWorkerService;\n this.#logger = options.logger ?? new Logger('ocap-kernel');\n this.#kernelStore = makeKernelStore(kernelDatabase);\n if (options.resetStorage) {\n this.#resetKernelState();\n }\n this.#kernelQueue = new KernelQueue(\n this.#kernelStore,\n this.terminateVat.bind(this),\n );\n this.#kernelRouter = new KernelRouter(\n this.#kernelStore,\n this.#kernelQueue,\n this.#getVat.bind(this),\n );\n harden(this);\n }\n\n /**\n * Create a new kernel instance.\n *\n * @param commandStream - Command channel from whatever external software is driving the kernel.\n * @param vatWorkerService - Service to create a worker in which a new vat can run.\n * @param kernelDatabase - Database holding the kernel's persistent state.\n * @param options - Options for the kernel constructor.\n * @param options.resetStorage - If true, the storage will be cleared.\n * @param options.logger - Optional logger for error and diagnostic output.\n * @returns A promise for the new kernel instance.\n */\n static async make(\n commandStream: DuplexStream<JsonRpcCall, JsonRpcResponse>,\n vatWorkerService: VatWorkerService,\n kernelDatabase: KernelDatabase,\n options: {\n resetStorage?: boolean;\n logger?: Logger;\n } = {},\n ): Promise<Kernel> {\n const kernel = new Kernel(\n commandStream,\n vatWorkerService,\n kernelDatabase,\n options,\n );\n await kernel.#init();\n return kernel;\n }\n\n /**\n * Start the kernel running. Sets it up to actually receive command messages\n * and then begin processing the run queue.\n */\n async #init(): Promise<void> {\n this.#commandStream\n .drain(this.#handleCommandMessage.bind(this))\n .catch((error) => {\n this.#logger.error('Stream read error:', error);\n throw new StreamReadError({ kernelId: 'kernel' }, error);\n });\n const starts: Promise<void>[] = [];\n for (const { vatID, vatConfig } of this.#kernelStore.getAllVatRecords()) {\n starts.push(this.#runVat(vatID, vatConfig));\n }\n await Promise.all(starts);\n this.#kernelQueue\n .run(this.#kernelRouter.deliver.bind(this.#kernelRouter))\n .catch((error) => {\n this.#logger.error('Run loop error:', error);\n throw error;\n });\n }\n\n /**\n * Handle messages received over the command channel.\n *\n * @param message - The message to handle.\n */\n async #handleCommandMessage(message: JsonRpcCall): Promise<void> {\n try {\n this.#rpcService.assertHasMethod(message.method);\n const result = await this.#rpcService.execute(\n message.method,\n message.params,\n );\n if (hasProperty(message, 'id') && typeof message.id === 'string') {\n await this.#commandStream.write({\n id: message.id,\n jsonrpc: '2.0',\n result,\n });\n }\n } catch (error) {\n this.#logger.error('Error executing command', error);\n if (hasProperty(message, 'id') && typeof message.id === 'string') {\n await this.#commandStream.write({\n id: message.id,\n jsonrpc: '2.0',\n error: serializeError(error),\n });\n }\n }\n }\n\n /**\n * Launches a new vat.\n *\n * @param vatConfig - Configuration for the new vat.\n * @param subclusterId - The ID of the subcluster to launch the vat in. Optional.\n * @returns a promise for the KRef of the new vat's root object.\n */\n async #launchVat(vatConfig: VatConfig, subclusterId?: string): Promise<KRef> {\n const vatId = this.#kernelStore.getNextVatId();\n await this.#runVat(vatId, vatConfig);\n this.#kernelStore.initEndpoint(vatId);\n const rootRef = this.#kernelStore.exportFromVat(vatId, ROOT_OBJECT_VREF);\n this.#kernelStore.setVatConfig(vatId, vatConfig);\n if (subclusterId) {\n this.#kernelStore.addSubclusterVat(subclusterId, vatId);\n }\n return rootRef;\n }\n\n /**\n * Start a new or resurrected vat running.\n *\n * @param vatId - The ID of the vat to start.\n * @param vatConfig - Its configuration.\n */\n async #runVat(vatId: VatId, vatConfig: VatConfig): Promise<void> {\n if (this.#vats.has(vatId)) {\n throw new VatAlreadyExistsError(vatId);\n }\n const stream = await this.#vatWorkerService.launch(vatId, vatConfig);\n const { kernelStream: vatStream, loggerStream } = splitLoggerStream(stream);\n const vatLogger = this.#logger.subLogger({ tags: [vatId] });\n vatLogger.injectStream(\n loggerStream as unknown as Parameters<typeof vatLogger.injectStream>[0],\n (error) => this.#logger.error(`Vat ${vatId} error: ${stringify(error)}`),\n );\n const vat = await VatHandle.make({\n vatId,\n vatConfig,\n vatStream,\n kernelStore: this.#kernelStore,\n kernelQueue: this.#kernelQueue,\n logger: vatLogger,\n });\n this.#vats.set(vatId, vat);\n }\n\n /**\n * Send a message from the kernel to an object in a vat.\n *\n * @param target - The object to which the message is directed.\n * @param method - The method to be invoked.\n * @param args - Message arguments.\n *\n * @returns a promise for the (CapData encoded) result of the message invocation.\n */\n async queueMessage(\n target: KRef,\n method: string,\n args: unknown[],\n ): Promise<CapData<KRef>> {\n return this.#kernelQueue.enqueueMessage(target, method, args);\n }\n\n /**\n * Launches a sub-cluster of vats.\n *\n * @param config - Configuration object for sub-cluster.\n * @returns a promise for the (CapData encoded) result of the bootstrap message.\n */\n async launchSubcluster(\n config: ClusterConfig,\n ): Promise<CapData<KRef> | undefined> {\n isClusterConfig(config) || Fail`invalid cluster config`;\n if (!config.vats[config.bootstrap]) {\n Fail`invalid bootstrap vat name ${config.bootstrap}`;\n }\n const subclusterId = this.#kernelStore.addSubcluster(config);\n return this.#launchVatsForSubcluster(subclusterId, config);\n }\n\n /**\n * Terminates a named sub-cluster of vats.\n *\n * @param subclusterId - The id of the subcluster to terminate.\n * @returns A promise that resolves when termination is complete.\n */\n async terminateSubcluster(subclusterId: string): Promise<void> {\n if (!this.#kernelStore.getSubcluster(subclusterId)) {\n throw new SubclusterNotFoundError(subclusterId);\n }\n const vatIdsToTerminate = this.#kernelStore.getSubclusterVats(subclusterId);\n for (const vatId of vatIdsToTerminate.reverse()) {\n await this.terminateVat(vatId);\n this.collectGarbage();\n }\n this.#kernelStore.deleteSubcluster(subclusterId);\n }\n\n /**\n * Reloads a named subcluster by restarting all its vats.\n * This terminates and restarts all vats in the subcluster.\n *\n * @param subclusterId - The id of the subcluster to reload.\n * @returns A promise for an object containing the subcluster.\n * @throws If the subcluster is not found.\n */\n async reloadSubcluster(subclusterId: string): Promise<Subcluster> {\n const subcluster = this.getSubcluster(subclusterId);\n if (!subcluster) {\n throw new SubclusterNotFoundError(subclusterId);\n }\n for (const vatId of subcluster.vats.reverse()) {\n await this.terminateVat(vatId);\n this.collectGarbage();\n }\n const newId = this.#kernelStore.addSubcluster(subcluster.config);\n await this.#launchVatsForSubcluster(newId, subcluster.config);\n const newSubcluster = this.getSubcluster(newId);\n if (!newSubcluster) {\n throw new SubclusterNotFoundError(newId);\n }\n return newSubcluster;\n }\n\n /**\n * Retrieves a subcluster by its ID.\n *\n * @param subclusterId - The id of the subcluster.\n * @returns The subcluster, or undefined if not found.\n */\n getSubcluster(subclusterId: string): Subcluster | undefined {\n return this.#kernelStore.getSubcluster(subclusterId);\n }\n\n /**\n * Gets all subclusters.\n *\n * @returns An array of subcluster information records.\n */\n getSubclusters(): Subcluster[] {\n return this.#kernelStore.getSubclusters();\n }\n\n /**\n * Checks if a vat belongs to a specific subcluster.\n *\n * @param vatId - The ID of the vat to check.\n * @param subclusterId - The ID of the subcluster to check against.\n * @returns True if the vat belongs to the specified subcluster, false otherwise.\n */\n isVatInSubcluster(vatId: VatId, subclusterId: string): boolean {\n return this.#kernelStore.getVatSubcluster(vatId) === subclusterId;\n }\n\n /**\n * Gets all vat IDs that belong to a specific subcluster.\n *\n * @param subclusterId - The ID of the subcluster to get vats for.\n * @returns An array of vat IDs that belong to the specified subcluster.\n */\n getSubclusterVats(subclusterId: string): VatId[] {\n return this.#kernelStore.getSubclusterVats(subclusterId);\n }\n\n /**\n * Launches all vats for a subcluster and sets up their bootstrap connections.\n *\n * @param subclusterId - The ID of the subcluster to launch vats for.\n * @param config - The configuration for the subcluster.\n * @returns A promise for the (CapData encoded) result of the bootstrap message, if any.\n */\n async #launchVatsForSubcluster(\n subclusterId: string,\n config: ClusterConfig,\n ): Promise<CapData<KRef> | undefined> {\n const rootIds: Record<string, KRef> = {};\n const roots: Record<string, SlotValue> = {};\n for (const [vatName, vatConfig] of Object.entries(config.vats)) {\n const rootRef = await this.#launchVat(vatConfig, subclusterId);\n rootIds[vatName] = rootRef;\n roots[vatName] = kslot(rootRef, 'vatRoot');\n }\n const bootstrapRoot = rootIds[config.bootstrap];\n if (bootstrapRoot) {\n return this.queueMessage(bootstrapRoot, 'bootstrap', [roots]);\n }\n return undefined;\n }\n\n /**\n * Restarts a vat.\n *\n * @param vatId - The ID of the vat.\n * @returns A promise for the restarted vat.\n */\n async restartVat(vatId: VatId): Promise<VatHandle> {\n const vat = this.#getVat(vatId);\n if (!vat) {\n throw new VatNotFoundError(vatId);\n }\n const { config } = vat;\n await this.#stopVat(vatId, false);\n await this.#runVat(vatId, config);\n return vat;\n }\n\n /**\n * Stop a vat from running.\n *\n * Note that after this operation, the vat will be in a weird twilight zone\n * between existence and nonexistence, so this operation should only be used\n * as a component of vat restart (which will push it back into existence) or\n * vat termination (which will push it all the way into nonexistence).\n *\n * @param vatId - The ID of the vat.\n * @param terminating - If true, the vat is being killed, if false, it's being\n * restarted.\n * @param reason - If the vat is being terminated, the reason for the termination.\n */\n async #stopVat(\n vatId: VatId,\n terminating: boolean,\n reason?: CapData<KRef>,\n ): Promise<void> {\n const vat = this.#getVat(vatId);\n if (!vat) {\n throw new VatNotFoundError(vatId);\n }\n\n let terminationError: Error | undefined;\n if (reason) {\n terminationError = new Error(`Vat termination: ${reason.body}`);\n } else if (terminating) {\n terminationError = new VatDeletedError(vatId);\n }\n\n await this.#vatWorkerService\n .terminate(vatId, terminationError)\n .catch(this.#logger.error);\n await vat.terminate(terminating, terminationError);\n this.#vats.delete(vatId);\n }\n\n /**\n * Terminate a vat with extreme prejudice.\n *\n * @param vatId - The ID of the vat.\n * @param reason - If the vat is being terminated, the reason for the termination.\n */\n async terminateVat(vatId: VatId, reason?: CapData<KRef>): Promise<void> {\n await this.#stopVat(vatId, true, reason);\n // Mark for deletion (which will happen later, in vat-cleanup events)\n this.#kernelStore.markVatAsTerminated(vatId);\n }\n\n /**\n * Clear the database.\n */\n async clearStorage(): Promise<void> {\n this.#kernelStore.clear();\n }\n\n /**\n * Get a vat.\n *\n * @param vatId - The ID of the vat.\n * @returns the vat's VatHandle.\n */\n #getVat(vatId: VatId): VatHandle {\n const vat = this.#vats.get(vatId);\n if (vat === undefined) {\n throw new VatNotFoundError(vatId);\n }\n return vat;\n }\n\n /**\n * Gets a list of the IDs of all running vats.\n *\n * @returns An array of vat IDs.\n */\n getVatIds(): VatId[] {\n return Array.from(this.#vats.keys());\n }\n\n /**\n * Gets a list of information about all running vats.\n *\n * @returns An array of vat information records.\n */\n getVats(): {\n id: VatId;\n config: VatConfig;\n subclusterId: string;\n }[] {\n return Array.from(this.#vats.values()).map((vat) => {\n const subclusterId = this.#kernelStore.getVatSubcluster(vat.vatId);\n return {\n id: vat.vatId,\n config: vat.config,\n subclusterId,\n };\n });\n }\n\n /**\n * Revoke an exported object. Idempotent. Revoking promises is not supported.\n *\n * @param kref - The KRef of the object to revoke.\n * @throws If the object is a promise.\n */\n revoke(kref: KRef): void {\n this.#kernelStore.revoke(kref);\n }\n\n /**\n * Check if an object is revoked.\n *\n * @param kref - The KRef of the object to check.\n * @returns True if the object is revoked, false otherwise.\n */\n isRevoked(kref: KRef): boolean {\n return this.#kernelStore.isRevoked(kref);\n }\n\n /**\n * Get the current kernel status, defined as the current cluster configuration\n * and a list of all running vats.\n *\n * @returns The current kernel status containing vats and subclusters information.\n */\n getStatus(): KernelStatus {\n return {\n vats: this.getVats(),\n subclusters: this.#kernelStore.getSubclusters(),\n };\n }\n\n /**\n * Reap vats that match the filter.\n *\n * @param filter - A function that returns true if the vat should be reaped.\n */\n reapVats(filter: (vatId: VatId) => boolean = () => true): void {\n for (const vatID of this.getVatIds()) {\n if (filter(vatID)) {\n this.#kernelStore.scheduleReap(vatID);\n }\n }\n }\n\n /**\n * Pin a vat root.\n *\n * @param vatId - The ID of the vat.\n * @returns The KRef of the vat root.\n */\n pinVatRoot(vatId: VatId): KRef {\n const kref = this.#kernelStore.getRootObject(vatId);\n if (!kref) {\n throw new VatNotFoundError(vatId);\n }\n this.#kernelStore.pinObject(kref);\n return kref;\n }\n\n /**\n * Unpin a vat root.\n *\n * @param vatId - The ID of the vat.\n */\n unpinVatRoot(vatId: VatId): void {\n const kref = this.#kernelStore.getRootObject(vatId);\n if (!kref) {\n throw new VatNotFoundError(vatId);\n }\n this.#kernelStore.unpinObject(kref);\n }\n\n /**\n * Ping a vat.\n *\n * @param vatId - The ID of the vat.\n * @returns A promise that resolves to the result of the ping.\n */\n async pingVat(vatId: VatId): Promise<PingVatResult> {\n const vat = this.#getVat(vatId);\n return vat.ping();\n }\n\n /**\n * Reset the kernel state.\n * This is for debugging purposes only.\n */\n #resetKernelState(): void {\n this.#kernelStore.clear();\n this.#kernelStore.reset();\n }\n\n /**\n * Stop all running vats and reset the kernel state.\n * This is for debugging purposes only.\n */\n async reset(): Promise<void> {\n await this.terminateAllVats();\n this.#resetKernelState();\n }\n\n /**\n * Terminate all vats and collect garbage.\n * This is for debugging purposes only.\n */\n async terminateAllVats(): Promise<void> {\n for (const id of this.getVatIds().reverse()) {\n await this.terminateVat(id);\n this.collectGarbage();\n }\n }\n\n /**\n * Terminate all running vats and reload them.\n * This is for debugging purposes only.\n */\n async reload(): Promise<void> {\n const subclusters = this.#kernelStore.getSubclusters();\n await this.terminateAllVats();\n for (const subcluster of subclusters) {\n const newId = this.#kernelStore.addSubcluster(subcluster.config);\n await this.#launchVatsForSubcluster(newId, subcluster.config);\n // Wait for run queue to be empty before proceeding to next subcluster\n await delay(100);\n }\n }\n\n /**\n * Collect garbage.\n * This is for debugging purposes only.\n */\n collectGarbage(): void {\n while (this.#kernelStore.nextTerminatedVatCleanup()) {\n // wait for all vats to be cleaned up\n }\n this.#kernelStore.collectGarbage();\n }\n}\nharden(Kernel);\n"]}