@xyo-network/os-runtime 6.1.1 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/scripts/xyos/index.ts","../../../../src/scripts/xyos/command/config.ts","../../../../src/scripts/xyos/lib/createFromTemplate.ts","../../../../src/scripts/xyos/lib/headless.ts","../../../../src/XyOs.ts","../../../../src/event/bus/Connection.ts","../../../../src/event/bus/EventBus.ts","../../../../src/event/bus/PubSubConnection.ts","../../../../src/event/connections/DappAccessRequest.ts","../../../../src/event/connections/ExposeDappRequest.ts","../../../../src/event/connections/OsPubSubNetworkReady.ts","../../../../src/event/connections/OsSettingsReady.ts","../../../../src/event/connections/OsXyoPublicReady.ts","../../../../src/lib/initializeXns.ts","../../../../src/lib/NameTransforms.ts","../../../../src/loadOsNode.ts","../../../../src/manifest/os-node.manifest.json","../../../../src/registration/DappRegistrationService.ts","../../../../src/intent/Caller.ts","../../../../src/DappCallerBase.ts","../../../../src/system/ManageSystemDapps.ts","../../../../src/OsCallerBase.ts","../../../../src/system/Queries.ts","../../../../src/wallet/DappSeedPhraseRepository.ts","../../../../src/XyOsDapp.ts","../../../../src/manifests/dapp-window.manifest.json","../../../../src/XyOsBase.ts","../../../../src/registration/DappRegistry.ts","../../../../src/registration/ValidateDappAccessDiviner/Config.ts","../../../../src/registration/ValidateDappAccessDiviner/Diviner.ts","../../../../src/models/access/ValidDappAccessInterfaces.ts","../../../../src/signer/Signers.ts","../../../../src/stack/Base.ts","../../../../src/stack/Manager.ts","../../../../src/adapters/OsPubSubBridgeNetwork.ts","../../../../src/adapter/Base.ts","../../../../src/adapter/Network.ts","../../../../src/adapter/Settings.ts","../../../../src/adapters/OsSettings.ts","../../../../src/adapters/OsXyoPublicNetwork.ts","../../../../src/stack/OsPubSubNetworkStack.ts","../../../../src/stack/OsSettingsStack.ts","../../../../src/stack/XyoPublicNetworkStack.ts","../../../../src/stack/Map.ts","../../../../src/scripts/xyos/command/create.ts","../../../../src/scripts/xyos/command/manifest.ts","../../../../src/scripts/xyos/command/start.ts"],"sourcesContent":["import yargs from 'yargs'\n// eslint-disable-next-line import-x/no-internal-modules\nimport { hideBin } from 'yargs/helpers'\n\nimport {\n commandConfig, commandCreate, commandManifest, commandStart,\n} from './command/index.ts'\n\n(\n (\n commandManifest(\n commandConfig(\n commandCreate(\n commandStart(\n yargs(\n hideBin(\n process.argv,\n ),\n ),\n ),\n ),\n ),\n )\n .usage('Usage: $0 <command> [options]')\n .scriptName('xyos')\n .demandCommand(1)\n .parse()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as Promise<any>\n).catch(\n console.error,\n)\n","import type { Argv } from 'yargs'\n\nexport const commandConfig = (argv: Argv) => {\n return argv.command('config [action] <target>', 'Create an xyos project', (yargs) => {\n return yargs\n .positional('action', {\n choices: ['create', 'validate', 'display'],\n description: 'Action to take on config',\n type: 'string',\n })\n .positional('target', {\n description: 'Location of config file',\n type: 'string',\n })\n }, async ({ action, target }) => {\n console.log(`Taking action [${action}] on manifest at ${target}`)\n return await Promise.resolve()\n })\n}\n","export type TemplateName = 'react' | 'headless' | 'dapp' | 'diviner' | 'witness'\n\nexport interface CreateFromTemplateParams {\n target?: string\n template?: TemplateName\n}\n\nexport const createFromTemplate = async ({ target, template }: CreateFromTemplateParams) => {\n console.log('Creating from template', template, 'at', target)\n return await Promise.resolve()\n}\n","import fs from 'node:fs'\n\nimport { boot } from '@xyo-network/bios'\nimport { Kernel } from '@xyo-network/kernel'\nimport type { NativeKernelDrivers } from '@xyo-network/kernel-model'\nimport type { PackageManifest } from '@xyo-network/manifest'\nimport { HDWallet } from '@xyo-network/wallet'\nimport chalk from 'chalk'\nimport { cosmiconfig } from 'cosmiconfig'\nimport { TypeScriptLoader } from 'cosmiconfig-typescript-loader'\nimport tk from 'terminal-kit'\n\nconst { terminal } = tk\n\nimport { XyOs } from '../../../XyOs.ts'\n\nconst terminate = () => {\n terminal.grabInput(false)\n setTimeout(function () {\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(0)\n }, 100)\n}\n\ninterface XyOsConfig {\n developmentMode?: boolean\n manifest?: string | PackageManifest\n}\n\nexport interface HeadlessParams {\n config?: string\n kernelDrivers?: NativeKernelDrivers[]\n manifest?: string\n}\n\nexport const headless = async ({\n manifest, config, kernelDrivers,\n}: HeadlessParams = {}) => {\n console.log(chalk.green('Starting Headless xyOS...'))\n const configExplorer = cosmiconfig('xyos', { cache: true, loaders: { '.ts': TypeScriptLoader() } })\n const configResult = await (config ? configExplorer.load(config) : configExplorer.search())\n const xyosConfig: XyOsConfig = (configResult?.config ?? {}) as XyOsConfig\n const manifestToLoad: string | undefined = manifest ?? (typeof xyosConfig.manifest === 'string' ? xyosConfig.manifest : undefined)\n const manifestObject: PackageManifest | undefined = manifestToLoad\n ? JSON.parse(fs.readFileSync(manifestToLoad, 'utf8')) as PackageManifest\n : typeof xyosConfig.manifest === 'object' ? xyosConfig.manifest : undefined\n\n const osWallet = await HDWallet.random()\n const kernel = new Kernel({ logColor: 'cyan', logger: console })\n await kernel.boot(await boot(), { kernelDrivers })\n const xyOs = new XyOs({\n kernel,\n stackMap: {},\n manifest: manifestObject,\n developmentMode: xyosConfig.developmentMode,\n })\n await xyOs.boot(osWallet)\n console.log(chalk.green('Started Headless xyOS...'))\n\n terminal.grabInput({ mouse: 'button' })\n\n terminal.on('key', function (name: string) {\n console.log(\"'key' event:\", name)\n if (name === 'CTRL_C') {\n terminate()\n }\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Promisable } from '@xylabs/promise'\nimport { boot } from '@xyo-network/bios'\nimport { Kernel } from '@xyo-network/kernel'\nimport type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { PackageManifest } from '@xyo-network/manifest'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { ModuleFactoryLocatorInstance } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type {\n DappId,\n DappPackageManifestPayload,\n DappParams,\n SignersExternal,\n StackInitializer,\n XyOsContext,\n XyOsDappContext,\n XyOsGlobal,\n} from '@xyo-network/os-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { EventBus } from './event/index.ts'\nimport type { MonitorEventConfig, XyOsMonitor } from './helpers/index.ts'\nimport { NameTransforms } from './lib/index.ts'\nimport { loadOsNode } from './loadOsNode.ts'\nimport type { DappRegistrationServiceParams } from './registration/index.ts'\nimport { DappRegistrationService } from './registration/index.ts'\nimport { Signers } from './signer/index.ts'\nimport type { OsPubSubNetworkStack, UninitializedStackMap } from './stack/index.ts'\nimport { OsStackMap, StackManager } from './stack/index.ts'\nimport type { XyOsContextParams } from './XyOsBase.ts'\nimport { XyOsContextBase } from './XyOsBase.ts'\n\nexport interface XyOsParams<TManifest extends PackageManifest = PackageManifest> extends XyOsContextParams<TManifest> {\n dappsConfiguration?: DappRegistrationServiceParams\n developmentMode?: boolean\n kernel?: XyOsContext['kernel']\n stackMap?: UninitializedStackMap\n}\n\nexport class XyOs extends XyOsContextBase<XyOsParams> implements XyOsContext {\n protected _exposedNode: NodeInstance | undefined\n protected _exposedNodeOuter: NodeInstance | undefined\n protected _kernel: KernelExternal\n protected _locator: ModuleFactoryLocator\n protected dappRegistrationService: DappRegistrationService\n protected signers: SignersExternal | undefined\n private stackManager: StackManager\n\n constructor({\n logger = console,\n eventBus = new EventBus(),\n kernel = new Kernel({ logger }),\n locator = new ModuleFactoryLocator(),\n dappsConfiguration,\n developmentMode,\n stackMap = OsStackMap,\n ...params\n }: XyOsParams = {}) {\n super({\n eventBus, kernel, locator, ...params,\n })\n this._locator = locator\n this._kernel = kernel\n this.stackManager = new StackManager(stackMap)\n this.dappRegistrationService = new DappRegistrationService(this, dappsConfiguration, this.locator, developmentMode)\n if (this.signerPaths && this.kernel?.bios?.seedPhraseStore) this.signers = new Signers(this.signerPaths, this.kernel?.bios?.seedPhraseStore)\n }\n\n static get monitoring(): XyOsMonitor | undefined {\n return\n }\n\n static get xyOsGlobal(): XyOsGlobal {\n return getXyOsGlobal()\n }\n\n override get bios(): KernelExternal['bios'] | undefined {\n return assertEx(this.params.kernel?.bios, () => 'Missing bios')\n }\n\n override get exposedNode() {\n return this.stackManager.getStack<OsPubSubNetworkStack>('osPubSubNetworkStack')?.exposedNode\n }\n\n override get exposedNodeOuter() {\n return this.stackManager.getStack<OsPubSubNetworkStack>('osPubSubNetworkStack')?.exposedNodeOuter\n }\n\n override get kernel(): XyOsContext['kernel'] | undefined {\n return assertEx(this.params.kernel, () => 'Missing kernel')\n }\n\n get locator() {\n return this._locator\n }\n\n get stacks() {\n return this.stackManager.stacks\n }\n\n override get user() {\n return { signers: this.signers?.getWalletKindSigner('user') }\n }\n\n static async monitor<T>(fn: () => Promise<T>, eventConfig: MonitorEventConfig): Promise<T> {\n const { name, additionalProperties } = eventConfig\n const monitor = this.monitoring\n monitor?.startTimer(name)\n const result = await fn()\n monitor?.stopTimer({ additionalProperties, name })\n\n return result\n }\n\n override async boot(wallet: WalletInstance, locator: ModuleFactoryLocatorInstance = new ModuleFactoryLocator()) {\n console.warn('XyOs:boot', wallet.address)\n const fullLocator = this._locator.merge(locator)\n return await this._bootMutex.runExclusive(async () => {\n await this.eventBus.start()\n if (this.kernel?.status === 'created') {\n await this.kernel.boot(await boot(), { locator: fullLocator, kernelDrivers: [] })\n }\n if (this.kernel?.status !== 'booted') {\n throw new Error('Kernel not booted')\n }\n assertEx(this._root === undefined, () => 'XyOs already booted')\n const [root] = await XyOs.monitor(async () => await loadOsNode(wallet, fullLocator), { name: 'Load XyOs' })\n this._root = root\n\n this.stackManager.initialize(this)\n if (this.signers) await this.signers.initialize()\n return this\n })\n }\n\n override buildDapp(\n manifest: DappPackageManifestPayload,\n dappId = NameTransforms.slug(manifest.nodes[0]?.config.name),\n name = NameTransforms.moduleName(manifest.nodes[0]?.config.name),\n ): Promisable<XyOsDappContext> {\n return this.dappRegistrationService.buildDapp(manifest, dappId, name)\n }\n\n override dappByName(dappId: DappId): Promisable<XyOsDappContext | undefined> {\n return this.dappRegistrationService.builtDapps[dappId]\n }\n\n override getDappParams(dappId: DappId): DappParams {\n return this.dappRegistrationService.getParamsForRegisteredDapp(dappId)\n }\n\n override getStack(stackName: string): StackInitializer {\n return assertEx(this.stackManager.getStack(stackName), () => `Stack not found: ${stackName}`)\n }\n\n override async monitor<T>(fn: () => Promise<T>, eventConfig: MonitorEventConfig): Promise<T> {\n return await XyOs.monitor<T>(fn, eventConfig)\n }\n\n override shutdown() {\n assertEx(this._root !== undefined, () => 'XyOs not booted')\n this._root = undefined\n this.stackManager.stop()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport type { EventData } from '@xylabs/events'\nimport { BaseEmitter } from '@xylabs/events'\nimport type {\n EventBusConnectionInterface, EventBusConnectionRequest, EventBusConnectionType,\n} from '@xyo-network/os-model'\n\n/**\n * A Generic Connection to add to an EventBus\n * @param {EventBusConnectionRequest} request\n */\nexport class EventBusConnection<TEventData extends EventData = EventData>\n extends BaseEmitter<BaseParams, TEventData>\n implements EventBusConnectionInterface<TEventData> {\n _id?: string\n description?: string\n type: EventBusConnectionType\n\n constructor(request: EventBusConnectionRequest) {\n super({})\n this.description = request.description\n this.type = request.type\n }\n\n get id() {\n return assertEx(this._id, () => 'Connection ID not set. Did you forget to call buildConnection()?')\n }\n\n buildConnection(id: string) {\n this._id = id\n }\n}\n","import { findAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport type { ArchivistModuleEventData } from '@xyo-network/archivist'\nimport { asArchivistInstance } from '@xyo-network/archivist'\nimport { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'\nimport type {\n EventBusConnectionInterface,\n EventBusEvent,\n EventBusInterface,\n EventBusPubSubConnectionInterface,\n PublisherEventListener,\n} from '@xyo-network/os-model'\nimport {\n asOptionalEventBusEvent,\n isPubSubConnections,\n} from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Mutex } from 'async-mutex'\nimport { v4 as uuid } from 'uuid'\n\n/**\n * Event Bus implementation inspired by the DBus protocol used in Linux desktop systems for inter-process communication.\n *\n * General flow:\n * 1. Connection Added\n * 2. Publisher and Subscriber Callbacks added\n * 3. Events occurs and stored internally\n * 4. Subscriber Callbacks called based off stored events\n */\nexport class EventBus implements EventBusInterface {\n // Internal Archivist to store event data\n private _archivist: MemoryArchivist | undefined\n\n // Store all connections\n private connections: Record<string, EventBusConnectionInterface> = {}\n\n // Store all publisher callbacks for later removal\n private publisherCallbacks: Record<string, PublisherEventListener> = {}\n\n private startMutex = new Mutex()\n\n get archivist() {\n return asArchivistInstance(\n assertEx(this._archivist, () => 'Archivist not found. Did you forget to call start()?'),\n 'not a valid archivist instance',\n { required: true },\n )\n }\n\n addConnection(connection: EventBusConnectionInterface) {\n // unique connection id\n const id = uuid()\n\n // store in local cache\n this.connections[id] = connection\n\n // update the connection id with the generated id\n connection.buildConnection(id)\n\n // let existing connections know about newly published events\n if (isPubSubConnections(connection)) {\n this.handlePublisherAdd(connection)\n } else {\n throw new Error('Unsupported connection type. Must be PubSub')\n }\n return connection\n }\n\n removeConnection(connectionId: string) {\n // find the existing connection\n const connection = this.connections[connectionId]\n if (!connection) {\n throw new Error('Connection not found ' + connectionId)\n }\n\n if (connection && isPubSubConnections(connection)) {\n this.handlePublisherRemove(connection)\n }\n\n delete this.connections[connectionId]\n }\n\n async start(storeName = 'EventBusArchivist') {\n return await this.startMutex.runExclusive(async () => {\n if (this._archivist) {\n console.warn('EventBus already started')\n return this\n }\n // Later versions could include a node that has a payload diviner to query past events\n this._archivist = await MemoryArchivist.create({ config: { name: storeName, schema: MemoryArchivistConfigSchema } })\n\n // start listening to inserted events from publishers\n // NOTE: This is a very basic implementation and could be optimized by indexing on connection, eventName, and callback\n // for faster lookups by event name\n this.archivist.on('inserted', ({ payloads }: ArchivistModuleEventData['inserted']) => {\n // confirm an eventBusPayload was inserted\n const eventBusEvent = findAs(payloads, asOptionalEventBusEvent)\n // if not an eventBusPayload, return\n if (!eventBusEvent) return\n // Loop through all connections\n for (const connectionId in this.connections) {\n const connection = this.connections[connectionId]\n // Target PubSub connections\n if (isPubSubConnections(connection) && connection.subscribableEvents) {\n // Loop through all subscribable events\n for (const [eventName, callback] of connection.subscribableEvents.entries()) {\n // check if the event name matches the payload name\n if (eventName !== eventBusEvent.name) continue\n // pass the event payloads to the callback\n if (callback) {\n const forgettable = async () => await callback({ payloads })\n forget(forgettable())\n }\n }\n }\n }\n })\n return this\n })\n }\n\n private handlePublisherAdd(connection: EventBusPubSubConnectionInterface) {\n // Loop through all publishable events\n for (const eventName of connection.publishableEvents ?? []) {\n // Create publisher callback\n const connectionPublisherCallback: PublisherEventListener = async ({ payloads }) => {\n // build the event payload\n const event: EventBusEvent = { name: eventName, schema: 'network.xyo.event.bus.event' }\n const eventPayloads = payloads ?? []\n event.sources = await PayloadBuilder.dataHashes(eventPayloads)\n // Sync events to archivist\n try {\n await this.archivist.insert([event, ...(payloads ?? [])])\n } catch (e) {\n console.error('Error inserting event into archivist', e)\n }\n }\n // Subscribe the publisher callback to the connection\n connection.on(eventName, connectionPublisherCallback)\n\n // store the publisher callback for later removal\n const callbackId = connection.id + eventName\n this.publisherCallbacks[callbackId] = connectionPublisherCallback\n }\n }\n\n private handlePublisherRemove(connection: EventBusPubSubConnectionInterface) {\n // Loop through all publishable events\n for (const [, event] of connection.publishableEvents?.entries() ?? []) {\n // find the publisher callback\n const id = connection.id + event\n const callback = this.publisherCallbacks[id]\n\n // unsubscribe the publisher callback from the connection\n if (callback) connection.off(event, callback)\n }\n }\n}\n","import type {\n EventBusPubSubConnectionInterface,\n EventBusPubSubConnectionRequest,\n PublisherEventListenerEventData,\n SubscribableEventListeners,\n} from '@xyo-network/os-model'\n\nimport { EventBusConnection } from './Connection.ts'\n\n/**\n * A PubSub Connection to add to an EventBus\n * @param {EventBusPubSubConnectionRequest} request\n */\nexport class EventBusPubSubConnection<TPublisherEventData extends PublisherEventListenerEventData = PublisherEventListenerEventData>\n extends EventBusConnection<TPublisherEventData>\n implements EventBusPubSubConnectionInterface {\n publishableEvents?: string[]\n subscribableEvents?: SubscribableEventListeners\n\n constructor(request: EventBusPubSubConnectionRequest) {\n super(request)\n if (request.type !== 'PubSub') {\n throw new Error('Invalid connection type. Must be PubSub')\n }\n this.publishableEvents = request.publishableEvents\n this.subscribableEvents = request.subscribableEvents\n }\n}\n","import type { EventBusPubSubConnectionRequest } from '@xyo-network/os-model'\n\nimport { EventBusPubSubConnection } from '../bus/index.ts'\n\nexport const DappAccessRequestEvent = 'dappAccessRequest'\n\nconst dappAccessRequestConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: [DappAccessRequestEvent],\n type: 'PubSub',\n}\nexport const dappAccessRequestConnection = () => new EventBusPubSubConnection(dappAccessRequestConnectionRequest)\n","import type { EventBusPubSubConnectionRequest } from '@xyo-network/os-model'\n\nimport { EventBusPubSubConnection } from '../bus/index.ts'\n\nexport const ExposeDappRequestEvent = 'exposeDappRequest'\n\nconst exposeDappConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: [ExposeDappRequestEvent],\n type: 'PubSub',\n}\nexport const exposeDappRequestConnection = () => new EventBusPubSubConnection(exposeDappConnectionRequest)\n","import type { EventBusPubSubConnectionRequest } from '@xyo-network/os-model'\n\nimport { EventBusPubSubConnection } from '../bus/index.ts'\n\nexport const OsPubSubNetworkReadyEvent = 'osPubSubNetworkReady'\n\nconst osPubSubNetworkConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: [OsPubSubNetworkReadyEvent],\n type: 'PubSub',\n}\n\nexport const osPubSubNetworkReadyConnection = () => new EventBusPubSubConnection(osPubSubNetworkConnectionRequest)\n","import type { EventBusPubSubConnectionRequest } from '@xyo-network/os-model'\n\nimport { EventBusPubSubConnection } from '../bus/index.ts'\n\nexport const OsSettingsReadyEvent = 'osSettingsReady'\n\nconst osSettingsConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: [OsSettingsReadyEvent],\n type: 'PubSub',\n}\n\nexport const osSettingsReadyConnection = () => new EventBusPubSubConnection(osSettingsConnectionRequest)\n","import type { EventBusPubSubConnectionRequest } from '@xyo-network/os-model'\n\nimport { EventBusPubSubConnection } from '../bus/index.ts'\n\nexport const OsXyoPublicNetworkReadyEvent = 'osXyoPublicNetworkReady'\n\nconst osXyoPublicNetworkConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: [OsXyoPublicNetworkReadyEvent],\n type: 'PubSub',\n}\n\nexport const osXyoPublicNetworkReadyConnection = () => new EventBusPubSubConnection(osXyoPublicNetworkConnectionRequest)\n","import { asDivinerInstance } from '@xyo-network/diviner-model'\nimport { ResolveHelper } from '@xyo-network/module-model'\nimport { NameRegistrarTransformer } from '@xyo-network/module-resolver'\nimport type { NodeInstance } from '@xyo-network/node-model'\n\nexport const initializeXns = async (xnsNode: NodeInstance) => {\n if (ResolveHelper.transformers.length === 0) {\n const registrarDiviner = asDivinerInstance(await xnsNode?.resolve('AddressRecords:AddressRecordIndexDiviner'))\n if (registrarDiviner) {\n const transformer = new NameRegistrarTransformer(registrarDiviner, 'xyo')\n ResolveHelper.transformers = [transformer]\n return true\n }\n }\n return false\n}\n","export class NameTransforms {\n constructor(private value: string) {}\n\n static deSlug(value: string) {\n return value\n .replaceAll('-', ' ')\n .split(' ')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n }\n\n static moduleName(value: string) {\n return value.replaceAll(' ', '')\n }\n\n static slug(value: string) {\n return value.replaceAll(' ', '-').toLocaleLowerCase()\n }\n\n deSlug() {\n return NameTransforms.deSlug(this.value)\n }\n\n moduleName() {\n return NameTransforms.moduleName(this.value)\n }\n\n slug() {\n return NameTransforms.slug(this.value)\n }\n}\n","import { IndexedDbArchivist } from '@xyo-network/archivist-indexeddb'\nimport { IndexedDbPayloadDiviner } from '@xyo-network/diviner-payload-indexeddb'\nimport type { PackageManifestPayload } from '@xyo-network/manifest'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { ModuleFactoryLocatorInstance } from '@xyo-network/module-model'\nimport type { AttachableNodeInstance } from '@xyo-network/node-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { osNodeManifest } from './manifest/index.ts'\n\n// NOTE: Path \"0'\" is reserved for the exposed node in the kernel\nconst OS_NODE_PATH = \"1'\"\n\nconst getDefaultOsNodeLocator = (): ModuleFactoryLocator => {\n const locator = new ModuleFactoryLocator()\n locator.register(IndexedDbArchivist.factory(), { 'network.xyo.archivist.persistence.scope': 'device' })\n locator.register(IndexedDbPayloadDiviner.factory(), { 'network.xyo.archivist.persistence.scope': 'device' })\n return locator\n}\n\nexport const loadOsNode = async (\n osWallet: WalletInstance,\n locator?: ModuleFactoryLocatorInstance,\n): Promise<[AttachableNodeInstance]> => {\n try {\n // Create wallets for the OS & kernel nodes\n const osNodeWallet = await osWallet.derivePath(OS_NODE_PATH)\n\n // Create the OS node manifest\n const osNodeLocator: ModuleFactoryLocatorInstance = locator ?? getDefaultOsNodeLocator()\n const manifestWrapper = new ManifestWrapper(osNodeManifest as PackageManifestPayload, osNodeWallet, osNodeLocator)\n\n // Create the OS & kernel nodes\n const osNode = (await manifestWrapper.loadNodes())[0]\n\n return [osNode]\n } catch (e) {\n const error = e as Error\n console.error(`Error creating os node: ${error.message}`)\n console.error(`Error creating os node: ${error.stack}`)\n throw new Error(`Error creating os node: ${error.message}`)\n }\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/compilations/dapp-package-manifest-schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"0'\",\n \"name\": \"OsNode\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1'\",\n \"name\": \"OSArchivist\",\n \"dbName\": \"OSArchivist-2025-01-13\",\n \"labels\": {\n \"network.xyo.archivist.persistence.scope\": \"device\"\n },\n \"storeName\": \"payloads\",\n \"parents\": {\n \"read\": [\n \"Archivist\"\n ]\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"3'\",\n \"name\": \"DappsArchivist\",\n \"dbName\": \"DappsArchivist-2025-01-13\",\n \"labels\": {\n \"network.xyo.archivist.persistence.scope\": \"device\"\n },\n \"storeName\": \"payloads\",\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"archivist\": \"DappsArchivist\",\n \"dbVersion\": 1,\n \"name\": \"DappsArchivistPayloadDiviner\",\n \"labels\": {\n \"network.xyo.archivist.persistence.scope\": \"device\"\n },\n \"schema\": \"network.xyo.diviner.payload.generic.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"4'\",\n \"dbName\": \"IntentArchivist-2025-01-13\",\n \"name\": \"IntentArchivist\",\n \"storeName\": \"payloads\",\n \"labels\": {\n \"network.xyo.archivist.persistence.scope\": \"device\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"7\",\n \"archivist\": \"IntentArchivist\",\n \"dbVersion\": 1,\n \"name\": \"IntentArchivistPayloadDiviner\",\n \"labels\": {\n \"network.xyo.archivist.persistence.scope\": \"device\"\n },\n \"schema\": \"network.xyo.diviner.payload.generic.config\",\n \"storeName\": \"payloads\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"8\",\n \"name\": \"RegisteredDappInterfacesArchivist\",\n \"schema\": \"network.xyo.archivist.memory.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"9'\",\n \"name\": \"DappsArchivistDevelopment\",\n \"parents\": {\n \"write\": [\n \"DappsArchivist\"\n ]\n },\n \"schema\": \"network.xyo.archivist.memory.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"10\",\n \"archivist\": \"DappsArchivistDevelopment\",\n \"dbVersion\": 1,\n \"name\": \"DappsArchivistPayloadDivinerDevelopment\",\n \"labels\": {\n \"network.xyo.generic.payload.diviner\": \"GenericPayloadDiviner\"\n },\n \"schema\": \"network.xyo.diviner.payload.generic.config\"\n }\n },\n {\n \"config\": {\n \"name\": \"OsPubSubNetworkStackNode\",\n \"schema\": \"network.xyo.node.config\"\n }\n },\n {\n \"config\": {\n \"name\": \"OsSettingsStackNode\",\n \"schema\": \"network.xyo.node.config\"\n }\n },\n {\n \"config\": {\n \"name\": \"OsXyoPublicNetworkStackNode\",\n \"schema\": \"network.xyo.node.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest.package.dapp\"\n}","import { forget } from '@xylabs/forget'\nimport type { Promisable } from '@xylabs/promise'\nimport { fulfilled, rejected } from '@xylabs/promise'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type {\n DappPackageManifestPayload,\n DappParams,\n DappRegistrationResults,\n PayloadWithVersion,\n RegisteredDappSetResult,\n XyOsContext,\n XyOsDappContext,\n} from '@xyo-network/os-model'\nimport {\n DappIntentTypes,\n DappMode,\n isRegisteredDappAccessDappSet,\n isRegisteredDappExposedDappSet,\n} from '@xyo-network/os-model'\n\nimport {\n dappAccessRequestConnection, DappAccessRequestEvent, exposeDappRequestConnection, ExposeDappRequestEvent,\n} from '../event/index.ts'\nimport { DappIntentCaller } from '../intent/index.ts'\nimport { NameTransforms } from '../lib/index.ts'\nimport { ManageSystemDapps } from '../system/index.ts'\nimport { DappSeedPhraseRepository } from '../wallet/index.ts'\nimport { XyOsDapp } from '../XyOsDapp.ts'\nimport { DappRegistry } from './DappRegistry.ts'\n\nexport interface DappRegistrationServiceParams {\n dappNames: string[]\n dappParams: Record<string, DappParams>\n dappPayloads: PayloadWithVersion[]\n}\n\nexport class DappRegistrationService {\n // Dapps that have been built with their own context\n builtDapps: Record<string, XyOsDappContext> = {}\n\n dappRegistry: DappRegistry\n dappSeedPhraseRepository: DappSeedPhraseRepository\n manageSystemDapps: ManageSystemDapps\n\n // Dapps that have been registered with dappAccessRequests\n registeredAccessDappSets: Set<RegisteredDappSetResult> = new Set()\n\n // Dapps that have been registered with the dapp registry\n registeredDappSets: Set<RegisteredDappSetResult> = new Set()\n\n // Dapps that have been registered with exposeDappRequests\n registeredExposedDappSets: Set<RegisteredDappSetResult> = new Set()\n\n private dappAccessRequestConnection = dappAccessRequestConnection()\n private exposeDappRequestConnection = exposeDappRequestConnection()\n\n constructor(\n private context: XyOsContext,\n private params: DappRegistrationServiceParams = {\n dappNames: [], dappParams: {}, dappPayloads: [],\n },\n private locator = new ModuleFactoryLocator(),\n private developmentMode?: boolean,\n ) {\n this.manageSystemDapps = new ManageSystemDapps(\n context,\n this.params?.dappNames ?? [],\n this.params?.dappPayloads ?? [],\n this.params?.dappParams ?? {},\n this.locator,\n this.developmentMode,\n )\n this.dappSeedPhraseRepository = new DappSeedPhraseRepository(context, this.params?.dappNames ?? [])\n this.dappRegistry = new DappRegistry(this.dappSeedPhraseRepository)\n\n this.addConnectionRequests()\n }\n\n async buildDapp(\n manifest: DappPackageManifestPayload,\n dappId = NameTransforms.slug(manifest.nodes[0]?.config.name),\n name = NameTransforms.moduleName(manifest.nodes[0]?.config.name),\n ): Promise<XyOsDappContext> {\n const dapp = new XyOsDapp({\n dapp: { id: dappId, name },\n locator: this.locator,\n manifest,\n parent: this.context,\n user: await this.getUser(),\n }) as XyOsDappContext\n this.builtDapps[dappId] = dapp\n return dapp\n }\n\n getParamsForRegisteredDapp(dappId: string) {\n return this.params?.dappParams[dappId]\n }\n\n async start(): Promise<DappRegistrationResults> {\n const systemDapps = await this.context.monitor(async () => await this.manageSystemDapps.install(), { name: 'Install System dApps' })\n const activeDapps = systemDapps.filter(({ dapp }) => dapp.icon.active === true)\n const results = await Promise.allSettled(\n activeDapps.map(async (dappSet) => {\n const { dapp } = dappSet\n const registeredDapp = await this.dappRegistry.registerDapp(dapp)\n const result: RegisteredDappSetResult = { dapp: registeredDapp, dappIcon: dapp.icon }\n\n // Start post registration process in the background\n const forgetHandlers = async () => {\n try {\n await this.postRegistrationHandlers(result)\n } catch (e) {\n console.error('Error in post registration handlers', e)\n }\n }\n forget(forgetHandlers())\n\n return result\n }),\n )\n const failed = results.filter(rejected).map(result => result.reason)\n const succeeded = results.filter(fulfilled).map(result => result.value)\n\n for (const registeredDapp of succeeded) this.registeredDappSets.add(registeredDapp)\n\n return { failed, succeeded }\n }\n\n private addConnectionRequests() {\n this.context.eventBus.addConnection(this.dappAccessRequestConnection)\n this.context.eventBus.addConnection(this.exposeDappRequestConnection)\n }\n\n /**\n * A method to get the user property from context and eventually modify it before handing it to a dapp\n * i.e. curating user-approved signers\n */\n private getUser(): Promisable<XyOsContext['user']> {\n return this.context.user\n }\n\n private async postRegistrationHandlers(registeredDapp: RegisteredDappSetResult) {\n if (registeredDapp.dapp) {\n if (isRegisteredDappExposedDappSet(registeredDapp)) {\n // add to exposed dapp set\n this.registeredExposedDappSets.add(registeredDapp)\n // craft intent\n const exposeIntent = DappIntentCaller.buildIntent(\n DappIntentCaller.OsDappName,\n DappIntentTypes.Launch,\n registeredDapp.dapp.config.name,\n DappMode.Exposed,\n )\n // emit to bus\n await this.exposeDappRequestConnection.emit(ExposeDappRequestEvent, { payloads: [registeredDapp.dapp.config, exposeIntent] })\n }\n if (isRegisteredDappAccessDappSet(registeredDapp)) {\n // add to access dapp set\n this.registeredAccessDappSets.add(registeredDapp)\n // emit to bus\n await this.dappAccessRequestConnection.emit(DappAccessRequestEvent, { payloads: registeredDapp.dapp.accessors })\n }\n }\n }\n}\n","import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappId, DappIntent, DappIntentTypes, XyOsContext,\n} from '@xyo-network/os-model'\nimport { DappIntentSchema, DappMode } from '@xyo-network/os-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\n\nimport { DappCallerBase } from '../DappCallerBase.ts'\n\nexport class DappIntentCaller extends DappCallerBase {\n static OsDappName = 'XyOs'\n constructor(context: XyOsContext) {\n super(context)\n }\n\n /**\n * Build a new intent\n * @param {DappId} sourceDappId\n * @param {DappIntentTypes} intent\n * @param {DappId} targetDappId\n * @param {DappMode} targetMode\n * @param {DappIntent['params']} params?\n * @returns DappIntent\n */\n static buildIntent(\n sourceDappId: DappId,\n intent: DappIntentTypes,\n targetDappId?: DappId,\n targetMode: DappMode = DappMode.Window,\n params?: DappIntent['params'],\n ): DappIntent {\n return {\n intent,\n params: params || '',\n schema: DappIntentSchema,\n sourceDappId,\n targetDappId,\n targetMode: targetMode || DappMode.Window,\n timestamp: Date.now(),\n }\n }\n\n // Add a new intent\n async addIntent(id: DappId, intent: DappIntentTypes, mode: DappMode) {\n const intentArchivist = await this.getDappIntentArchivist()\n const newIntent = DappIntentCaller.buildIntent(id, intent, mode)\n await intentArchivist.insert([newIntent])\n }\n\n // Get all intents\n async allIntents() {\n const archivist = await this.getDappIntentArchivist()\n return await archivist.all()\n }\n\n // Get the latest intent saved to the archivist\n async latestIntent() {\n const archivist = await this.getDappIntentArchivist()\n return (await archivist.all()).at(-1) as WithStorageMeta<DappIntent>\n }\n\n // Get the latest intent for a dapp\n async latestIntentForDappName(dappName: DappId) {\n const diviner = await this.getDappIntentArchivistPayloadDiviner()\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n sourceDappId: dappName,\n }\n\n return (await diviner.divine([query])) as DappIntent[]\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { toSafeJsonString } from '@xylabs/object'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport type { XyOsContext } from '@xyo-network/os-model'\n\nexport const DappArchivistModuleName = 'DappArchivist'\nexport const IntentArchivistModuleName = 'IntentArchivist'\nexport const IntentArchivistPayloadDivinerModuleName = 'IntentArchivistPayloadDiviner'\nexport const DappArchivistPayloadDivinerModuleName = 'DappArchivistPayloadDiviner'\n\nexport class DappCallerBase {\n constructor(protected context: XyOsContext) {}\n /**\n * Get the DappArchivist\n */\n async getDappArchivist() {\n const mod = assertEx(\n await this.context.root.resolve(DappArchivistModuleName),\n () => `${DappArchivistModuleName} not found [${toSafeJsonString(this.context.root.publicChildren())}]`,\n )\n return asArchivistInstance(mod, () => `${DappArchivistModuleName} is not an archivist`, { required: true })\n }\n\n /**\n * Get the DappArchivistPayloadDiviner\n */\n async getDappArchivistPayloadDiviner() {\n const mod = assertEx(\n await this.context.root.resolve(DappArchivistPayloadDivinerModuleName),\n () => `${DappArchivistPayloadDivinerModuleName} not found`,\n )\n return asDivinerInstance(mod, () => `${DappArchivistPayloadDivinerModuleName} is not a diviner`, { required: true })\n }\n\n /**\n * Get the IntentArchivist\n */\n async getDappIntentArchivist() {\n const mod = assertEx(await this.context.root.resolve(IntentArchivistModuleName), () => `${IntentArchivistModuleName} not found`)\n return asArchivistInstance(mod, () => `${IntentArchivistModuleName} is not an archivist`, { required: true })\n }\n\n // Get the IntentArchivistPayloadDiviner\n async getDappIntentArchivistPayloadDiviner() {\n const mod = assertEx(\n await this.context.root.resolve(IntentArchivistPayloadDivinerModuleName),\n () => `${IntentArchivistPayloadDivinerModuleName} not found`,\n )\n return asDivinerInstance(mod, () => `${IntentArchivistPayloadDivinerModuleName} is not a diviner`, { required: true })\n }\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type {\n DappConfig, DappIcon, DappParams, DappSet, PayloadWithVersion, XyOsContext,\n} from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport semver from 'semver'\n\nimport { OsCallerBase } from '../OsCallerBase.ts'\nimport { SystemDappQueries } from './Queries.ts'\n\nexport type ErrorListener = (failedPayloads: DappConfig[]) => void\nexport type DappSetsAndPayloads = {\n dappPayloads: (DappConfig | DappIcon)[]\n dappSets: DappSet[]\n}\n\n/**\n * Manage the installation of system dapps from payloads and return the built sets\n */\nexport class ManageSystemDapps extends OsCallerBase {\n private onErrorCallbacks: ErrorListener[] = []\n\n constructor(\n context: XyOsContext,\n private defaultSystemNames: string[],\n private defaultSystemDapps: PayloadWithVersion[],\n private defaultSystemDappParams: Record<string, DappParams>,\n private locator?: ModuleFactoryLocator,\n private developmentMode?: boolean,\n ) {\n super(context)\n }\n\n /**\n * Add a callback to listen for errors throwing during system dapp registration\n * @param {ErrorListener} errorListener\n */\n addErrorListener(errorListener: ErrorListener) {\n this.onErrorCallbacks.push(errorListener)\n }\n\n /**\n * Installs the dapps into the OS and builds the appropriate DappSet\n */\n async install(): Promise<DappSet[]> {\n await this.insertPayloads()\n return await this.latestSets()\n }\n\n private async freshInstall(archivist: ArchivistInstance): Promise<void> {\n await archivist.insert(this.defaultSystemDapps)\n }\n\n private async insertPayloads(): Promise<boolean> {\n const archivist = this.developmentMode ? await this.getDappsArchivistDevelopment() : await this.getDappsArchivist()\n try {\n const allPayloads = (await archivist.all()) as WithStorageMeta<(DappIcon | DappConfig)>[]\n if (allPayloads.length === 0) {\n await this.freshInstall(archivist)\n return true\n }\n\n // only insert unseen system dapp payloads\n for (const systemDappPayload of this.defaultSystemDapps) {\n try {\n const validSemver = semver.valid(systemDappPayload.version)\n if (!validSemver) throw new Error('semver is a valid type (string) but was not able to be parsed')\n } catch (e) {\n console.error(`${systemDappPayload.version} does not appear to be a valid semver value`, e)\n continue\n }\n const [existing] = await archivist.get([await PayloadBuilder.dataHash(systemDappPayload)])\n if (existing) continue\n await archivist.insert([systemDappPayload])\n }\n return true\n } catch (e) {\n console.error('error installing system dapps')\n throw e\n }\n }\n\n private async latestSets() {\n const diviner = this.developmentMode ? await this.getDappsArchivistPayloadDivinerDevelopment() : await this.getDappsArchivistPayloadDiviner()\n const dappSets: DappSet[] = []\n const failedPayloads: DappConfig[] = []\n\n for (const name of this.defaultSystemNames) {\n try {\n const dappConfig = await SystemDappQueries.getLatestConfig(diviner, name)\n if (!dappConfig) {\n console.error(`No config found for dapp ${name}`)\n continue\n }\n\n const dappIcon = await SystemDappQueries.getLatestIcon(diviner, name, dappConfig.version)\n if (!dappIcon) {\n console.error(`No icon found for dapp ${dappConfig.name}`)\n failedPayloads.push(dappConfig)\n continue\n }\n\n const dappAccess = await SystemDappQueries.getDappAccess(diviner, name, dappConfig.version)\n\n const dappParams = this.defaultSystemDappParams[dappConfig.name]\n if (!dappParams) {\n console.error(`No params found for dapp ${dappConfig.name}. Did you forget to add it to OsDappParams?`)\n failedPayloads.push(dappConfig)\n continue\n }\n\n const dappWidgetConfigs = await SystemDappQueries.getWidgetConfigs(diviner, name, dappConfig.version)\n\n dappSets.push({\n dapp: {\n accessors: dappAccess,\n config: dappConfig,\n icon: dappIcon,\n params: dappParams,\n widgetConfigs: dappWidgetConfigs,\n },\n })\n } catch {\n console.error(`Failed to build dapp ${name}`)\n }\n }\n\n if (failedPayloads.length > 0) {\n for (const cb of this.onErrorCallbacks) cb(failedPayloads)\n }\n\n return dappSets\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport type { XyOsContext } from '@xyo-network/os-model'\n\nexport const DappsArchivistModuleName = 'DappsArchivist'\nexport const DappsArchivistDevelopmentModuleName = `${DappsArchivistModuleName}Development`\nexport const DappsArchivistPayloadDivinerModuleName = 'DappsArchivistPayloadDiviner'\nexport const DappsArchivistPayloadDevelopmentDivinerModuleName = `${DappsArchivistPayloadDivinerModuleName}Development`\nexport const RegisteredDappInterfacesArchivistModuleName = 'RegisteredDappInterfacesArchivist'\n\nexport class OsCallerBase {\n constructor(protected context: XyOsContext) {}\n // Get the dapps archivist\n async getDappsArchivist() {\n const mod = assertEx(await this.context.root.resolve(DappsArchivistModuleName), () => `${DappsArchivistModuleName} not found`)\n return asArchivistInstance(mod, () => `${DappsArchivistModuleName} is not an archivist`, { required: true })\n }\n\n // Get the dapps archivist development\n async getDappsArchivistDevelopment() {\n const mod = assertEx(\n await this.context.root.resolve(DappsArchivistDevelopmentModuleName),\n () => `${DappsArchivistDevelopmentModuleName} not found`,\n )\n return asArchivistInstance(mod, () => `${DappsArchivistDevelopmentModuleName} is not an archivist`, { required: true })\n }\n\n // Get the dapps archivist payload diviner\n async getDappsArchivistPayloadDiviner() {\n const mod = assertEx(\n await this.context.root.resolve(DappsArchivistPayloadDivinerModuleName),\n () => `${DappsArchivistPayloadDivinerModuleName} not found`,\n )\n return asDivinerInstance(mod, () => `${DappsArchivistPayloadDivinerModuleName} is not a diviner`, { required: true })\n }\n\n // Get the dapps archivist payload diviner development\n async getDappsArchivistPayloadDivinerDevelopment() {\n const mod = assertEx(\n await this.context.root.resolve(DappsArchivistPayloadDevelopmentDivinerModuleName),\n () => `${DappsArchivistPayloadDevelopmentDivinerModuleName} not found`,\n )\n return asDivinerInstance(mod, () => `${DappsArchivistPayloadDevelopmentDivinerModuleName} is not a diviner`, { required: true })\n }\n\n // Get the registered dapp interfaces archivist\n async getRegisteredDappInterfacesArchivist() {\n const mod = assertEx(\n await this.context.root.resolve(RegisteredDappInterfacesArchivistModuleName),\n () => `${RegisteredDappInterfacesArchivistModuleName} not found`,\n )\n return asArchivistInstance(mod, () => `${RegisteredDappInterfacesArchivistModuleName} is not an archivist`, { required: true })\n }\n}\n","import type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappConfig,\n DappIcon,\n DappId,\n DappWidgetConfig,\n UnregisteredDappAccess,\n} from '@xyo-network/os-model'\nimport {\n DappConfigSchema,\n DappIconSchema,\n DappWidgetConfigSchema,\n UnregisteredDappAccessSchema,\n} from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nexport const SystemDappQueries = {\n async getDappAccess(diviner: DivinerInstance, name: string, version: string) {\n const accessQuery = {\n order: 'desc',\n registeringDappId: name,\n schema: PayloadDivinerQuerySchema,\n schemas: [UnregisteredDappAccessSchema],\n version: version,\n }\n return (await diviner.divine([accessQuery])) as UnregisteredDappAccess[]\n },\n async getLatestConfig(diviner: DivinerInstance, name: string) {\n const configQuery = {\n limit: 1,\n name,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappConfigSchema],\n }\n const [dappConfig] = (await diviner.divine([configQuery])) as DappConfig[]\n return dappConfig\n },\n async getLatestIcon(diviner: DivinerInstance, name: string, version: string) {\n const iconQuery = {\n name,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappIconSchema],\n version,\n }\n const [dappIcon] = (await diviner.divine([iconQuery])) as DappIcon[]\n return dappIcon\n },\n async getWidgetConfigs(diviner: DivinerInstance, name: DappId, version: string): Promise<DappWidgetConfig[]> {\n const widgetConfigQuery = {\n dappId: name,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappWidgetConfigSchema],\n version,\n }\n const widgetConfigs = (await diviner.divine([widgetConfigQuery])) as DappWidgetConfig[]\n\n const uniqueConfigs: Record<string, DappWidgetConfig> = {}\n for (const widgetConfig of widgetConfigs) {\n const hash = await PayloadBuilder.dataHash(widgetConfig)\n uniqueConfigs[widgetConfig.mode ?? hash] = widgetConfig\n }\n\n return Object.values(uniqueConfigs)\n },\n}\n","import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappId, DappWalletSeedPhrase, WalletId, XyOsContext,\n} from '@xyo-network/os-model'\nimport { DappWalletSeedPhraseSchema } from '@xyo-network/os-model'\nimport { HDWallet } from '@xyo-network/wallet'\nimport { v4 as uuid } from 'uuid'\n\nimport { OsCallerBase } from '../OsCallerBase.ts'\nimport type { SeedPhraseId, SeedPhraseRepository } from './SeedPhraseRepository.ts'\n\nexport class DappSeedPhraseRepository extends OsCallerBase implements SeedPhraseRepository {\n // record of all dapps that have requested a seed phrase with the OS\n private dappIdRepository = new Map<SeedPhraseId, DappWalletSeedPhrase>()\n // record of all walletIds that have been issued to registered dapps\n private walletIdRepository = new Map<WalletId, DappWalletSeedPhrase>()\n\n constructor(\n xyOs: XyOsContext,\n protected readonly allowedNames: string[],\n ) {\n super(xyOs)\n }\n\n async add(dappId: DappId): Promise<string> {\n const archivist = await this.getDappsArchivist()\n const seedPhrase = this.newPhrase()\n const walletId = uuid()\n const payload: DappWalletSeedPhrase = {\n dappId,\n schema: DappWalletSeedPhraseSchema,\n seedPhrase,\n walletId,\n }\n await archivist.insert([payload])\n this.dappIdRepository.set(dappId, payload)\n this.walletIdRepository.set(walletId, payload)\n return walletId\n }\n\n async findOrCreate(dappName: string): Promise<WalletId> {\n if (this.allowedNames.includes(dappName)) {\n const existingPayload = await this.checkDappId(dappName)\n if (existingPayload) return existingPayload.walletId\n\n // new dapp request so generate a new wallet Id and return it\n try {\n await this.add(dappName)\n const existingPayload = await this.checkDappId(dappName)\n if (existingPayload) return existingPayload.walletId\n throw new Error(`failed to add seed phrase: ${dappName}`)\n } catch (e) {\n console.error(e)\n throw new Error(`failed to add seed phrase: ${dappName}`)\n }\n } else {\n throw new Error(`${dappName} is not allowed to register a seed phase. NOTE: this is a safeguard till 3rd party dApps can be validated`)\n }\n }\n\n async request(walletId: WalletId) {\n return (await this.checkWalletId(walletId))?.seedPhrase\n }\n\n private async checkDappId(dappId: DappId) {\n const diviner = await this.getDappsArchivistPayloadDiviner()\n const query = {\n dappId,\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappWalletSeedPhraseSchema],\n }\n\n const results = (await diviner.divine([query])) as DappWalletSeedPhrase[]\n return results.length > 0 ? results[0] : undefined\n }\n\n private async checkWalletId(walletId: WalletId) {\n const diviner = await this.getDappsArchivistPayloadDiviner()\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappWalletSeedPhraseSchema],\n walletId,\n }\n\n const results = (await diviner.divine([query])) as DappWalletSeedPhrase[]\n return results.length > 0 ? results[0] : undefined\n }\n\n private newPhrase(): string {\n return HDWallet.generateMnemonic()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type {\n DappPackageManifestPayload, OsUser, XyOsContext, XyOsDappContext, XyOsDappDetails,\n} from '@xyo-network/os-model'\nimport { DappPackageManifestPayloadSchema } from '@xyo-network/os-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { DappWindowManifest } from './manifests/index.ts'\nimport type { XyOsContextParams } from './XyOsBase.ts'\nimport { XyOsContextBase } from './XyOsBase.ts'\n\nexport interface XyOsDappContextParams extends XyOsContextParams<DappPackageManifestPayload> {\n dapp: XyOsDappDetails\n locator: ModuleFactoryLocator\n parent: XyOsContext\n user: OsUser\n}\n\nexport class XyOsDapp extends XyOsContextBase<XyOsDappContextParams> implements XyOsDappContext {\n dapp: XyOsDappDetails\n\n constructor(params: XyOsDappContextParams) {\n super(params)\n this.dapp = { ...params.dapp }\n }\n\n override get eventBus() {\n return this.parent.eventBus\n }\n\n override get exposedNode() {\n return this.parent.exposedNode\n }\n\n override get exposedNodeOuter() {\n return this.parent.exposedNodeOuter\n }\n\n /**\n * @deprecated Dapps should not have access to the bios. This is done for the\n * settings dapp, but should be refactored out. Bios could possibly be an\n * optional property of the parent context passed in for dapps that require\n * elevated permissions.\n * ^^^ I believe we may want this here in that is a dApp requests access to the bios it will optionally be there\n */\n override get kernel(): XyOsContextBase['kernel'] {\n return assertEx(this.parent.kernel, () => 'Missing kernel')\n }\n\n get parent() {\n return this.params.parent\n }\n\n get stacks() {\n return []\n }\n\n override get user() {\n return this.params.user\n }\n\n override async boot(wallet: WalletInstance, locator?: ModuleFactoryLocator): Promise<XyOsDappContext> {\n return await this._bootMutex.runExclusive(async () => {\n console.log('XyOsDapp:boot:start', wallet.address, this.dapp.id)\n assertEx(this._root === undefined, () => 'Dapp already booted')\n\n const finalLocator\n = locator ? (this.params.locator ?? new ModuleFactoryLocator()).merge(locator) : (this.params.locator ?? new ModuleFactoryLocator())\n\n console.log('XyOsDapp:boot:finalLocator', finalLocator)\n\n const dappNodesWrapper = new ManifestWrapper({ ...this.manifest, schema: DappPackageManifestPayloadSchema }, wallet, finalLocator)\n const dappNodes = await dappNodesWrapper.loadNodes()\n\n // Derive a specific wallet for the dappManifestWrapper.\n // If the dappNodes and dappManifest wrappers get the same wallet, there will be collisions.\n const dappManifestWallet = await wallet.derivePath('99999')\n DappWindowManifest.nodes[0].config.name = this.dapp.name + 'Root'\n const wrapper = new ManifestWrapper<DappPackageManifestPayload>(\n { ...DappWindowManifest, schema: DappPackageManifestPayloadSchema },\n dappManifestWallet,\n finalLocator,\n )\n\n const node = await wrapper.loadNodeFromIndex(0)\n for (const dappNode of dappNodes) {\n await node.register(dappNode)\n await node.attach(dappNode.address, true)\n }\n\n this._root = node\n console.log('XyOsDapp:boot:finish', wallet.address, this.dapp.id)\n return this\n })\n }\n\n override getStack(stackName: string) {\n return this.parent.getStack(stackName)\n }\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/compilations/dapp-package-manifest-schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"0'\",\n \"name\": \"Dapp\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"0'/0'\",\n \"name\": \"DappArchivist\",\n \"schema\": \"network.xyo.archivist.memory.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"0'/1'\",\n \"archivist\": \"DappArchivist\",\n \"labels\": {\n \"network.xyo.generic.payload.diviner\": \"GenericPayloadDiviner\"\n },\n \"name\": \"DappArchivistPayloadDiviner\",\n \"schema\": \"network.xyo.diviner.payload.generic.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest.package.dapp\"\n}","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { BaseEmitter } from '@xylabs/events'\nimport type { JsonObject } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\nimport type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { PackageManifest } from '@xyo-network/manifest'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type {\n DappId, DappPackageManifestPayload, DappParams, EventBusInterface, OsUser,\n StackInitializer, WalletKindSignerPaths, XyOsContext, XyOsDappContext,\n} from '@xyo-network/os-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface XyOsContextParams<TManifest extends PackageManifest = PackageManifest> extends BaseParams {\n eventBus?: EventBusInterface\n locator?: ModuleFactoryLocator\n manifest?: TManifest\n platformLocator?: ModuleFactoryLocator\n signerPaths?: WalletKindSignerPaths\n}\n\nexport class XyOsContextBase<TParams extends XyOsContextParams | void = void> extends BaseEmitter<\n TParams extends XyOsContextParams ? TParams : XyOsContextParams\n> {\n protected _bootMutex = new Mutex()\n protected _platformLocator: ModuleFactoryLocator | undefined\n protected _root: NodeInstance | undefined\n\n get bios(): KernelExternal['bios'] | undefined {\n return this.kernel?.bios\n }\n\n get eventBus(): XyOsContext['eventBus'] {\n return assertEx(this.params.eventBus, () => 'Missing event bus')\n }\n\n get exposedNode(): NodeInstance | undefined {\n throw new Error('Method not implemented. [exposedNode]')\n }\n\n get exposedNodeOuter(): NodeInstance | undefined {\n throw new Error('Method not implemented. [exposedNodeOuter]')\n }\n\n get installedDapps(): DappId[] {\n return []\n }\n\n get kernel(): XyOsContext['kernel'] | undefined {\n return undefined\n }\n\n get manifest() {\n return assertEx(this.params.manifest, () => 'Missing manifest')\n }\n\n get platformLocator(): ModuleFactoryLocator {\n this._platformLocator = this._platformLocator ?? this.params.platformLocator ?? new ModuleFactoryLocator()\n return this._platformLocator\n }\n\n get possibleRoot(): NodeInstance | undefined {\n return this._root\n }\n\n get root(): NodeInstance {\n return assertEx(this._root, () => 'XyOs root not set (probably not yet booted)')\n }\n\n get runningDapps(): DappId[] {\n return []\n }\n\n get signerPaths() {\n return this.params.signerPaths\n }\n\n get state() {\n return this._root ? 'running' : 'stopped'\n }\n\n get user(): OsUser {\n throw new Error('Method not implemented. [user]')\n }\n\n boot(_wallet: WalletInstance, _locator: ModuleFactoryLocator): Promisable<XyOsContext> {\n throw new Error('Method not implemented. [boot]')\n }\n\n buildDapp(_manifest: DappPackageManifestPayload, _dappId?: DappId): Promisable<XyOsDappContext> {\n throw new Error('Method not implemented. [buildDapp]')\n }\n\n dappByName(_dappId: DappId): Promisable<XyOsDappContext | undefined> {\n throw new Error('Method not implemented. [runningDapp]')\n }\n\n getDappParams(_dappId: DappId): DappParams | undefined {\n throw new Error('Method not implemented. [getDappParams]')\n }\n\n getStack(_stackName: string): StackInitializer {\n throw new Error('Method not implemented. [getStack]')\n }\n\n installDapp(_dappId: DappId) {\n throw new Error('Method not implemented. [installDapp]')\n }\n\n monitor<T>(_fn: () => Promise<T>, _eventConfig: {\n additionalProperties?: JsonObject\n name: string\n }): Promise<T> {\n throw new Error('Method not implemented. [monitor]')\n }\n\n shutdown() {\n throw new Error('Method not implemented. [shutdown]')\n }\n\n startDapp(_dappId: DappId): Promisable<XyOsDappContext> {\n throw new Error('Method not implemented. [startDapp]')\n }\n\n stopDapp(_dappId: DappId) {\n throw new Error('Method not implemented. [stopDapp]')\n }\n\n uninstallDapp(_dappId: DappId) {\n throw new Error('Method not implemented. [uninstallDapp]')\n }\n}\n","import type { Hash } from '@xylabs/hex'\nimport type {\n DappPackageManifestPayload,\n DappParams,\n RegisteredDapp,\n RegisteredDappAccess,\n UnregisteredDapp,\n UnregisteredDappAccess,\n} from '@xyo-network/os-model'\nimport {\n DappRegisteredSchema,\n DappRegisteredState,\n isRegisteredDappAccess,\n} from '@xyo-network/os-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { DappSeedPhraseRepository } from '../wallet/index.ts'\nimport type { FailedAccessor } from './ValidateDappAccessDiviner/index.ts'\nimport {\n isFailedAccessor,\n ValidateDappAccessDiviner,\n ValidateDappAccessDivinerConfigSchema,\n} from './ValidateDappAccessDiviner/index.ts'\n\nexport type DappRegisteredId = string\n\n/**\n * Manage Dapp Registration\n */\nexport class DappRegistry {\n private dappRegistry: Map<DappRegisteredId, RegisteredDapp> = new Map()\n\n constructor(private dappSeedPhraseRepository: DappSeedPhraseRepository) {}\n\n /**\n * Register a Dapp with window manager and if successful, return its id\n *\n * @param {UnregisteredDapp} dapp Manifest and UI of the Dapp to register\n * @returns {RegisteredDapp} dapp with registration fields\n **/\n async registerDapp(dapp?: UnregisteredDapp): Promise<RegisteredDapp | null> {\n if (dapp) {\n const {\n exposedModuleIds, manifest, modes, name, version, params, widgetConfigs,\n } = this.extractDappProperties(dapp)\n\n try {\n /**\n * TODO: More validation from sources is needed for third-party dapps. A name needs some form of verification\n * before trusting it with a seed phrase at that given name.\n */\n\n // get a seed phrase for the given dapp id\n const walletId = await this.dappSeedPhraseRepository.findOrCreate(name)\n\n const registeredAccessors = await this.validateDappAccessPayloads(manifest, dapp.accessors, params)\n\n const registeredDapp: RegisteredDapp = {\n accessors: registeredAccessors,\n config: {\n exposedModuleIds,\n manifest,\n modes,\n name,\n schema: DappRegisteredSchema,\n state: DappRegisteredState.Registered,\n version,\n // attach the walletId to a registered dapp so it can request it back in the future\n walletId,\n },\n params,\n widgetConfigs,\n }\n\n if (this.dappRegistry.get(name)) {\n console.warn('tried to register two dapps with the same name', name)\n return null\n }\n this.dappRegistry.set(name, registeredDapp)\n return registeredDapp\n } catch (e) {\n console.error('Error registeringDapp', e)\n return null\n }\n } else {\n return null\n }\n }\n\n /**\n * Unregister a dapp so it can no longer be launched\n *\n * @param dappId\n */\n unregisterDapp(dappId: Hash) {\n this.dappRegistry.delete(dappId)\n }\n\n private extractDappProperties(dapp: UnregisteredDapp) {\n const {\n params, config, widgetConfigs,\n } = dapp\n const {\n exposedModuleIds, manifest, modes, name, sources, version,\n } = config\n\n return {\n exposedModuleIds, manifest, modes, name, params, sources, version, widgetConfigs,\n }\n }\n\n private async validateDappAccessPayloads(manifest: DappPackageManifestPayload, accessors: UnregisteredDappAccess[] = [], params: DappParams) {\n const validateDappAccess = await ValidateDappAccessDiviner.create({\n account: await HDWallet.random(),\n config: { schema: ValidateDappAccessDivinerConfigSchema },\n dappParams: params,\n })\n const payloads = await validateDappAccess.divine([manifest, ...accessors])\n const failedAccessors = payloads.filter(isFailedAccessor) as FailedAccessor[]\n const registeredAccessors = payloads.filter(isRegisteredDappAccess) as RegisteredDappAccess[]\n\n if (failedAccessors.length > 0) {\n console.error('Failed to register all dapp accessors', failedAccessors)\n }\n\n return registeredAccessors\n }\n}\n","import type { DivinerParams } from '@xyo-network/diviner-model'\nimport type { PackageManifestPayload } from '@xyo-network/manifest'\nimport type {\n DappPackageManifestPayload, DappParams, RegisteredDappAccess, UnregisteredDappAccess,\n} from '@xyo-network/os-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nexport const FailedAccessorSchema = 'network.xyo.os.failed.accessor.registration' as const\nexport type FailedAccessorSchema = typeof FailedAccessorSchema\n\nexport type FailedAccessor = Payload<{\n accessor: UnregisteredDappAccess\n errorMessage: string\n}, FailedAccessorSchema>\n\nexport const isFailedAccessor = isPayloadOfSchemaType<FailedAccessor>(FailedAccessorSchema)\n\nexport type ValidateDappAccessDivinerParams = DivinerParams & { dappParams: DappParams }\nexport type ValidateDappAccessDivinerIn = DappPackageManifestPayload | PackageManifestPayload | UnregisteredDappAccess\nexport type ValidateDappAccessDivinerOut = RegisteredDappAccess | FailedAccessor\n\nexport const ValidateDappAccessDivinerConfigSchema = 'network.xyo.os.dapp.access.registration.validate' as const\nexport type ValidateDappAccessDivinerConfigSchema = typeof ValidateDappAccessDivinerConfigSchema\n","import type { Address } from '@xylabs/hex'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport type { NodeManifestPayload, PackageManifestPayload } from '@xyo-network/manifest'\nimport { ManifestWrapper, PackageManifestPayloadSchema } from '@xyo-network/manifest'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type {\n DappPackageManifestPayload,\n DappParams,\n RegisteredDappAccess,\n UnregisteredDappAccess,\n} from '@xyo-network/os-model'\nimport {\n isDappPackageManifestPayload,\n isUnregisteredDappAccess,\n RegisteredDappAccessSchema,\n} from '@xyo-network/os-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport { ValidDappAccessInterfaces } from '../../models/index.ts'\nimport type {\n FailedAccessor,\n ValidateDappAccessDivinerIn,\n ValidateDappAccessDivinerOut,\n ValidateDappAccessDivinerParams,\n} from './Config.ts'\nimport {\n FailedAccessorSchema,\n ValidateDappAccessDivinerConfigSchema,\n} from './Config.ts'\n\n// Validate the accessors of a dapp against the dapp access interfaces\nexport class ValidateDappAccessDiviner<TParams extends ValidateDappAccessDivinerParams = ValidateDappAccessDivinerParams> extends AbstractDiviner<\n TParams,\n ValidateDappAccessDivinerIn,\n ValidateDappAccessDivinerOut\n> {\n static override configSchemas = [ValidateDappAccessDivinerConfigSchema]\n\n protected override async divineHandler(payloads?: ValidateDappAccessDivinerIn[]): Promise<ValidateDappAccessDivinerOut[]> {\n const dappManifest = payloads?.filter(isDappPackageManifestPayload) as DappPackageManifestPayload[]\n const accessors = payloads?.filter(isUnregisteredDappAccess) as UnregisteredDappAccess[]\n const dappParams = this.params.dappParams\n\n if (dappManifest.length > 1) {\n throw new Error('Only one dapp manifest payload is allowed')\n }\n\n if (!dappManifest || dappManifest.length === 0 || accessors?.length === 0) {\n return []\n }\n\n const registeredAccessors: RegisteredDappAccess[] = []\n const failedAccessors: FailedAccessor[] = []\n\n for (const access of accessors) {\n try {\n if (access) {\n const dappAccessInterface = ValidDappAccessInterfaces[access.name]\n if (!dappAccessInterface) {\n console.warn('Invalid dapp access interface', access.name)\n continue\n }\n\n const dappManifestToTest = dappPackageManifestToPackageManifest(dappManifest[0])\n const dappChildren = await getNodeChildren(dappManifestToTest, dappParams)\n const interfaceChildren = await getNodeChildren(dappAccessInterface.manifest, dappParams)\n const valid = compareChildren(interfaceChildren, dappChildren)\n if (valid) {\n const payload: RegisteredDappAccess = {\n ...access,\n schema: RegisteredDappAccessSchema,\n timestamp: Date.now(),\n }\n registeredAccessors.push(payload)\n } else {\n const failedRegistration: FailedAccessor = {\n accessor: access,\n errorMessage: 'Invalid dapp access interface',\n schema: FailedAccessorSchema,\n }\n failedAccessors.push(failedRegistration)\n }\n }\n } catch (e) {\n failedAccessors.push(\n {\n accessor: access, errorMessage: (e as Error).message, schema: FailedAccessorSchema,\n } as FailedAccessor,\n )\n }\n }\n\n return [...registeredAccessors, ...failedAccessors]\n }\n}\n\nconst compareChildren = (interfaceChildren: Record<Address, string | null>[], dappChildren: Record<Address, string | null>[]) => {\n return interfaceChildren.every(interfaceChild =>\n Object.values(interfaceChild).every(interfaceChildName =>\n dappChildren.some(dappChild => Object.values(dappChild).includes(interfaceChildName))))\n}\n\nconst dappPackageManifestToPackageManifest = (dappPackageManifest: DappPackageManifestPayload): PackageManifestPayload => {\n return {\n ...dappPackageManifest,\n schema: PackageManifestPayloadSchema,\n }\n}\n\nconst getChildrenFromNode = async (node: NodeInstance) => {\n const nodeManifest = (await node.state())?.[0] as NodeManifestPayload\n return nodeManifest.status?.children\n}\n\nconst getNodeChildren = async (manifestToTest: PackageManifestPayload, dappParams: DappParams) => {\n const testNodes = await getNodeToTest(manifestToTest, dappParams)\n\n const children: Record<Address, string | null>[] = []\n for (const node of testNodes) {\n const nodeChildren = await getChildrenFromNode(node)\n if (nodeChildren) {\n children.push(nodeChildren)\n }\n }\n\n return children\n}\n\nconst getNodeToTest = async (manifestToTest: PackageManifestPayload, dappParams: DappParams) => {\n const dappManifestWrapper = new ManifestWrapper(manifestToTest, await HDWallet.random(), dappParams.locator ?? new ModuleFactoryLocator())\n return await dappManifestWrapper.loadNodes()\n}\n","import type { DappAccessInterface } from '@xyo-network/os-model'\nimport { RegisteredNames, RegisteredNamesInterface } from '@xyo-network/os-model'\n\nexport type ValidDappAccessInterfaces = typeof RegisteredNames\n\nexport const ValidDappAccessInterfaces: Record<string, DappAccessInterface> = { [RegisteredNames]: RegisteredNamesInterface }\n","import { assertEx } from '@xylabs/assert'\nimport { type AccountInstance } from '@xyo-network/account-model'\nimport type {\n SignerAccounts, SignersExternal, WalletKindSignerPaths,\n} from '@xyo-network/os-model'\nimport type {\n WalletKind,\n WalletSeedPhraseStore,\n} from '@xyo-network/storage-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nexport class Signers implements SignersExternal {\n private _paths: WalletKindSignerPaths\n private _signerAccounts: Map<WalletKind, SignerAccounts>\n private _walletStore: WalletSeedPhraseStore\n\n constructor(paths: WalletKindSignerPaths, walletStore: WalletSeedPhraseStore) {\n this._paths = paths\n this._walletStore = walletStore\n this._signerAccounts = new Map()\n }\n\n private get paths(): WalletKindSignerPaths {\n return assertEx(this._paths, () => 'Paths not initialized')\n }\n\n private get signerAccounts(): Map<WalletKind, SignerAccounts> {\n return assertEx(this._signerAccounts, () => 'Signer accounts not initialized')\n }\n\n private get walletStore(): WalletSeedPhraseStore {\n return assertEx(this._walletStore, () => 'Wallet store not initialized')\n }\n\n getSigner(walletKind: WalletKind, signer: string): AccountInstance | undefined {\n return this.signerAccounts.get(walletKind)?.get(signer)\n }\n\n getWalletKindSigner(walletKind: WalletKind): SignerAccounts | undefined {\n return this.signerAccounts.get(walletKind)\n }\n\n async initialize() {\n for (const [walletKindName, signerPaths] of this.paths) {\n for (const [signerName, walletPath] of signerPaths.entries()) {\n await this.initializeSigners(walletKindName, signerName, walletPath)\n }\n }\n }\n\n private async initializeSigners(walletKindName: WalletKind, signerName: string, path: string) {\n // test if the name and path are valid\n assertEx(signerName, () => 'Name not found in signer paths')\n assertEx(path, () => 'Path not found in signer paths')\n\n // test if the wallet exists\n const phrase = assertEx(await this.walletStore.get(walletKindName), () => `Wallet not found: ${walletKindName}`)\n\n if (path) {\n // get the signer map for the wallet kind or create a new one\n const signerMap = this.signerAccounts.get(walletKindName) ?? new Map()\n\n // derive the wallet from the path\n const wallet = await HDWallet.fromPhrase(phrase)\n const derivedWallet = await wallet.derivePath(path)\n\n // add the derived wallet to the signer map\n signerMap.set(signerName, derivedWallet)\n\n // set the signer map for the wallet kind\n this.signerAccounts.set(walletKindName, signerMap)\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { BaseEmitter } from '@xylabs/events'\nimport { forget } from '@xylabs/forget'\nimport type { Promisable } from '@xylabs/promise'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport { isModuleInstance } from '@xyo-network/module-model'\nimport type { AttachableNodeInstance } from '@xyo-network/node-model'\nimport { asAttachableNodeInstance } from '@xyo-network/node-model'\nimport type {\n AdapterSetCreator, NodeAdapter, NodeAdapterBaseEvents, StackBaseEvents, StackInitializer, XyOsContext,\n} from '@xyo-network/os-model'\n\n/**\n * Stack Base Class\n *\n * Listens for changes in adapter connections, update the stack node, and emits events when the stack is ready\n */\nexport class StackBase extends BaseEmitter<BaseParams, StackBaseEvents> implements StackInitializer {\n // flag to check that all adapters are initialized\n initialized = false\n\n // adapters to initialize into the stack\n private _adapterSet: NodeAdapter[]\n\n private _context: XyOsContext\n\n // stack node\n private _stack: AttachableNodeInstance | undefined\n\n // stack node module identifier for the stack\n private _stackNodeModuleId: ModuleIdentifier\n\n // list of initialized nodes\n private initializedNodes: AttachableNodeInstance[] = []\n\n // list of listeners - lister type not important since its only recalled to stop listening\n\n private listeners: {\n adapter: NodeAdapter\n eventName: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n listener: (args: any) => Promisable<void>\n }[] = []\n\n constructor(context: XyOsContext, adapterSet: AdapterSetCreator, stackNodeModuleId: ModuleIdentifier) {\n super({})\n this._context = context\n this._adapterSet = adapterSet(assertEx(this.context.kernel, 'Kernel access required'))\n this._stackNodeModuleId = stackNodeModuleId\n }\n\n get adapterSet(): NodeAdapter[] {\n return assertEx(this._adapterSet, () => `${this.stackNodeModuleId} adapters not initialized`)\n }\n\n get context(): XyOsContext {\n return assertEx(this._context, () => `${this.stackNodeModuleId} stack context not initialized`)\n }\n\n get stack(): AttachableNodeInstance {\n return assertEx(this._stack, () => `${this.stackNodeModuleId} stack node not initialized`)\n }\n\n get stackNodeModuleId(): ModuleIdentifier {\n return assertEx(this._stackNodeModuleId, () => 'Stack node module identifier not initialized')\n }\n\n initialize() {\n this.assignStack()\n // watch for adapter connection changes\n for (const adapter of this.adapterSet) {\n // listen for driver ready events\n const driverReadyListener = async ({ node }: NodeAdapterBaseEvents['driverReady']) => await this.handleDriverReady(node)\n adapter.on('driverReady', driverReadyListener)\n this.listeners.push({\n adapter: adapter, eventName: 'driverReady', listener: driverReadyListener,\n })\n\n // listen for driver error events\n const driverErrorListener = async ({ error }: NodeAdapterBaseEvents['driverError']) => {\n console.error(`Error updating ${this.stackNodeModuleId} stack node`, error)\n await this.emit('driverError', { error })\n }\n adapter.on('driverError', driverErrorListener)\n this.listeners.push({\n adapter: adapter, eventName: 'driverError', listener: driverErrorListener,\n })\n\n // start the adapter\n const startAdapter = async () => await adapter.start()\n forget(startAdapter())\n }\n }\n\n /**\n * Stops the stack\n */\n stop() {\n for (const {\n eventName, listener, adapter,\n } of this.listeners) {\n // stop the adapter\n adapter.off(eventName, listener)\n }\n }\n\n /**\n * Adds a node to the stack. Idempotent to avoid adding the\n * same node multiple times\n * @param node The node to add to the stack\n * @returns\n */\n private async addNodeToStackNode(node: AttachableNodeInstance) {\n // Locate the stack node\n const stackNode = await this.getStackNode()\n\n // If the node is already attached as there's no need to re-attach\n const existingModule = await stackNode.resolve(node.address, { direction: 'down' })\n if (isModuleInstance(existingModule)) return\n\n // Register & attach the new node\n await stackNode.register?.(node)\n await stackNode.attach?.(node.address, true)\n }\n\n private assignStack() {\n const assign = async () => {\n const stackNode = await this.getStackNode()\n this._stack = stackNode\n }\n forget(assign())\n }\n\n private async getStackNode() {\n const mod = assertEx(await this.context.root.resolve(this.stackNodeModuleId), () => `${this.stackNodeModuleId} not found`)\n return asAttachableNodeInstance(mod, () => `${this.stackNodeModuleId} not a NodeInstance`, { required: true })\n }\n\n private async handleDriverReady(node: AttachableNodeInstance) {\n try {\n // eagerly emit that the driver is ready\n await this.emit('driverReady', { node })\n\n await this.addNodeToStackNode(node)\n\n await this.updateInitializationState(node)\n } catch (error) {\n console.error(`Error updating ${this.stackNodeModuleId} stack node`, node.id, error)\n await this.emit('stackError', { error: error as Error })\n }\n }\n\n private async updateInitializationState(node: AttachableNodeInstance) {\n // update the initialized nodes list\n this.initializedNodes.push(node)\n\n // update the initialized flag\n this.initialized = this.adapterSet.every(n => n.initialized)\n\n // notify all initialized listeners\n if (this.initialized) {\n await this.emit('initialized', { stack: await this.getStackNode() })\n }\n }\n}\n","import type {\n AdapterSetCreator, StackInitializer, XyOsContext,\n} from '@xyo-network/os-model'\n\nimport type { StackBase } from './Base.ts'\n\nexport interface StackConstructor { new (context: XyOsContext, adapters: AdapterSetCreator): StackBase }\n\nexport interface UninitializedStackSet {\n adapters: AdapterSetCreator\n stack: StackConstructor\n}\n\nexport interface UninitializedStackMap { [key: string]: UninitializedStackSet }\n\nexport class StackManager {\n private initializedStacksMap: Map<string, StackInitializer> = new Map()\n private stackMap: UninitializedStackMap\n\n constructor(stackMap: UninitializedStackMap) {\n this.stackMap = stackMap\n }\n\n get stacks() {\n return Object.keys(this.initializedStacksMap)\n }\n\n private get initializedStacks() {\n return this.initializedStacksMap\n }\n\n getStack<TStack = StackBase>(key: string) {\n return this.initializedStacksMap.get(key) as TStack | undefined\n }\n\n initialize(context: XyOsContext) {\n for (const [key, stackSet] of Object.entries(this.stackMap)) {\n console.log('stack-initialize', key)\n const { stack: Stack, adapters: stackNodeModuleId } = stackSet\n const initializedStack = new Stack(context, stackNodeModuleId)\n initializedStack.initialize()\n this.initializedStacks.set(key, initializedStack)\n }\n }\n\n stop() {\n for (const stack of this.initializedStacks.values()) {\n stack.stop()\n }\n }\n}\n","import type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { AdapterSetCreator } from '@xyo-network/os-model'\nimport { ExposedNodeOuterNodeName, PubSubBridgeNodeNodeName } from '@xyo-network/os-model'\n\nimport { NetworkAdapter } from '../adapter/index.ts'\n\nexport const OsPubSubBridgeNetworkAdapters: AdapterSetCreator = (kernel: KernelExternal) => [\n new NetworkAdapter(kernel, PubSubBridgeNodeNodeName),\n new NetworkAdapter(kernel, ExposedNodeOuterNodeName),\n]\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { BaseEmitter } from '@xylabs/events'\nimport { forget } from '@xylabs/forget'\nimport type { ArchivistModuleEventData } from '@xyo-network/archivist'\nimport { asArchivistInstance } from '@xyo-network/archivist'\nimport type { KernelExternal } from '@xyo-network/kernel-model'\nimport { asAttachableNodeInstance } from '@xyo-network/node-model'\nimport type { NodeAdapter, NodeAdapterBaseEvents } from '@xyo-network/os-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { v4 as uuid } from 'uuid'\n\ntype ModuleEventPayload = {\n event: string\n name: string | undefined\n schema: 'network.xyo.kernel.module.event'\n}\n\nexport class NodeAdapterBase extends BaseEmitter<BaseParams, NodeAdapterBaseEvents> implements NodeAdapter {\n initialized = false\n\n private _id: string = ''\n\n constructor(\n private kernel: KernelExternal,\n private driverName: string,\n ) {\n super({})\n this._id = uuid()\n }\n\n get id() {\n return assertEx(this._id, () => 'NodeAdapterBase id not initialized')\n }\n\n async start() {\n try {\n // listen to events inserted into the kernel events archivist\n const moduleAttachedInsertListener = ({ payloads }: ArchivistModuleEventData['inserted']) => {\n const moduleAttachedEvent = this.findModuleEventPayloads(payloads)\n\n // loop through the event payloads\n for (const payload of moduleAttachedEvent) {\n // check if the event is for the driver\n if (payload.name === this.driverName) {\n this.validateAndReturnDriver()\n }\n }\n }\n // get the events archivist\n const eventsArchivist = await this.getEventsArchivist()\n\n // prepare the listener\n const weakRefInsertListener = new WeakRef(moduleAttachedInsertListener)\n const insertListenerRef = weakRefInsertListener.deref()\n\n // attach the listener\n if (insertListenerRef) eventsArchivist.on('inserted', insertListenerRef)\n\n // check if the driver is already attached\n const node = this.validateAndReturnDriver()\n if (node) return node\n\n // reset the initialized flag\n this.initialized = false\n } catch (error) {\n // call the onError callbacks\n await this.emit('driverError', { error: error as Error })\n }\n }\n\n private findModuleEventPayloads(payloads: Payload[]) {\n return payloads.filter((payload) => {\n const payloadToTest = payload as ModuleEventPayload\n return payloadToTest.event === 'driverReady' && payloadToTest.schema === 'network.xyo.kernel.module.event'\n }) as ModuleEventPayload[]\n }\n\n private async getEventsArchivist() {\n const mod = assertEx(await (await this.kernel.getNode()).resolve('KernelNode:ModuleEvents'), () => 'KernelNode:ModuleEvents not found')\n return asArchivistInstance(mod, () => `${mod.id} is not an archivist`, { required: true })\n }\n\n private validateAndReturnDriver() {\n const mod = this.kernel.initialized[this.driverName]\n if (mod) {\n // confirm expected shape\n const node = asAttachableNodeInstance(mod, () => `${mod.id} is not a node`, { required: true })\n\n // set the initialized flag\n this.initialized = true\n\n // call the next callbacks\n const emit = async () => await this.emit('driverReady', { node })\n forget(emit())\n\n return node\n }\n }\n}\n","import type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { AttachableNodeInstance } from '@xyo-network/node-model'\nimport type { NetworkAdapterBase } from '@xyo-network/os-model'\n\nimport { NodeAdapterBase } from './Base.ts'\n\n/**\n * Adapts Network Driver to the Operating System\n */\nexport class NetworkAdapter extends NodeAdapterBase implements NetworkAdapterBase {\n _connection: AttachableNodeInstance | undefined\n\n constructor(kernel: KernelExternal, driverName: string) {\n super(kernel, driverName)\n this.on('driverReady', ({ node }) => {\n this._connection = node\n })\n }\n\n get connection() {\n return this._connection\n }\n\n get hasConnection() {\n return !!this.connection\n }\n\n removeConnection() {\n this._connection = undefined\n }\n}\n","import type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { AttachableNodeInstance } from '@xyo-network/node-model'\n\nimport { NodeAdapterBase } from './Base.ts'\n\n/**\n * Adapts Settings Driver to the Operating System\n */\nexport class SettingsAdapter extends NodeAdapterBase {\n private _settings: AttachableNodeInstance | undefined = undefined\n\n constructor(kernel: KernelExternal, driverName: string) {\n super(kernel, driverName)\n this.on('driverReady', ({ node }) => {\n this._settings = node\n })\n }\n\n get hasSettings() {\n return !!this.settings\n }\n\n get settings() {\n return this._settings\n }\n\n removeSettings() {\n this._settings = undefined\n }\n}\n","import type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { AdapterSetCreator } from '@xyo-network/os-model'\nimport { OsSettingsNodeName } from '@xyo-network/os-model'\n\nimport { SettingsAdapter } from '../adapter/index.ts'\n\nexport const OsSettingsAdapters: AdapterSetCreator = (kernel: KernelExternal) => [new SettingsAdapter(kernel, OsSettingsNodeName)]\n","import type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { AdapterSetCreator } from '@xyo-network/os-model'\nimport { XyoPublicNodeName } from '@xyo-network/os-model'\n\nimport { NetworkAdapter } from '../adapter/index.ts'\n\nexport const OsXyoPublicNetworkAdapters: AdapterSetCreator = (kernel: KernelExternal) => [\n new NetworkAdapter(kernel, XyoPublicNodeName),\n]\n","import { assertEx } from '@xylabs/assert'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { asAttachableNodeInstance, asNodeInstance } from '@xyo-network/node-model'\nimport type { AdapterSetCreator, XyOsContext } from '@xyo-network/os-model'\nimport { ExposedNodeOuterNodeName, PubSubBridgeNodeNodeName } from '@xyo-network/os-model'\n\nimport type { EventBusPubSubConnection } from '../event/index.ts'\nimport { osPubSubNetworkReadyConnection, OsPubSubNetworkReadyEvent } from '../event/index.ts'\nimport { initializeXns } from '../lib/index.ts'\nimport { StackBase } from './Base.ts'\n\nexport class OsPubSubNetworkStack extends StackBase {\n protected _exposedNode: NodeInstance | undefined\n protected _exposedNodeOuter: NodeInstance | undefined\n\n private busConnection: EventBusPubSubConnection = osPubSubNetworkReadyConnection()\n\n constructor(context: XyOsContext, adapters: AdapterSetCreator) {\n super(context, adapters, 'OsPubSubNetworkStackNode')\n }\n\n get exposedNode() {\n return this._exposedNode\n }\n\n get exposedNodeOuter() {\n return this._exposedNodeOuter\n }\n\n override initialize() {\n super.initialize()\n // connect to the bus\n this.context.eventBus.addConnection(this.busConnection)\n this.on('initialized', () => this.busConnection.emit(OsPubSubNetworkReadyEvent, {}))\n\n // listen for drivers\n super.on('driverReady', async ({ node }) => {\n if (node.id === PubSubBridgeNodeNodeName) {\n const httpBridge = assertEx(await node.resolve('NsHttpBridge'), () => 'HttpBridge not found')\n const xnsNode = asNodeInstance(await httpBridge.resolve('XNS'))\n\n if (xnsNode) {\n const initializedXns = await initializeXns(xnsNode)\n console.log(`Xns: ${initializedXns}`)\n } else {\n console.log('Xns: Failed to contact Xns Node')\n }\n }\n })\n\n super.on('driverReady', async ({ node }) => {\n if (node.id === ExposedNodeOuterNodeName) {\n this._exposedNodeOuter = node\n const mod = assertEx(await node.resolve('ExposedNode'), () => 'ExposedNode not found')\n const exposedNode = asAttachableNodeInstance(mod, () => 'ExposedNode is not a node')\n this._exposedNode = exposedNode\n }\n })\n super.on('driverError', error => console.error('Unable to assign exposed node(s) to context', error))\n }\n\n override stop() {\n super.stop()\n this._exposedNode = undefined\n this._exposedNodeOuter = undefined\n // prevent throwing an error if the connection is not initialized\n if (this.busConnection._id)\n this.context.eventBus.removeConnection(this.busConnection.id)\n }\n}\n","import type { AdapterSetCreator, XyOsContext } from '@xyo-network/os-model'\n\nimport type { EventBusPubSubConnection } from '../event/index.ts'\nimport { osSettingsReadyConnection, OsSettingsReadyEvent } from '../event/index.ts'\nimport { StackBase } from './Base.ts'\n\nexport class OsSettingsStack extends StackBase {\n private busConnection: EventBusPubSubConnection = osSettingsReadyConnection()\n\n constructor(context: XyOsContext, adapters: AdapterSetCreator) {\n super(context, adapters, 'OsSettingsStackNode')\n }\n\n override initialize() {\n super.initialize()\n // connect to the bus\n this.context.eventBus.addConnection(this.busConnection)\n this.on('initialized', () => this.busConnection.emit(OsSettingsReadyEvent, {}))\n }\n\n override stop() {\n super.stop()\n }\n}\n","import type { AdapterSetCreator, XyOsContext } from '@xyo-network/os-model'\nimport { XyoPublicNodeName } from '@xyo-network/os-model'\n\nimport type { EventBusPubSubConnection } from '../event/index.ts'\nimport { osXyoPublicNetworkReadyConnection, OsXyoPublicNetworkReadyEvent } from '../event/index.ts'\nimport { StackBase } from './Base.ts'\n\nexport class XyoPublicNetworkStack extends StackBase {\n private busConnection: EventBusPubSubConnection = osXyoPublicNetworkReadyConnection()\n\n constructor(context: XyOsContext, adapters: AdapterSetCreator) {\n super(context, adapters, 'OsXyoPublicNetworkStackNode')\n }\n\n override initialize() {\n super.initialize()\n // connect to the bus\n this.context.eventBus.addConnection(this.busConnection)\n this.on('initialized', () => this.busConnection.emit(OsXyoPublicNetworkReadyEvent, {}))\n\n this.on('driverReady', ({ node }) => {\n if (node.id === XyoPublicNodeName) {\n console.log('XyoPublicNode ready')\n }\n })\n this.on('driverError', error => console.error('Error loading driver', error))\n }\n\n override stop() {\n super.stop()\n }\n}\n","import {\n OsPubSubBridgeNetworkAdapters, OsSettingsAdapters, OsXyoPublicNetworkAdapters,\n} from '../adapters/index.ts'\nimport type { UninitializedStackMap } from './Manager.ts'\nimport { OsPubSubNetworkStack } from './OsPubSubNetworkStack.ts'\nimport { OsSettingsStack } from './OsSettingsStack.ts'\nimport { XyoPublicNetworkStack } from './XyoPublicNetworkStack.ts'\n\nexport const OsStackMap: UninitializedStackMap = {\n osPubSubNetworkStack: {\n stack: OsPubSubNetworkStack,\n adapters: OsPubSubBridgeNetworkAdapters,\n },\n xyoPublicNetworkStack: {\n stack: XyoPublicNetworkStack,\n adapters: OsXyoPublicNetworkAdapters,\n },\n osSettingsStack: {\n stack: OsSettingsStack,\n adapters: OsSettingsAdapters,\n },\n}\n","import type { Argv } from 'yargs'\n\nimport type { TemplateName } from '../lib/index.ts'\nimport { createFromTemplate } from '../lib/index.ts'\n\nexport const commandCreate = (argv: Argv) => {\n return argv.command('create [template] <target>', 'Create an xyos project', (yargs) => {\n return yargs\n .positional('template', {\n choices: ['react', 'headless', 'dapp', 'diviner', 'witness'] as TemplateName[],\n description: 'Template to use',\n type: 'string',\n })\n .positional('target', {\n description: 'Location into which to create the template project',\n type: 'string',\n })\n }, async ({ template, target }) => {\n console.log(`Using template ${template} at location ${target}`)\n return await createFromTemplate({ target, template })\n })\n}\n","import type { Argv } from 'yargs'\n\nexport const commandManifest = (argv: Argv) => {\n return argv.command('manifest [action] <target>', 'Create an xyos project', (yargs) => {\n return yargs\n .positional('action', {\n choices: ['create', 'validate', 'display'],\n description: 'Action to take on manifest',\n type: 'string',\n })\n .positional('target', {\n description: 'Location of manifest file',\n type: 'string',\n })\n }, async ({ action, target }) => {\n console.log(`Taking action [${action}] on manifest at ${target}`)\n return await Promise.resolve()\n })\n}\n","import type { NativeKernelDrivers } from '@xyo-network/kernel-model'\nimport type { Argv } from 'yargs'\n\nimport { headless } from '../lib/index.ts'\n\nexport const commandStart = (argv: Argv) => {\n return argv.command('start', 'Start xyOS in headless mode', (yargs) => {\n return yargs\n .option('config', {\n alias: 'c',\n description: 'Config file to use',\n type: 'string',\n }).option('manifest', {\n alias: 'm',\n description: 'Manifest file to use',\n type: 'string',\n }).option('kernelDriver', {\n alias: 'k',\n description: 'Kernel driver to load',\n type: 'string',\n })\n }, async ({\n config, manifest, kernelDriver,\n }) => {\n if (config) {\n console.log(`Using config: ${config}`)\n }\n if (config) {\n console.log(`Using manifest: ${manifest}`)\n }\n await headless({\n manifest, config, kernelDrivers: kernelDriver ? [kernelDriver as NativeKernelDrivers] : [],\n })\n })\n}\n"],"mappings":"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","names":["yargs","hideBin","commandConfig","argv","command","yargs","positional","choices","description","type","action","target","console","log","Promise","resolve","createFromTemplate","target","template","console","log","Promise","resolve","fs","boot","Kernel","HDWallet","chalk","cosmiconfig","TypeScriptLoader","tk","assertEx","boot","Kernel","ModuleFactoryLocator","assertEx","BaseEmitter","EventBusConnection","BaseEmitter","_id","description","type","request","id","assertEx","buildConnection","findAs","assertEx","forget","asArchivistInstance","MemoryArchivist","MemoryArchivistConfigSchema","asOptionalEventBusEvent","isPubSubConnections","PayloadBuilder","Mutex","v4","uuid","EventBus","_archivist","connections","publisherCallbacks","startMutex","Mutex","archivist","asArchivistInstance","assertEx","required","addConnection","connection","id","uuid","buildConnection","isPubSubConnections","handlePublisherAdd","Error","removeConnection","connectionId","handlePublisherRemove","start","storeName","runExclusive","console","warn","MemoryArchivist","create","config","name","schema","MemoryArchivistConfigSchema","on","payloads","eventBusEvent","findAs","asOptionalEventBusEvent","subscribableEvents","eventName","callback","entries","forgettable","forget","publishableEvents","connectionPublisherCallback","event","eventPayloads","sources","PayloadBuilder","dataHashes","insert","e","error","callbackId","off","EventBusPubSubConnection","EventBusConnection","publishableEvents","subscribableEvents","request","type","Error","DappAccessRequestEvent","dappAccessRequestConnectionRequest","publishableEvents","type","dappAccessRequestConnection","EventBusPubSubConnection","ExposeDappRequestEvent","exposeDappConnectionRequest","publishableEvents","type","exposeDappRequestConnection","EventBusPubSubConnection","OsPubSubNetworkReadyEvent","osPubSubNetworkConnectionRequest","publishableEvents","type","osPubSubNetworkReadyConnection","EventBusPubSubConnection","OsSettingsReadyEvent","osSettingsConnectionRequest","publishableEvents","type","osSettingsReadyConnection","EventBusPubSubConnection","OsXyoPublicNetworkReadyEvent","osXyoPublicNetworkConnectionRequest","publishableEvents","type","osXyoPublicNetworkReadyConnection","EventBusPubSubConnection","asDivinerInstance","ResolveHelper","NameRegistrarTransformer","initializeXns","xnsNode","ResolveHelper","transformers","length","registrarDiviner","asDivinerInstance","resolve","transformer","NameRegistrarTransformer","NameTransforms","value","deSlug","replaceAll","split","map","word","charAt","toUpperCase","slice","join","moduleName","slug","toLocaleLowerCase","IndexedDbArchivist","IndexedDbPayloadDiviner","ManifestWrapper","ModuleFactoryLocator","OS_NODE_PATH","getDefaultOsNodeLocator","locator","ModuleFactoryLocator","register","IndexedDbArchivist","factory","IndexedDbPayloadDiviner","loadOsNode","osWallet","osNodeWallet","derivePath","osNodeLocator","manifestWrapper","ManifestWrapper","osNodeManifest","osNode","loadNodes","e","error","console","message","stack","Error","forget","fulfilled","rejected","ModuleFactoryLocator","DappIntentTypes","DappMode","isRegisteredDappAccessDappSet","isRegisteredDappExposedDappSet","PayloadDivinerQuerySchema","DappIntentSchema","DappMode","assertEx","toSafeJsonString","asArchivistInstance","asDivinerInstance","DappArchivistModuleName","IntentArchivistModuleName","IntentArchivistPayloadDivinerModuleName","DappArchivistPayloadDivinerModuleName","DappCallerBase","context","getDappArchivist","mod","assertEx","root","resolve","toSafeJsonString","publicChildren","asArchivistInstance","required","getDappArchivistPayloadDiviner","asDivinerInstance","getDappIntentArchivist","getDappIntentArchivistPayloadDiviner","DappIntentCaller","DappCallerBase","OsDappName","context","buildIntent","sourceDappId","intent","targetDappId","targetMode","DappMode","Window","params","schema","DappIntentSchema","timestamp","Date","now","addIntent","id","mode","intentArchivist","getDappIntentArchivist","newIntent","insert","allIntents","archivist","all","latestIntent","at","latestIntentForDappName","dappName","diviner","getDappIntentArchivistPayloadDiviner","query","limit","order","PayloadDivinerQuerySchema","divine","PayloadBuilder","semver","assertEx","asArchivistInstance","asDivinerInstance","DappsArchivistModuleName","DappsArchivistDevelopmentModuleName","DappsArchivistPayloadDivinerModuleName","DappsArchivistPayloadDevelopmentDivinerModuleName","RegisteredDappInterfacesArchivistModuleName","OsCallerBase","context","getDappsArchivist","mod","assertEx","root","resolve","asArchivistInstance","required","getDappsArchivistDevelopment","getDappsArchivistPayloadDiviner","asDivinerInstance","getDappsArchivistPayloadDivinerDevelopment","getRegisteredDappInterfacesArchivist","PayloadDivinerQuerySchema","DappConfigSchema","DappIconSchema","DappWidgetConfigSchema","UnregisteredDappAccessSchema","PayloadBuilder","SystemDappQueries","getDappAccess","diviner","name","version","accessQuery","order","registeringDappId","schema","schemas","divine","getLatestConfig","configQuery","limit","dappConfig","getLatestIcon","iconQuery","dappIcon","getWidgetConfigs","widgetConfigQuery","dappId","widgetConfigs","uniqueConfigs","widgetConfig","hash","dataHash","mode","Object","values","ManageSystemDapps","OsCallerBase","onErrorCallbacks","context","defaultSystemNames","defaultSystemDapps","defaultSystemDappParams","locator","developmentMode","addErrorListener","errorListener","push","install","insertPayloads","latestSets","freshInstall","archivist","insert","getDappsArchivistDevelopment","getDappsArchivist","allPayloads","all","length","systemDappPayload","validSemver","semver","valid","version","Error","e","console","error","existing","get","PayloadBuilder","dataHash","diviner","getDappsArchivistPayloadDivinerDevelopment","getDappsArchivistPayloadDiviner","dappSets","failedPayloads","name","dappConfig","SystemDappQueries","getLatestConfig","dappIcon","getLatestIcon","dappAccess","getDappAccess","dappParams","dappWidgetConfigs","getWidgetConfigs","dapp","accessors","config","icon","params","widgetConfigs","cb","PayloadDivinerQuerySchema","DappWalletSeedPhraseSchema","HDWallet","v4","uuid","DappSeedPhraseRepository","OsCallerBase","dappIdRepository","Map","walletIdRepository","xyOs","allowedNames","add","dappId","archivist","getDappsArchivist","seedPhrase","newPhrase","walletId","uuid","payload","schema","DappWalletSeedPhraseSchema","insert","set","findOrCreate","dappName","includes","existingPayload","checkDappId","Error","e","console","error","request","checkWalletId","diviner","getDappsArchivistPayloadDiviner","query","limit","order","PayloadDivinerQuerySchema","schemas","results","divine","length","undefined","HDWallet","generateMnemonic","assertEx","ManifestWrapper","ModuleFactoryLocator","DappPackageManifestPayloadSchema","assertEx","BaseEmitter","ModuleFactoryLocator","Mutex","XyOsContextBase","BaseEmitter","_bootMutex","Mutex","_platformLocator","_root","bios","kernel","eventBus","assertEx","params","exposedNode","Error","exposedNodeOuter","installedDapps","undefined","manifest","platformLocator","ModuleFactoryLocator","possibleRoot","root","runningDapps","signerPaths","state","user","boot","_wallet","_locator","buildDapp","_manifest","_dappId","dappByName","getDappParams","getStack","_stackName","installDapp","monitor","_fn","_eventConfig","shutdown","startDapp","stopDapp","uninstallDapp","XyOsDapp","XyOsContextBase","dapp","params","eventBus","parent","exposedNode","exposedNodeOuter","kernel","assertEx","stacks","user","boot","wallet","locator","_bootMutex","runExclusive","console","log","address","id","_root","undefined","finalLocator","ModuleFactoryLocator","merge","dappNodesWrapper","ManifestWrapper","manifest","schema","DappPackageManifestPayloadSchema","dappNodes","loadNodes","dappManifestWallet","derivePath","DappWindowManifest","nodes","config","name","wrapper","node","loadNodeFromIndex","dappNode","register","attach","getStack","stackName","DappRegisteredSchema","DappRegisteredState","isRegisteredDappAccess","HDWallet","isPayloadOfSchemaType","FailedAccessorSchema","isFailedAccessor","ValidateDappAccessDivinerConfigSchema","AbstractDiviner","ManifestWrapper","PackageManifestPayloadSchema","ModuleFactoryLocator","isDappPackageManifestPayload","isUnregisteredDappAccess","RegisteredDappAccessSchema","HDWallet","RegisteredNames","RegisteredNamesInterface","ValidDappAccessInterfaces","ValidateDappAccessDiviner","AbstractDiviner","configSchemas","ValidateDappAccessDivinerConfigSchema","divineHandler","payloads","dappManifest","filter","isDappPackageManifestPayload","accessors","isUnregisteredDappAccess","dappParams","params","length","Error","registeredAccessors","failedAccessors","access","dappAccessInterface","ValidDappAccessInterfaces","name","console","warn","dappManifestToTest","dappPackageManifestToPackageManifest","dappChildren","getNodeChildren","interfaceChildren","manifest","valid","compareChildren","payload","schema","RegisteredDappAccessSchema","timestamp","Date","now","push","failedRegistration","accessor","errorMessage","FailedAccessorSchema","e","message","every","interfaceChild","Object","values","interfaceChildName","some","dappChild","includes","dappPackageManifest","PackageManifestPayloadSchema","getChildrenFromNode","node","nodeManifest","state","status","children","manifestToTest","testNodes","getNodeToTest","nodeChildren","dappManifestWrapper","ManifestWrapper","HDWallet","random","locator","ModuleFactoryLocator","loadNodes","DappRegistry","dappRegistry","Map","dappSeedPhraseRepository","registerDapp","dapp","exposedModuleIds","manifest","modes","name","version","params","widgetConfigs","extractDappProperties","walletId","findOrCreate","registeredAccessors","validateDappAccessPayloads","accessors","registeredDapp","config","schema","DappRegisteredSchema","state","DappRegisteredState","Registered","get","console","warn","set","e","error","unregisterDapp","dappId","delete","sources","validateDappAccess","ValidateDappAccessDiviner","create","account","HDWallet","random","ValidateDappAccessDivinerConfigSchema","dappParams","payloads","divine","failedAccessors","filter","isFailedAccessor","isRegisteredDappAccess","length","DappRegistrationService","builtDapps","dappRegistry","dappSeedPhraseRepository","manageSystemDapps","registeredAccessDappSets","Set","registeredDappSets","registeredExposedDappSets","dappAccessRequestConnection","exposeDappRequestConnection","context","params","dappNames","dappParams","dappPayloads","locator","ModuleFactoryLocator","developmentMode","ManageSystemDapps","DappSeedPhraseRepository","DappRegistry","addConnectionRequests","buildDapp","manifest","dappId","NameTransforms","slug","nodes","config","name","moduleName","dapp","XyOsDapp","id","parent","user","getUser","getParamsForRegisteredDapp","start","systemDapps","monitor","install","activeDapps","filter","icon","active","results","Promise","allSettled","map","dappSet","registeredDapp","registerDapp","result","dappIcon","forgetHandlers","postRegistrationHandlers","e","console","error","forget","failed","rejected","reason","succeeded","fulfilled","value","add","eventBus","addConnection","isRegisteredDappExposedDappSet","exposeIntent","DappIntentCaller","buildIntent","OsDappName","DappIntentTypes","Launch","DappMode","Exposed","emit","ExposeDappRequestEvent","payloads","isRegisteredDappAccessDappSet","DappAccessRequestEvent","accessors","assertEx","HDWallet","Signers","_paths","_signerAccounts","_walletStore","paths","walletStore","Map","assertEx","signerAccounts","getSigner","walletKind","signer","get","getWalletKindSigner","initialize","walletKindName","signerPaths","signerName","walletPath","entries","initializeSigners","path","phrase","signerMap","wallet","HDWallet","fromPhrase","derivedWallet","derivePath","set","assertEx","BaseEmitter","forget","isModuleInstance","asAttachableNodeInstance","StackBase","BaseEmitter","initialized","_adapterSet","_context","_stack","_stackNodeModuleId","initializedNodes","listeners","context","adapterSet","stackNodeModuleId","assertEx","kernel","stack","initialize","assignStack","adapter","driverReadyListener","node","handleDriverReady","on","push","eventName","listener","driverErrorListener","error","console","emit","startAdapter","start","forget","stop","off","addNodeToStackNode","stackNode","getStackNode","existingModule","resolve","address","direction","isModuleInstance","register","attach","assign","mod","root","asAttachableNodeInstance","required","updateInitializationState","id","every","n","StackManager","initializedStacksMap","Map","stackMap","stacks","Object","keys","initializedStacks","getStack","key","get","initialize","context","stackSet","entries","console","log","stack","Stack","adapters","stackNodeModuleId","initializedStack","set","stop","values","ExposedNodeOuterNodeName","PubSubBridgeNodeNodeName","assertEx","BaseEmitter","forget","asArchivistInstance","asAttachableNodeInstance","v4","uuid","NodeAdapterBase","BaseEmitter","initialized","_id","kernel","driverName","uuid","id","assertEx","start","moduleAttachedInsertListener","payloads","moduleAttachedEvent","findModuleEventPayloads","payload","name","validateAndReturnDriver","eventsArchivist","getEventsArchivist","weakRefInsertListener","WeakRef","insertListenerRef","deref","on","node","error","emit","filter","payloadToTest","event","schema","mod","getNode","resolve","asArchivistInstance","required","asAttachableNodeInstance","forget","NetworkAdapter","NodeAdapterBase","_connection","kernel","driverName","on","node","connection","hasConnection","removeConnection","undefined","SettingsAdapter","NodeAdapterBase","_settings","undefined","kernel","driverName","on","node","hasSettings","settings","removeSettings","OsPubSubBridgeNetworkAdapters","kernel","NetworkAdapter","PubSubBridgeNodeNodeName","ExposedNodeOuterNodeName","OsSettingsNodeName","OsSettingsAdapters","kernel","SettingsAdapter","OsSettingsNodeName","XyoPublicNodeName","OsXyoPublicNetworkAdapters","kernel","NetworkAdapter","XyoPublicNodeName","assertEx","asAttachableNodeInstance","asNodeInstance","ExposedNodeOuterNodeName","PubSubBridgeNodeNodeName","OsPubSubNetworkStack","StackBase","_exposedNode","_exposedNodeOuter","busConnection","osPubSubNetworkReadyConnection","context","adapters","exposedNode","exposedNodeOuter","initialize","eventBus","addConnection","on","emit","OsPubSubNetworkReadyEvent","node","id","PubSubBridgeNodeNodeName","httpBridge","assertEx","resolve","xnsNode","asNodeInstance","initializedXns","initializeXns","console","log","ExposedNodeOuterNodeName","mod","asAttachableNodeInstance","error","stop","undefined","_id","removeConnection","OsSettingsStack","StackBase","busConnection","osSettingsReadyConnection","context","adapters","initialize","eventBus","addConnection","on","emit","OsSettingsReadyEvent","stop","XyoPublicNodeName","XyoPublicNetworkStack","StackBase","busConnection","osXyoPublicNetworkReadyConnection","context","adapters","initialize","eventBus","addConnection","on","emit","OsXyoPublicNetworkReadyEvent","node","id","XyoPublicNodeName","console","log","error","stop","OsStackMap","osPubSubNetworkStack","stack","OsPubSubNetworkStack","adapters","OsPubSubBridgeNetworkAdapters","xyoPublicNetworkStack","XyoPublicNetworkStack","OsXyoPublicNetworkAdapters","osSettingsStack","OsSettingsStack","OsSettingsAdapters","XyOs","XyOsContextBase","_exposedNode","_exposedNodeOuter","_kernel","_locator","dappRegistrationService","signers","stackManager","logger","console","eventBus","EventBus","kernel","Kernel","locator","ModuleFactoryLocator","dappsConfiguration","developmentMode","stackMap","OsStackMap","params","StackManager","DappRegistrationService","signerPaths","bios","seedPhraseStore","Signers","monitoring","xyOsGlobal","getXyOsGlobal","assertEx","exposedNode","getStack","exposedNodeOuter","stacks","user","getWalletKindSigner","monitor","fn","eventConfig","name","additionalProperties","startTimer","result","stopTimer","boot","wallet","warn","address","fullLocator","merge","_bootMutex","runExclusive","start","status","kernelDrivers","Error","_root","undefined","root","loadOsNode","initialize","buildDapp","manifest","dappId","NameTransforms","slug","nodes","config","moduleName","dappByName","builtDapps","getDappParams","getParamsForRegisteredDapp","stackName","shutdown","stop","terminal","tk","terminate","grabInput","setTimeout","process","exit","headless","manifest","config","kernelDrivers","console","log","chalk","green","configExplorer","cosmiconfig","cache","loaders","TypeScriptLoader","configResult","load","search","xyosConfig","manifestToLoad","undefined","manifestObject","JSON","parse","fs","readFileSync","osWallet","HDWallet","random","kernel","Kernel","logColor","logger","boot","xyOs","XyOs","stackMap","developmentMode","mouse","on","name","commandCreate","argv","command","yargs","positional","choices","description","type","template","target","console","log","createFromTemplate","commandManifest","argv","command","yargs","positional","choices","description","type","action","target","console","log","Promise","resolve","commandStart","argv","command","yargs","option","alias","description","type","config","manifest","kernelDriver","console","log","headless","kernelDrivers","commandManifest","commandConfig","commandCreate","commandStart","yargs","hideBin","process","argv","usage","scriptName","demandCommand","parse","catch","console","error"]}
1
+ {"version":3,"sources":["../../../../src/scripts/xyos/index.ts","../../../../src/scripts/xyos/command/config.ts","../../../../src/scripts/xyos/lib/createFromTemplate.ts","../../../../src/scripts/xyos/lib/headless.ts","../../../../src/XyOs.ts","../../../../src/event/bus/Connection.ts","../../../../src/event/bus/EventBus.ts","../../../../src/event/bus/PubSubConnection.ts","../../../../src/event/connections/DappAccessRequest.ts","../../../../src/event/connections/ExposeDappRequest.ts","../../../../src/event/connections/OsPubSubNetworkReady.ts","../../../../src/event/connections/OsSettingsReady.ts","../../../../src/event/connections/OsXyoPublicReady.ts","../../../../src/lib/initializeXns.ts","../../../../src/lib/NameTransforms.ts","../../../../src/loadOsNode.ts","../../../../src/manifest/os-node.manifest.json","../../../../src/registration/DappRegistrationService.ts","../../../../src/intent/Caller.ts","../../../../src/DappCallerBase.ts","../../../../src/system/ManageSystemDapps.ts","../../../../src/OsCallerBase.ts","../../../../src/system/Queries.ts","../../../../src/wallet/DappSeedPhraseRepository.ts","../../../../src/XyOsDapp.ts","../../../../src/manifests/dapp-window.manifest.json","../../../../src/XyOsBase.ts","../../../../src/registration/DappRegistry.ts","../../../../src/registration/ValidateDappAccessDiviner/Config.ts","../../../../src/registration/ValidateDappAccessDiviner/Diviner.ts","../../../../src/models/access/ValidDappAccessInterfaces.ts","../../../../src/signer/Signers.ts","../../../../src/stack/Base.ts","../../../../src/stack/Manager.ts","../../../../src/adapters/OsPubSubBridgeNetwork.ts","../../../../src/adapter/Base.ts","../../../../src/adapter/Network.ts","../../../../src/adapter/Settings.ts","../../../../src/adapters/OsSettings.ts","../../../../src/adapters/OsXyoPublicNetwork.ts","../../../../src/stack/OsPubSubNetworkStack.ts","../../../../src/stack/OsSettingsStack.ts","../../../../src/stack/XyoPublicNetworkStack.ts","../../../../src/stack/Map.ts","../../../../src/scripts/xyos/command/create.ts","../../../../src/scripts/xyos/command/manifest.ts","../../../../src/scripts/xyos/command/start.ts"],"sourcesContent":["import yargs from 'yargs'\n// eslint-disable-next-line import-x/no-internal-modules\nimport { hideBin } from 'yargs/helpers'\n\nimport {\n commandConfig, commandCreate, commandManifest, commandStart,\n} from './command/index.ts'\n\n(\n (\n commandManifest(\n commandConfig(\n commandCreate(\n commandStart(\n yargs(\n hideBin(\n process.argv,\n ),\n ),\n ),\n ),\n ),\n )\n .usage('Usage: $0 <command> [options]')\n .scriptName('xyos')\n .demandCommand(1)\n .parse()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as Promise<any>\n).catch(\n console.error,\n)\n","import type { Argv } from 'yargs'\n\nexport const commandConfig = (argv: Argv) => {\n return argv.command('config [action] <target>', 'Create an xyos project', (yargs) => {\n return yargs\n .positional('action', {\n choices: ['create', 'validate', 'display'],\n description: 'Action to take on config',\n type: 'string',\n })\n .positional('target', {\n description: 'Location of config file',\n type: 'string',\n })\n }, async ({ action, target }) => {\n console.log(`Taking action [${action}] on manifest at ${target}`)\n return await Promise.resolve()\n })\n}\n","export type TemplateName = 'react' | 'headless' | 'dapp' | 'diviner' | 'witness'\n\nexport interface CreateFromTemplateParams {\n target?: string\n template?: TemplateName\n}\n\nexport const createFromTemplate = async ({ target, template }: CreateFromTemplateParams) => {\n console.log('Creating from template', template, 'at', target)\n return await Promise.resolve()\n}\n","import fs from 'node:fs'\n\nimport { boot } from '@xyo-network/bios'\nimport { Kernel } from '@xyo-network/kernel'\nimport type { NativeKernelDrivers } from '@xyo-network/kernel-model'\nimport type { PackageManifest } from '@xyo-network/manifest'\nimport { HDWallet } from '@xyo-network/wallet'\nimport chalk from 'chalk'\nimport { cosmiconfig } from 'cosmiconfig'\nimport { TypeScriptLoader } from 'cosmiconfig-typescript-loader'\nimport tk from 'terminal-kit'\n\nconst { terminal } = tk\n\nimport { XyOs } from '../../../XyOs.ts'\n\nconst terminate = () => {\n terminal.grabInput(false)\n setTimeout(function () {\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(0)\n }, 100)\n}\n\ninterface XyOsConfig {\n developmentMode?: boolean\n manifest?: string | PackageManifest\n}\n\nexport interface HeadlessParams {\n config?: string\n kernelDrivers?: NativeKernelDrivers[]\n manifest?: string\n}\n\nexport const headless = async ({\n manifest, config, kernelDrivers,\n}: HeadlessParams = {}) => {\n console.log(chalk.green('Starting Headless xyOS...'))\n const configExplorer = cosmiconfig('xyos', { cache: true, loaders: { '.ts': TypeScriptLoader() } })\n const configResult = await (config ? configExplorer.load(config) : configExplorer.search())\n const xyosConfig: XyOsConfig = (configResult?.config ?? {}) as XyOsConfig\n const manifestToLoad: string | undefined = manifest ?? (typeof xyosConfig.manifest === 'string' ? xyosConfig.manifest : undefined)\n const manifestObject: PackageManifest | undefined = manifestToLoad\n ? JSON.parse(fs.readFileSync(manifestToLoad, 'utf8')) as PackageManifest\n : typeof xyosConfig.manifest === 'object' ? xyosConfig.manifest : undefined\n\n const osWallet = await HDWallet.random()\n const kernel = new Kernel({ logColor: 'cyan', logger: console })\n await kernel.boot(await boot(), { kernelDrivers })\n const xyOs = new XyOs({\n kernel,\n stackMap: {},\n manifest: manifestObject,\n developmentMode: xyosConfig.developmentMode,\n })\n await xyOs.boot(osWallet)\n console.log(chalk.green('Started Headless xyOS...'))\n\n terminal.grabInput({ mouse: 'button' })\n\n terminal.on('key', function (name: string) {\n console.log(\"'key' event:\", name)\n if (name === 'CTRL_C') {\n terminate()\n }\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Promisable } from '@xylabs/promise'\nimport { boot } from '@xyo-network/bios'\nimport { Kernel } from '@xyo-network/kernel'\nimport type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { PackageManifest } from '@xyo-network/manifest'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { ModuleFactoryLocatorInstance } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type {\n DappId,\n DappPackageManifestPayload,\n DappParams,\n SignersExternal,\n StackInitializer,\n XyOsContext,\n XyOsDappContext,\n XyOsGlobal,\n} from '@xyo-network/os-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { EventBus } from './event/index.ts'\nimport type { MonitorEventConfig, XyOsMonitor } from './helpers/index.ts'\nimport { NameTransforms } from './lib/index.ts'\nimport { loadOsNode } from './loadOsNode.ts'\nimport type { DappRegistrationServiceParams } from './registration/index.ts'\nimport { DappRegistrationService } from './registration/index.ts'\nimport { Signers } from './signer/index.ts'\nimport type { OsPubSubNetworkStack, UninitializedStackMap } from './stack/index.ts'\nimport { OsStackMap, StackManager } from './stack/index.ts'\nimport type { XyOsContextParams } from './XyOsBase.ts'\nimport { XyOsContextBase } from './XyOsBase.ts'\n\nexport interface XyOsParams<TManifest extends PackageManifest = PackageManifest> extends XyOsContextParams<TManifest> {\n dappsConfiguration?: DappRegistrationServiceParams\n developmentMode?: boolean\n kernel?: XyOsContext['kernel']\n stackMap?: UninitializedStackMap\n}\n\nexport class XyOs extends XyOsContextBase<XyOsParams> implements XyOsContext {\n protected _exposedNode: NodeInstance | undefined\n protected _exposedNodeOuter: NodeInstance | undefined\n protected _kernel: KernelExternal\n protected _locator: ModuleFactoryLocator\n protected dappRegistrationService: DappRegistrationService\n protected signers: SignersExternal | undefined\n private stackManager: StackManager\n\n constructor({\n logger = console,\n eventBus = new EventBus(),\n kernel = new Kernel({ logger }),\n locator = new ModuleFactoryLocator(),\n dappsConfiguration,\n developmentMode,\n stackMap = OsStackMap,\n ...params\n }: XyOsParams = {}) {\n super({\n eventBus, kernel, locator, ...params,\n })\n this._locator = locator\n this._kernel = kernel\n this.stackManager = new StackManager(stackMap)\n this.dappRegistrationService = new DappRegistrationService(this, dappsConfiguration, this.locator, developmentMode)\n if (this.signerPaths && this.kernel?.bios?.seedPhraseStore) this.signers = new Signers(this.signerPaths, this.kernel?.bios?.seedPhraseStore)\n }\n\n static get monitoring(): XyOsMonitor | undefined {\n return\n }\n\n static get xyOsGlobal(): XyOsGlobal {\n return getXyOsGlobal()\n }\n\n override get bios(): KernelExternal['bios'] | undefined {\n return assertEx(this.params.kernel?.bios, () => 'Missing bios')\n }\n\n override get exposedNode() {\n return this.stackManager.getStack<OsPubSubNetworkStack>('osPubSubNetworkStack')?.exposedNode\n }\n\n override get exposedNodeOuter() {\n return this.stackManager.getStack<OsPubSubNetworkStack>('osPubSubNetworkStack')?.exposedNodeOuter\n }\n\n override get kernel(): XyOsContext['kernel'] | undefined {\n return assertEx(this.params.kernel, () => 'Missing kernel')\n }\n\n get locator() {\n return this._locator\n }\n\n get stacks() {\n return this.stackManager.stacks\n }\n\n override get user() {\n return { signers: this.signers?.getWalletKindSigner('user') }\n }\n\n static async monitor<T>(fn: () => Promise<T>, eventConfig: MonitorEventConfig): Promise<T> {\n const { name, additionalProperties } = eventConfig\n const monitor = this.monitoring\n monitor?.startTimer(name)\n const result = await fn()\n monitor?.stopTimer({ additionalProperties, name })\n\n return result\n }\n\n override async boot(wallet: WalletInstance, locator: ModuleFactoryLocatorInstance = new ModuleFactoryLocator()) {\n console.warn('XyOs:boot', wallet.address)\n const fullLocator = this._locator.merge(locator)\n return await this._bootMutex.runExclusive(async () => {\n await this.eventBus.start()\n if (this.kernel?.status === 'created') {\n await this.kernel.boot(await boot(), { locator: fullLocator, kernelDrivers: [] })\n }\n if (this.kernel?.status !== 'booted') {\n throw new Error('Kernel not booted')\n }\n assertEx(this._root === undefined, () => 'XyOs already booted')\n const [root] = await XyOs.monitor(async () => await loadOsNode(wallet, fullLocator), { name: 'Load XyOs' })\n this._root = root\n\n this.stackManager.initialize(this)\n if (this.signers) await this.signers.initialize()\n return this\n })\n }\n\n override buildDapp(\n manifest: DappPackageManifestPayload,\n dappId = NameTransforms.slug(manifest.nodes[0]?.config.name),\n name = NameTransforms.moduleName(manifest.nodes[0]?.config.name),\n ): Promisable<XyOsDappContext> {\n return this.dappRegistrationService.buildDapp(manifest, dappId, name)\n }\n\n override dappByName(dappId: DappId): Promisable<XyOsDappContext | undefined> {\n return this.dappRegistrationService.builtDapps[dappId]\n }\n\n override getDappParams(dappId: DappId): DappParams {\n return this.dappRegistrationService.getParamsForRegisteredDapp(dappId)\n }\n\n override getStack(stackName: string): StackInitializer {\n return assertEx(this.stackManager.getStack(stackName), () => `Stack not found: ${stackName}`)\n }\n\n override async monitor<T>(fn: () => Promise<T>, eventConfig: MonitorEventConfig): Promise<T> {\n return await XyOs.monitor<T>(fn, eventConfig)\n }\n\n override shutdown() {\n assertEx(this._root !== undefined, () => 'XyOs not booted')\n this._root = undefined\n this.stackManager.stop()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport type { EventData } from '@xylabs/events'\nimport { BaseEmitter } from '@xylabs/events'\nimport type {\n EventBusConnectionInterface, EventBusConnectionRequest, EventBusConnectionType,\n} from '@xyo-network/os-model'\n\n/**\n * A Generic Connection to add to an EventBus\n * @param {EventBusConnectionRequest} request\n */\nexport class EventBusConnection<TEventData extends EventData = EventData>\n extends BaseEmitter<BaseParams, TEventData>\n implements EventBusConnectionInterface<TEventData> {\n _id?: string\n description?: string\n type: EventBusConnectionType\n\n constructor(request: EventBusConnectionRequest) {\n super({})\n this.description = request.description\n this.type = request.type\n }\n\n get id() {\n return assertEx(this._id, () => 'Connection ID not set. Did you forget to call buildConnection()?')\n }\n\n buildConnection(id: string) {\n this._id = id\n }\n}\n","import { findAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport type { ArchivistModuleEventData } from '@xyo-network/archivist'\nimport { asArchivistInstance } from '@xyo-network/archivist'\nimport { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'\nimport type {\n EventBusConnectionInterface,\n EventBusEvent,\n EventBusInterface,\n EventBusPubSubConnectionInterface,\n PublisherEventListener,\n} from '@xyo-network/os-model'\nimport {\n asOptionalEventBusEvent,\n isPubSubConnections,\n} from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Mutex } from 'async-mutex'\nimport { v4 as uuid } from 'uuid'\n\n/**\n * Event Bus implementation inspired by the DBus protocol used in Linux desktop systems for inter-process communication.\n *\n * General flow:\n * 1. Connection Added\n * 2. Publisher and Subscriber Callbacks added\n * 3. Events occurs and stored internally\n * 4. Subscriber Callbacks called based off stored events\n */\nexport class EventBus implements EventBusInterface {\n // Internal Archivist to store event data\n private _archivist: MemoryArchivist | undefined\n\n // Store all connections\n private connections: Record<string, EventBusConnectionInterface> = {}\n\n // Store all publisher callbacks for later removal\n private publisherCallbacks: Record<string, PublisherEventListener> = {}\n\n private startMutex = new Mutex()\n\n get archivist() {\n return asArchivistInstance(\n assertEx(this._archivist, () => 'Archivist not found. Did you forget to call start()?'),\n 'not a valid archivist instance',\n { required: true },\n )\n }\n\n addConnection(connection: EventBusConnectionInterface) {\n // unique connection id\n const id = uuid()\n\n // store in local cache\n this.connections[id] = connection\n\n // update the connection id with the generated id\n connection.buildConnection(id)\n\n // let existing connections know about newly published events\n if (isPubSubConnections(connection)) {\n this.handlePublisherAdd(connection)\n } else {\n throw new Error('Unsupported connection type. Must be PubSub')\n }\n return connection\n }\n\n removeConnection(connectionId: string) {\n // find the existing connection\n const connection = this.connections[connectionId]\n if (!connection) {\n throw new Error('Connection not found ' + connectionId)\n }\n\n if (connection && isPubSubConnections(connection)) {\n this.handlePublisherRemove(connection)\n }\n\n delete this.connections[connectionId]\n }\n\n async start(storeName = 'EventBusArchivist') {\n return await this.startMutex.runExclusive(async () => {\n if (this._archivist) {\n console.warn('EventBus already started')\n return this\n }\n // Later versions could include a node that has a payload diviner to query past events\n this._archivist = await MemoryArchivist.create({ config: { name: storeName, schema: MemoryArchivistConfigSchema } })\n\n // start listening to inserted events from publishers\n // NOTE: This is a very basic implementation and could be optimized by indexing on connection, eventName, and callback\n // for faster lookups by event name\n this.archivist.on('inserted', ({ payloads }: ArchivistModuleEventData['inserted']) => {\n // confirm an eventBusPayload was inserted\n const eventBusEvent = findAs(payloads, asOptionalEventBusEvent)\n // if not an eventBusPayload, return\n if (!eventBusEvent) return\n // Loop through all connections\n for (const connectionId in this.connections) {\n const connection = this.connections[connectionId]\n // Target PubSub connections\n if (isPubSubConnections(connection) && connection.subscribableEvents) {\n // Loop through all subscribable events\n for (const [eventName, callback] of connection.subscribableEvents.entries()) {\n // check if the event name matches the payload name\n if (eventName !== eventBusEvent.name) continue\n // pass the event payloads to the callback\n if (callback) {\n const forgettable = async () => await callback({ payloads })\n forget(forgettable())\n }\n }\n }\n }\n })\n return this\n })\n }\n\n private handlePublisherAdd(connection: EventBusPubSubConnectionInterface) {\n // Loop through all publishable events\n for (const eventName of connection.publishableEvents ?? []) {\n // Create publisher callback\n const connectionPublisherCallback: PublisherEventListener = async ({ payloads }) => {\n // build the event payload\n const event: EventBusEvent = { name: eventName, schema: 'network.xyo.event.bus.event' }\n const eventPayloads = payloads ?? []\n event.sources = await PayloadBuilder.dataHashes(eventPayloads)\n // Sync events to archivist\n try {\n await this.archivist.insert([event, ...(payloads ?? [])])\n } catch (e) {\n console.error('Error inserting event into archivist', e)\n }\n }\n // Subscribe the publisher callback to the connection\n connection.on(eventName, connectionPublisherCallback)\n\n // store the publisher callback for later removal\n const callbackId = connection.id + eventName\n this.publisherCallbacks[callbackId] = connectionPublisherCallback\n }\n }\n\n private handlePublisherRemove(connection: EventBusPubSubConnectionInterface) {\n // Loop through all publishable events\n for (const [, event] of connection.publishableEvents?.entries() ?? []) {\n // find the publisher callback\n const id = connection.id + event\n const callback = this.publisherCallbacks[id]\n\n // unsubscribe the publisher callback from the connection\n if (callback) connection.off(event, callback)\n }\n }\n}\n","import type {\n EventBusPubSubConnectionInterface,\n EventBusPubSubConnectionRequest,\n PublisherEventListenerEventData,\n SubscribableEventListeners,\n} from '@xyo-network/os-model'\n\nimport { EventBusConnection } from './Connection.ts'\n\n/**\n * A PubSub Connection to add to an EventBus\n * @param {EventBusPubSubConnectionRequest} request\n */\nexport class EventBusPubSubConnection<TPublisherEventData extends PublisherEventListenerEventData = PublisherEventListenerEventData>\n extends EventBusConnection<TPublisherEventData>\n implements EventBusPubSubConnectionInterface {\n publishableEvents?: string[]\n subscribableEvents?: SubscribableEventListeners\n\n constructor(request: EventBusPubSubConnectionRequest) {\n super(request)\n if (request.type !== 'PubSub') {\n throw new Error('Invalid connection type. Must be PubSub')\n }\n this.publishableEvents = request.publishableEvents\n this.subscribableEvents = request.subscribableEvents\n }\n}\n","import type { EventBusPubSubConnectionRequest } from '@xyo-network/os-model'\n\nimport { EventBusPubSubConnection } from '../bus/index.ts'\n\nexport const DappAccessRequestEvent = 'dappAccessRequest'\n\nconst dappAccessRequestConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: [DappAccessRequestEvent],\n type: 'PubSub',\n}\nexport const dappAccessRequestConnection = () => new EventBusPubSubConnection(dappAccessRequestConnectionRequest)\n","import type { EventBusPubSubConnectionRequest } from '@xyo-network/os-model'\n\nimport { EventBusPubSubConnection } from '../bus/index.ts'\n\nexport const ExposeDappRequestEvent = 'exposeDappRequest'\n\nconst exposeDappConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: [ExposeDappRequestEvent],\n type: 'PubSub',\n}\nexport const exposeDappRequestConnection = () => new EventBusPubSubConnection(exposeDappConnectionRequest)\n","import type { EventBusPubSubConnectionRequest } from '@xyo-network/os-model'\n\nimport { EventBusPubSubConnection } from '../bus/index.ts'\n\nexport const OsPubSubNetworkReadyEvent = 'osPubSubNetworkReady'\n\nconst osPubSubNetworkConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: [OsPubSubNetworkReadyEvent],\n type: 'PubSub',\n}\n\nexport const osPubSubNetworkReadyConnection = () => new EventBusPubSubConnection(osPubSubNetworkConnectionRequest)\n","import type { EventBusPubSubConnectionRequest } from '@xyo-network/os-model'\n\nimport { EventBusPubSubConnection } from '../bus/index.ts'\n\nexport const OsSettingsReadyEvent = 'osSettingsReady'\n\nconst osSettingsConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: [OsSettingsReadyEvent],\n type: 'PubSub',\n}\n\nexport const osSettingsReadyConnection = () => new EventBusPubSubConnection(osSettingsConnectionRequest)\n","import type { EventBusPubSubConnectionRequest } from '@xyo-network/os-model'\n\nimport { EventBusPubSubConnection } from '../bus/index.ts'\n\nexport const OsXyoPublicNetworkReadyEvent = 'osXyoPublicNetworkReady'\n\nconst osXyoPublicNetworkConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: [OsXyoPublicNetworkReadyEvent],\n type: 'PubSub',\n}\n\nexport const osXyoPublicNetworkReadyConnection = () => new EventBusPubSubConnection(osXyoPublicNetworkConnectionRequest)\n","import { asDivinerInstance } from '@xyo-network/diviner-model'\nimport { ResolveHelper } from '@xyo-network/module-model'\nimport { NameRegistrarTransformer } from '@xyo-network/module-resolver'\nimport type { NodeInstance } from '@xyo-network/node-model'\n\nexport const initializeXns = async (xnsNode: NodeInstance) => {\n if (ResolveHelper.transformers.length === 0) {\n const registrarDiviner = asDivinerInstance(await xnsNode?.resolve('AddressRecords:AddressRecordIndexDiviner'))\n if (registrarDiviner) {\n const transformer = new NameRegistrarTransformer(registrarDiviner, 'xyo')\n ResolveHelper.transformers = [transformer]\n return true\n }\n }\n return false\n}\n","export class NameTransforms {\n constructor(private value: string) {}\n\n static deSlug(value: string) {\n return value\n .replaceAll('-', ' ')\n .split(' ')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n }\n\n static moduleName(value: string) {\n return value.replaceAll(' ', '')\n }\n\n static slug(value: string) {\n return value.replaceAll(' ', '-').toLocaleLowerCase()\n }\n\n deSlug() {\n return NameTransforms.deSlug(this.value)\n }\n\n moduleName() {\n return NameTransforms.moduleName(this.value)\n }\n\n slug() {\n return NameTransforms.slug(this.value)\n }\n}\n","import { IndexedDbArchivist } from '@xyo-network/archivist-indexeddb'\nimport { IndexedDbPayloadDiviner } from '@xyo-network/diviner-payload-indexeddb'\nimport type { PackageManifestPayload } from '@xyo-network/manifest'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { ModuleFactoryLocatorInstance } from '@xyo-network/module-model'\nimport type { AttachableNodeInstance } from '@xyo-network/node-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { osNodeManifest } from './manifest/index.ts'\n\n// NOTE: Path \"0'\" is reserved for the exposed node in the kernel\nconst OS_NODE_PATH = \"1'\"\n\nconst getDefaultOsNodeLocator = (): ModuleFactoryLocator => {\n const locator = new ModuleFactoryLocator()\n locator.register(IndexedDbArchivist.factory(), { 'network.xyo.archivist.persistence.scope': 'device' })\n locator.register(IndexedDbPayloadDiviner.factory(), { 'network.xyo.archivist.persistence.scope': 'device' })\n return locator\n}\n\nexport const loadOsNode = async (\n osWallet: WalletInstance,\n locator?: ModuleFactoryLocatorInstance,\n): Promise<[AttachableNodeInstance]> => {\n try {\n // Create wallets for the OS & kernel nodes\n const osNodeWallet = await osWallet.derivePath(OS_NODE_PATH)\n\n // Create the OS node manifest\n const osNodeLocator: ModuleFactoryLocatorInstance = locator ?? getDefaultOsNodeLocator()\n const manifestWrapper = new ManifestWrapper(osNodeManifest as PackageManifestPayload, osNodeWallet, osNodeLocator)\n\n // Create the OS & kernel nodes\n const osNode = (await manifestWrapper.loadNodes())[0]\n\n return [osNode]\n } catch (e) {\n const error = e as Error\n console.error(`Error creating os node: ${error.message}`)\n console.error(`Error creating os node: ${error.stack}`)\n throw new Error(`Error creating os node: ${error.message}`)\n }\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/compilations/dapp-package-manifest-schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"0'\",\n \"name\": \"OsNode\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1'\",\n \"name\": \"OSArchivist\",\n \"dbName\": \"OSArchivist-2025-01-13\",\n \"labels\": {\n \"network.xyo.archivist.persistence.scope\": \"device\"\n },\n \"storeName\": \"payloads\",\n \"parents\": {\n \"read\": [\n \"Archivist\"\n ]\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"3'\",\n \"name\": \"DappsArchivist\",\n \"dbName\": \"DappsArchivist-2025-01-13\",\n \"labels\": {\n \"network.xyo.archivist.persistence.scope\": \"device\"\n },\n \"storeName\": \"payloads\",\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"archivist\": \"DappsArchivist\",\n \"dbVersion\": 1,\n \"name\": \"DappsArchivistPayloadDiviner\",\n \"labels\": {\n \"network.xyo.archivist.persistence.scope\": \"device\"\n },\n \"schema\": \"network.xyo.diviner.payload.generic.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"4'\",\n \"dbName\": \"IntentArchivist-2025-01-13\",\n \"name\": \"IntentArchivist\",\n \"storeName\": \"payloads\",\n \"labels\": {\n \"network.xyo.archivist.persistence.scope\": \"device\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"7\",\n \"archivist\": \"IntentArchivist\",\n \"dbVersion\": 1,\n \"name\": \"IntentArchivistPayloadDiviner\",\n \"labels\": {\n \"network.xyo.archivist.persistence.scope\": \"device\"\n },\n \"schema\": \"network.xyo.diviner.payload.generic.config\",\n \"storeName\": \"payloads\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"8\",\n \"name\": \"RegisteredDappInterfacesArchivist\",\n \"schema\": \"network.xyo.archivist.memory.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"9'\",\n \"name\": \"DappsArchivistDevelopment\",\n \"parents\": {\n \"write\": [\n \"DappsArchivist\"\n ]\n },\n \"schema\": \"network.xyo.archivist.memory.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"10\",\n \"archivist\": \"DappsArchivistDevelopment\",\n \"dbVersion\": 1,\n \"name\": \"DappsArchivistPayloadDivinerDevelopment\",\n \"labels\": {\n \"network.xyo.generic.payload.diviner\": \"GenericPayloadDiviner\"\n },\n \"schema\": \"network.xyo.diviner.payload.generic.config\"\n }\n },\n {\n \"config\": {\n \"name\": \"OsPubSubNetworkStackNode\",\n \"schema\": \"network.xyo.node.config\"\n }\n },\n {\n \"config\": {\n \"name\": \"OsSettingsStackNode\",\n \"schema\": \"network.xyo.node.config\"\n }\n },\n {\n \"config\": {\n \"name\": \"OsXyoPublicNetworkStackNode\",\n \"schema\": \"network.xyo.node.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest.package.dapp\"\n}","import { forget } from '@xylabs/forget'\nimport type { Promisable } from '@xylabs/promise'\nimport { fulfilled, rejected } from '@xylabs/promise'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type {\n DappPackageManifestPayload,\n DappParams,\n DappRegistrationResults,\n PayloadWithVersion,\n RegisteredDappSetResult,\n XyOsContext,\n XyOsDappContext,\n} from '@xyo-network/os-model'\nimport {\n DappIntentTypes,\n DappMode,\n isRegisteredDappAccessDappSet,\n isRegisteredDappExposedDappSet,\n} from '@xyo-network/os-model'\n\nimport {\n dappAccessRequestConnection, DappAccessRequestEvent, exposeDappRequestConnection, ExposeDappRequestEvent,\n} from '../event/index.ts'\nimport { DappIntentCaller } from '../intent/index.ts'\nimport { NameTransforms } from '../lib/index.ts'\nimport { ManageSystemDapps } from '../system/index.ts'\nimport { DappSeedPhraseRepository } from '../wallet/index.ts'\nimport { XyOsDapp } from '../XyOsDapp.ts'\nimport { DappRegistry } from './DappRegistry.ts'\n\nexport interface DappRegistrationServiceParams {\n dappNames: string[]\n dappParams: Record<string, DappParams>\n dappPayloads: PayloadWithVersion[]\n}\n\nexport class DappRegistrationService {\n // Dapps that have been built with their own context\n builtDapps: Record<string, XyOsDappContext> = {}\n\n dappRegistry: DappRegistry\n dappSeedPhraseRepository: DappSeedPhraseRepository\n manageSystemDapps: ManageSystemDapps\n\n // Dapps that have been registered with dappAccessRequests\n registeredAccessDappSets: Set<RegisteredDappSetResult> = new Set()\n\n // Dapps that have been registered with the dapp registry\n registeredDappSets: Set<RegisteredDappSetResult> = new Set()\n\n // Dapps that have been registered with exposeDappRequests\n registeredExposedDappSets: Set<RegisteredDappSetResult> = new Set()\n\n private dappAccessRequestConnection = dappAccessRequestConnection()\n private exposeDappRequestConnection = exposeDappRequestConnection()\n\n constructor(\n private context: XyOsContext,\n private params: DappRegistrationServiceParams = {\n dappNames: [], dappParams: {}, dappPayloads: [],\n },\n private locator = new ModuleFactoryLocator(),\n private developmentMode?: boolean,\n ) {\n this.manageSystemDapps = new ManageSystemDapps(\n context,\n this.params?.dappNames ?? [],\n this.params?.dappPayloads ?? [],\n this.params?.dappParams ?? {},\n this.locator,\n this.developmentMode,\n )\n this.dappSeedPhraseRepository = new DappSeedPhraseRepository(context, this.params?.dappNames ?? [])\n this.dappRegistry = new DappRegistry(this.dappSeedPhraseRepository)\n\n this.addConnectionRequests()\n }\n\n async buildDapp(\n manifest: DappPackageManifestPayload,\n dappId = NameTransforms.slug(manifest.nodes[0]?.config.name),\n name = NameTransforms.moduleName(manifest.nodes[0]?.config.name),\n ): Promise<XyOsDappContext> {\n const dapp = new XyOsDapp({\n dapp: { id: dappId, name },\n locator: this.locator,\n manifest,\n parent: this.context,\n user: await this.getUser(),\n }) as XyOsDappContext\n this.builtDapps[dappId] = dapp\n return dapp\n }\n\n getParamsForRegisteredDapp(dappId: string) {\n return this.params?.dappParams[dappId]\n }\n\n async start(): Promise<DappRegistrationResults> {\n const systemDapps = await this.context.monitor(async () => await this.manageSystemDapps.install(), { name: 'Install System dApps' })\n const activeDapps = systemDapps.filter(({ dapp }) => dapp.icon.active === true)\n const results = await Promise.allSettled(\n activeDapps.map(async (dappSet) => {\n const { dapp } = dappSet\n const registeredDapp = await this.dappRegistry.registerDapp(dapp)\n const result: RegisteredDappSetResult = { dapp: registeredDapp, dappIcon: dapp.icon }\n\n // Start post registration process in the background\n const forgetHandlers = async () => {\n try {\n await this.postRegistrationHandlers(result)\n } catch (e) {\n console.error('Error in post registration handlers', e)\n }\n }\n forget(forgetHandlers())\n\n return result\n }),\n )\n const failed = results.filter(rejected).map(result => result.reason)\n const succeeded = results.filter(fulfilled).map(result => result.value)\n\n for (const registeredDapp of succeeded) this.registeredDappSets.add(registeredDapp)\n\n return { failed, succeeded }\n }\n\n private addConnectionRequests() {\n this.context.eventBus.addConnection(this.dappAccessRequestConnection)\n this.context.eventBus.addConnection(this.exposeDappRequestConnection)\n }\n\n /**\n * A method to get the user property from context and eventually modify it before handing it to a dapp\n * i.e. curating user-approved signers\n */\n private getUser(): Promisable<XyOsContext['user']> {\n return this.context.user\n }\n\n private async postRegistrationHandlers(registeredDapp: RegisteredDappSetResult) {\n if (registeredDapp.dapp) {\n if (isRegisteredDappExposedDappSet(registeredDapp)) {\n // add to exposed dapp set\n this.registeredExposedDappSets.add(registeredDapp)\n // craft intent\n const exposeIntent = DappIntentCaller.buildIntent(\n DappIntentCaller.OsDappName,\n DappIntentTypes.Launch,\n registeredDapp.dapp.config.name,\n DappMode.Exposed,\n )\n // emit to bus\n await this.exposeDappRequestConnection.emit(ExposeDappRequestEvent, { payloads: [registeredDapp.dapp.config, exposeIntent] })\n }\n if (isRegisteredDappAccessDappSet(registeredDapp)) {\n // add to access dapp set\n this.registeredAccessDappSets.add(registeredDapp)\n // emit to bus\n await this.dappAccessRequestConnection.emit(DappAccessRequestEvent, { payloads: registeredDapp.dapp.accessors })\n }\n }\n }\n}\n","import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappId, DappIntent, DappIntentTypes, XyOsContext,\n} from '@xyo-network/os-model'\nimport { DappIntentSchema, DappMode } from '@xyo-network/os-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\n\nimport { DappCallerBase } from '../DappCallerBase.ts'\n\nexport class DappIntentCaller extends DappCallerBase {\n static OsDappName = 'XyOs'\n constructor(context: XyOsContext) {\n super(context)\n }\n\n /**\n * Build a new intent\n * @param {DappId} sourceDappId\n * @param {DappIntentTypes} intent\n * @param {DappId} targetDappId\n * @param {DappMode} targetMode\n * @param {DappIntent['params']} params?\n * @returns DappIntent\n */\n static buildIntent(\n sourceDappId: DappId,\n intent: DappIntentTypes,\n targetDappId?: DappId,\n targetMode: DappMode = DappMode.Window,\n params?: DappIntent['params'],\n ): DappIntent {\n return {\n intent,\n params: params || '',\n schema: DappIntentSchema,\n sourceDappId,\n targetDappId,\n targetMode: targetMode || DappMode.Window,\n timestamp: Date.now(),\n }\n }\n\n // Add a new intent\n async addIntent(id: DappId, intent: DappIntentTypes, mode: DappMode) {\n const intentArchivist = await this.getDappIntentArchivist()\n const newIntent = DappIntentCaller.buildIntent(id, intent, mode)\n await intentArchivist.insert([newIntent])\n }\n\n // Get all intents\n async allIntents() {\n const archivist = await this.getDappIntentArchivist()\n return await archivist.all()\n }\n\n // Get the latest intent saved to the archivist\n async latestIntent() {\n const archivist = await this.getDappIntentArchivist()\n return (await archivist.all()).at(-1) as WithStorageMeta<DappIntent>\n }\n\n // Get the latest intent for a dapp\n async latestIntentForDappName(dappName: DappId) {\n const diviner = await this.getDappIntentArchivistPayloadDiviner()\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n sourceDappId: dappName,\n }\n\n return (await diviner.divine([query])) as DappIntent[]\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { toSafeJsonString } from '@xylabs/object'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport type { XyOsContext } from '@xyo-network/os-model'\n\nexport const DappArchivistModuleName = 'DappArchivist'\nexport const IntentArchivistModuleName = 'IntentArchivist'\nexport const IntentArchivistPayloadDivinerModuleName = 'IntentArchivistPayloadDiviner'\nexport const DappArchivistPayloadDivinerModuleName = 'DappArchivistPayloadDiviner'\n\nexport class DappCallerBase {\n constructor(protected context: XyOsContext) {}\n /**\n * Get the DappArchivist\n */\n async getDappArchivist() {\n const mod = assertEx(\n await this.context.root.resolve(DappArchivistModuleName),\n () => `${DappArchivistModuleName} not found [${toSafeJsonString(this.context.root.publicChildren())}]`,\n )\n return asArchivistInstance(mod, () => `${DappArchivistModuleName} is not an archivist`, { required: true })\n }\n\n /**\n * Get the DappArchivistPayloadDiviner\n */\n async getDappArchivistPayloadDiviner() {\n const mod = assertEx(\n await this.context.root.resolve(DappArchivistPayloadDivinerModuleName),\n () => `${DappArchivistPayloadDivinerModuleName} not found`,\n )\n return asDivinerInstance(mod, () => `${DappArchivistPayloadDivinerModuleName} is not a diviner`, { required: true })\n }\n\n /**\n * Get the IntentArchivist\n */\n async getDappIntentArchivist() {\n const mod = assertEx(await this.context.root.resolve(IntentArchivistModuleName), () => `${IntentArchivistModuleName} not found`)\n return asArchivistInstance(mod, () => `${IntentArchivistModuleName} is not an archivist`, { required: true })\n }\n\n // Get the IntentArchivistPayloadDiviner\n async getDappIntentArchivistPayloadDiviner() {\n const mod = assertEx(\n await this.context.root.resolve(IntentArchivistPayloadDivinerModuleName),\n () => `${IntentArchivistPayloadDivinerModuleName} not found`,\n )\n return asDivinerInstance(mod, () => `${IntentArchivistPayloadDivinerModuleName} is not a diviner`, { required: true })\n }\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type {\n DappConfig, DappIcon, DappParams, DappSet, PayloadWithVersion, XyOsContext,\n} from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport semver from 'semver'\n\nimport { OsCallerBase } from '../OsCallerBase.ts'\nimport { SystemDappQueries } from './Queries.ts'\n\nexport type ErrorListener = (failedPayloads: DappConfig[]) => void\nexport type DappSetsAndPayloads = {\n dappPayloads: (DappConfig | DappIcon)[]\n dappSets: DappSet[]\n}\n\n/**\n * Manage the installation of system dapps from payloads and return the built sets\n */\nexport class ManageSystemDapps extends OsCallerBase {\n private onErrorCallbacks: ErrorListener[] = []\n\n constructor(\n context: XyOsContext,\n private defaultSystemNames: string[],\n private defaultSystemDapps: PayloadWithVersion[],\n private defaultSystemDappParams: Record<string, DappParams>,\n private locator?: ModuleFactoryLocator,\n private developmentMode?: boolean,\n ) {\n super(context)\n }\n\n /**\n * Add a callback to listen for errors throwing during system dapp registration\n * @param {ErrorListener} errorListener\n */\n addErrorListener(errorListener: ErrorListener) {\n this.onErrorCallbacks.push(errorListener)\n }\n\n /**\n * Installs the dapps into the OS and builds the appropriate DappSet\n */\n async install(): Promise<DappSet[]> {\n await this.insertPayloads()\n return await this.latestSets()\n }\n\n private async freshInstall(archivist: ArchivistInstance): Promise<void> {\n await archivist.insert(this.defaultSystemDapps)\n }\n\n private async insertPayloads(): Promise<boolean> {\n const archivist = this.developmentMode ? await this.getDappsArchivistDevelopment() : await this.getDappsArchivist()\n try {\n const allPayloads = (await archivist.all()) as WithStorageMeta<(DappIcon | DappConfig)>[]\n if (allPayloads.length === 0) {\n await this.freshInstall(archivist)\n return true\n }\n\n // only insert unseen system dapp payloads\n for (const systemDappPayload of this.defaultSystemDapps) {\n try {\n const validSemver = semver.valid(systemDappPayload.version)\n if (!validSemver) throw new Error('semver is a valid type (string) but was not able to be parsed')\n } catch (e) {\n console.error(`${systemDappPayload.version} does not appear to be a valid semver value`, e)\n continue\n }\n const [existing] = await archivist.get([await PayloadBuilder.dataHash(systemDappPayload)])\n if (existing) continue\n await archivist.insert([systemDappPayload])\n }\n return true\n } catch (e) {\n console.error('error installing system dapps')\n throw e\n }\n }\n\n private async latestSets() {\n const diviner = this.developmentMode ? await this.getDappsArchivistPayloadDivinerDevelopment() : await this.getDappsArchivistPayloadDiviner()\n const dappSets: DappSet[] = []\n const failedPayloads: DappConfig[] = []\n\n for (const name of this.defaultSystemNames) {\n try {\n const dappConfig = await SystemDappQueries.getLatestConfig(diviner, name)\n if (!dappConfig) {\n console.error(`No config found for dapp ${name}`)\n continue\n }\n\n const dappIcon = await SystemDappQueries.getLatestIcon(diviner, name, dappConfig.version)\n if (!dappIcon) {\n console.error(`No icon found for dapp ${dappConfig.name}`)\n failedPayloads.push(dappConfig)\n continue\n }\n\n const dappAccess = await SystemDappQueries.getDappAccess(diviner, name, dappConfig.version)\n\n const dappParams = this.defaultSystemDappParams[dappConfig.name]\n if (!dappParams) {\n console.error(`No params found for dapp ${dappConfig.name}. Did you forget to add it to OsDappParams?`)\n failedPayloads.push(dappConfig)\n continue\n }\n\n const dappWidgetConfigs = await SystemDappQueries.getWidgetConfigs(diviner, name, dappConfig.version)\n\n dappSets.push({\n dapp: {\n accessors: dappAccess,\n config: dappConfig,\n icon: dappIcon,\n params: dappParams,\n widgetConfigs: dappWidgetConfigs,\n },\n })\n } catch {\n console.error(`Failed to build dapp ${name}`)\n }\n }\n\n if (failedPayloads.length > 0) {\n for (const cb of this.onErrorCallbacks) cb(failedPayloads)\n }\n\n return dappSets\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport type { XyOsContext } from '@xyo-network/os-model'\n\nexport const DappsArchivistModuleName = 'DappsArchivist'\nexport const DappsArchivistDevelopmentModuleName = `${DappsArchivistModuleName}Development`\nexport const DappsArchivistPayloadDivinerModuleName = 'DappsArchivistPayloadDiviner'\nexport const DappsArchivistPayloadDevelopmentDivinerModuleName = `${DappsArchivistPayloadDivinerModuleName}Development`\nexport const RegisteredDappInterfacesArchivistModuleName = 'RegisteredDappInterfacesArchivist'\n\nexport class OsCallerBase {\n constructor(protected context: XyOsContext) {}\n // Get the dapps archivist\n async getDappsArchivist() {\n const mod = assertEx(await this.context.root.resolve(DappsArchivistModuleName), () => `${DappsArchivistModuleName} not found`)\n return asArchivistInstance(mod, () => `${DappsArchivistModuleName} is not an archivist`, { required: true })\n }\n\n // Get the dapps archivist development\n async getDappsArchivistDevelopment() {\n const mod = assertEx(\n await this.context.root.resolve(DappsArchivistDevelopmentModuleName),\n () => `${DappsArchivistDevelopmentModuleName} not found`,\n )\n return asArchivistInstance(mod, () => `${DappsArchivistDevelopmentModuleName} is not an archivist`, { required: true })\n }\n\n // Get the dapps archivist payload diviner\n async getDappsArchivistPayloadDiviner() {\n const mod = assertEx(\n await this.context.root.resolve(DappsArchivistPayloadDivinerModuleName),\n () => `${DappsArchivistPayloadDivinerModuleName} not found`,\n )\n return asDivinerInstance(mod, () => `${DappsArchivistPayloadDivinerModuleName} is not a diviner`, { required: true })\n }\n\n // Get the dapps archivist payload diviner development\n async getDappsArchivistPayloadDivinerDevelopment() {\n const mod = assertEx(\n await this.context.root.resolve(DappsArchivistPayloadDevelopmentDivinerModuleName),\n () => `${DappsArchivistPayloadDevelopmentDivinerModuleName} not found`,\n )\n return asDivinerInstance(mod, () => `${DappsArchivistPayloadDevelopmentDivinerModuleName} is not a diviner`, { required: true })\n }\n\n // Get the registered dapp interfaces archivist\n async getRegisteredDappInterfacesArchivist() {\n const mod = assertEx(\n await this.context.root.resolve(RegisteredDappInterfacesArchivistModuleName),\n () => `${RegisteredDappInterfacesArchivistModuleName} not found`,\n )\n return asArchivistInstance(mod, () => `${RegisteredDappInterfacesArchivistModuleName} is not an archivist`, { required: true })\n }\n}\n","import type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappConfig,\n DappIcon,\n DappId,\n DappWidgetConfig,\n UnregisteredDappAccess,\n} from '@xyo-network/os-model'\nimport {\n DappConfigSchema,\n DappIconSchema,\n DappWidgetConfigSchema,\n UnregisteredDappAccessSchema,\n} from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nexport const SystemDappQueries = {\n async getDappAccess(diviner: DivinerInstance, name: string, version: string) {\n const accessQuery = {\n order: 'desc',\n registeringDappId: name,\n schema: PayloadDivinerQuerySchema,\n schemas: [UnregisteredDappAccessSchema],\n version: version,\n }\n return (await diviner.divine([accessQuery])) as UnregisteredDappAccess[]\n },\n async getLatestConfig(diviner: DivinerInstance, name: string) {\n const configQuery = {\n limit: 1,\n name,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappConfigSchema],\n }\n const [dappConfig] = (await diviner.divine([configQuery])) as DappConfig[]\n return dappConfig\n },\n async getLatestIcon(diviner: DivinerInstance, name: string, version: string) {\n const iconQuery = {\n name,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappIconSchema],\n version,\n }\n const [dappIcon] = (await diviner.divine([iconQuery])) as DappIcon[]\n return dappIcon\n },\n async getWidgetConfigs(diviner: DivinerInstance, name: DappId, version: string): Promise<DappWidgetConfig[]> {\n const widgetConfigQuery = {\n dappId: name,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappWidgetConfigSchema],\n version,\n }\n const widgetConfigs = (await diviner.divine([widgetConfigQuery])) as DappWidgetConfig[]\n\n const uniqueConfigs: Record<string, DappWidgetConfig> = {}\n for (const widgetConfig of widgetConfigs) {\n const hash = await PayloadBuilder.dataHash(widgetConfig)\n uniqueConfigs[widgetConfig.mode ?? hash] = widgetConfig\n }\n\n return Object.values(uniqueConfigs)\n },\n}\n","import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappId, DappWalletSeedPhrase, WalletId, XyOsContext,\n} from '@xyo-network/os-model'\nimport { DappWalletSeedPhraseSchema } from '@xyo-network/os-model'\nimport { HDWallet } from '@xyo-network/wallet'\nimport { v4 as uuid } from 'uuid'\n\nimport { OsCallerBase } from '../OsCallerBase.ts'\nimport type { SeedPhraseId, SeedPhraseRepository } from './SeedPhraseRepository.ts'\n\nexport class DappSeedPhraseRepository extends OsCallerBase implements SeedPhraseRepository {\n // record of all dapps that have requested a seed phrase with the OS\n private dappIdRepository = new Map<SeedPhraseId, DappWalletSeedPhrase>()\n // record of all walletIds that have been issued to registered dapps\n private walletIdRepository = new Map<WalletId, DappWalletSeedPhrase>()\n\n constructor(\n xyOs: XyOsContext,\n protected readonly allowedNames: string[],\n ) {\n super(xyOs)\n }\n\n async add(dappId: DappId): Promise<string> {\n const archivist = await this.getDappsArchivist()\n const seedPhrase = this.newPhrase()\n const walletId = uuid()\n const payload: DappWalletSeedPhrase = {\n dappId,\n schema: DappWalletSeedPhraseSchema,\n seedPhrase,\n walletId,\n }\n await archivist.insert([payload])\n this.dappIdRepository.set(dappId, payload)\n this.walletIdRepository.set(walletId, payload)\n return walletId\n }\n\n async findOrCreate(dappName: string): Promise<WalletId> {\n if (this.allowedNames.includes(dappName)) {\n const existingPayload = await this.checkDappId(dappName)\n if (existingPayload) return existingPayload.walletId\n\n // new dapp request so generate a new wallet Id and return it\n try {\n await this.add(dappName)\n const existingPayload = await this.checkDappId(dappName)\n if (existingPayload) return existingPayload.walletId\n throw new Error(`failed to add seed phrase: ${dappName}`)\n } catch (e) {\n console.error(e)\n throw new Error(`failed to add seed phrase: ${dappName}`)\n }\n } else {\n throw new Error(`${dappName} is not allowed to register a seed phase. NOTE: this is a safeguard till 3rd party dApps can be validated`)\n }\n }\n\n async request(walletId: WalletId) {\n return (await this.checkWalletId(walletId))?.seedPhrase\n }\n\n private async checkDappId(dappId: DappId) {\n const diviner = await this.getDappsArchivistPayloadDiviner()\n const query = {\n dappId,\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappWalletSeedPhraseSchema],\n }\n\n const results = (await diviner.divine([query])) as DappWalletSeedPhrase[]\n return results.length > 0 ? results[0] : undefined\n }\n\n private async checkWalletId(walletId: WalletId) {\n const diviner = await this.getDappsArchivistPayloadDiviner()\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappWalletSeedPhraseSchema],\n walletId,\n }\n\n const results = (await diviner.divine([query])) as DappWalletSeedPhrase[]\n return results.length > 0 ? results[0] : undefined\n }\n\n private newPhrase(): string {\n return HDWallet.generateMnemonic()\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type {\n DappPackageManifestPayload, OsUser, XyOsContext, XyOsDappContext, XyOsDappDetails,\n} from '@xyo-network/os-model'\nimport { DappPackageManifestPayloadSchema } from '@xyo-network/os-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { DappWindowManifest } from './manifests/index.ts'\nimport type { XyOsContextParams } from './XyOsBase.ts'\nimport { XyOsContextBase } from './XyOsBase.ts'\n\nexport interface XyOsDappContextParams extends XyOsContextParams<DappPackageManifestPayload> {\n dapp: XyOsDappDetails\n locator: ModuleFactoryLocator\n parent: XyOsContext\n user: OsUser\n}\n\nexport class XyOsDapp extends XyOsContextBase<XyOsDappContextParams> implements XyOsDappContext {\n dapp: XyOsDappDetails\n\n constructor(params: XyOsDappContextParams) {\n super(params)\n this.dapp = { ...params.dapp }\n }\n\n override get eventBus() {\n return this.parent.eventBus\n }\n\n override get exposedNode() {\n return this.parent.exposedNode\n }\n\n override get exposedNodeOuter() {\n return this.parent.exposedNodeOuter\n }\n\n /**\n * @deprecated Dapps should not have access to the bios. This is done for the\n * settings dapp, but should be refactored out. Bios could possibly be an\n * optional property of the parent context passed in for dapps that require\n * elevated permissions.\n * ^^^ I believe we may want this here in that is a dApp requests access to the bios it will optionally be there\n */\n override get kernel(): XyOsContextBase['kernel'] {\n return assertEx(this.parent.kernel, () => 'Missing kernel')\n }\n\n get parent() {\n return this.params.parent\n }\n\n get stacks() {\n return []\n }\n\n override get user() {\n return this.params.user\n }\n\n override async boot(wallet: WalletInstance, locator?: ModuleFactoryLocator): Promise<XyOsDappContext> {\n return await this._bootMutex.runExclusive(async () => {\n console.log('XyOsDapp:boot:start', wallet.address, this.dapp.id)\n assertEx(this._root === undefined, () => 'Dapp already booted')\n\n const finalLocator\n = locator ? (this.params.locator ?? new ModuleFactoryLocator()).merge(locator) : (this.params.locator ?? new ModuleFactoryLocator())\n\n console.log('XyOsDapp:boot:finalLocator', finalLocator)\n\n const dappNodesWrapper = new ManifestWrapper({ ...this.manifest, schema: DappPackageManifestPayloadSchema }, wallet, finalLocator)\n const dappNodes = await dappNodesWrapper.loadNodes()\n\n // Derive a specific wallet for the dappManifestWrapper.\n // If the dappNodes and dappManifest wrappers get the same wallet, there will be collisions.\n const dappManifestWallet = await wallet.derivePath('99999')\n DappWindowManifest.nodes[0].config.name = this.dapp.name + 'Root'\n const wrapper = new ManifestWrapper<DappPackageManifestPayload>(\n { ...DappWindowManifest, schema: DappPackageManifestPayloadSchema },\n dappManifestWallet,\n finalLocator,\n )\n\n const node = await wrapper.loadNodeFromIndex(0)\n for (const dappNode of dappNodes) {\n await node.register(dappNode)\n await node.attach(dappNode.address, true)\n }\n\n this._root = node\n console.log('XyOsDapp:boot:finish', wallet.address, this.dapp.id)\n return this\n })\n }\n\n override getStack(stackName: string) {\n return this.parent.getStack(stackName)\n }\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/compilations/dapp-package-manifest-schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"0'\",\n \"name\": \"Dapp\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"0'/0'\",\n \"name\": \"DappArchivist\",\n \"schema\": \"network.xyo.archivist.memory.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"0'/1'\",\n \"archivist\": \"DappArchivist\",\n \"labels\": {\n \"network.xyo.generic.payload.diviner\": \"GenericPayloadDiviner\"\n },\n \"name\": \"DappArchivistPayloadDiviner\",\n \"schema\": \"network.xyo.diviner.payload.generic.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest.package.dapp\"\n}","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { BaseEmitter } from '@xylabs/events'\nimport type { JsonObject } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\nimport type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { PackageManifest } from '@xyo-network/manifest'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type {\n DappId, DappPackageManifestPayload, DappParams, EventBusInterface, OsUser,\n StackInitializer, WalletKindSignerPaths, XyOsContext, XyOsDappContext,\n} from '@xyo-network/os-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface XyOsContextParams<TManifest extends PackageManifest = PackageManifest> extends BaseParams {\n eventBus?: EventBusInterface\n locator?: ModuleFactoryLocator\n manifest?: TManifest\n platformLocator?: ModuleFactoryLocator\n signerPaths?: WalletKindSignerPaths\n}\n\nexport class XyOsContextBase<TParams extends XyOsContextParams | void = void> extends BaseEmitter<\n TParams extends XyOsContextParams ? TParams : XyOsContextParams\n> {\n protected _bootMutex = new Mutex()\n protected _platformLocator: ModuleFactoryLocator | undefined\n protected _root: NodeInstance | undefined\n\n get bios(): KernelExternal['bios'] | undefined {\n return this.kernel?.bios\n }\n\n get eventBus(): XyOsContext['eventBus'] {\n return assertEx(this.params.eventBus, () => 'Missing event bus')\n }\n\n get exposedNode(): NodeInstance | undefined {\n throw new Error('Method not implemented. [exposedNode]')\n }\n\n get exposedNodeOuter(): NodeInstance | undefined {\n throw new Error('Method not implemented. [exposedNodeOuter]')\n }\n\n get installedDapps(): DappId[] {\n return []\n }\n\n get kernel(): XyOsContext['kernel'] | undefined {\n return undefined\n }\n\n get manifest() {\n return assertEx(this.params.manifest, () => 'Missing manifest')\n }\n\n get platformLocator(): ModuleFactoryLocator {\n this._platformLocator = this._platformLocator ?? this.params.platformLocator ?? new ModuleFactoryLocator()\n return this._platformLocator\n }\n\n get possibleRoot(): NodeInstance | undefined {\n return this._root\n }\n\n get root(): NodeInstance {\n return assertEx(this._root, () => 'XyOs root not set (probably not yet booted)')\n }\n\n get runningDapps(): DappId[] {\n return []\n }\n\n get signerPaths() {\n return this.params.signerPaths\n }\n\n get state() {\n return this._root ? 'running' : 'stopped'\n }\n\n get user(): OsUser {\n throw new Error('Method not implemented. [user]')\n }\n\n boot(_wallet: WalletInstance, _locator: ModuleFactoryLocator): Promisable<XyOsContext> {\n throw new Error('Method not implemented. [boot]')\n }\n\n buildDapp(_manifest: DappPackageManifestPayload, _dappId?: DappId): Promisable<XyOsDappContext> {\n throw new Error('Method not implemented. [buildDapp]')\n }\n\n dappByName(_dappId: DappId): Promisable<XyOsDappContext | undefined> {\n throw new Error('Method not implemented. [runningDapp]')\n }\n\n getDappParams(_dappId: DappId): DappParams | undefined {\n throw new Error('Method not implemented. [getDappParams]')\n }\n\n getStack(_stackName: string): StackInitializer {\n throw new Error('Method not implemented. [getStack]')\n }\n\n installDapp(_dappId: DappId) {\n throw new Error('Method not implemented. [installDapp]')\n }\n\n monitor<T>(_fn: () => Promise<T>, _eventConfig: {\n additionalProperties?: JsonObject\n name: string\n }): Promise<T> {\n throw new Error('Method not implemented. [monitor]')\n }\n\n shutdown() {\n throw new Error('Method not implemented. [shutdown]')\n }\n\n startDapp(_dappId: DappId): Promisable<XyOsDappContext> {\n throw new Error('Method not implemented. [startDapp]')\n }\n\n stopDapp(_dappId: DappId) {\n throw new Error('Method not implemented. [stopDapp]')\n }\n\n uninstallDapp(_dappId: DappId) {\n throw new Error('Method not implemented. [uninstallDapp]')\n }\n}\n","import type { Hash } from '@xylabs/hex'\nimport type {\n DappPackageManifestPayload,\n DappParams,\n RegisteredDapp,\n RegisteredDappAccess,\n UnregisteredDapp,\n UnregisteredDappAccess,\n} from '@xyo-network/os-model'\nimport {\n DappRegisteredSchema,\n DappRegisteredState,\n isRegisteredDappAccess,\n} from '@xyo-network/os-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { DappSeedPhraseRepository } from '../wallet/index.ts'\nimport type { FailedAccessor } from './ValidateDappAccessDiviner/index.ts'\nimport {\n isFailedAccessor,\n ValidateDappAccessDiviner,\n ValidateDappAccessDivinerConfigSchema,\n} from './ValidateDappAccessDiviner/index.ts'\n\nexport type DappRegisteredId = string\n\n/**\n * Manage Dapp Registration\n */\nexport class DappRegistry {\n private dappRegistry: Map<DappRegisteredId, RegisteredDapp> = new Map()\n\n constructor(private dappSeedPhraseRepository: DappSeedPhraseRepository) {}\n\n /**\n * Register a Dapp with window manager and if successful, return its id\n *\n * @param {UnregisteredDapp} dapp Manifest and UI of the Dapp to register\n * @returns {RegisteredDapp} dapp with registration fields\n **/\n async registerDapp(dapp?: UnregisteredDapp): Promise<RegisteredDapp | null> {\n if (dapp) {\n const {\n exposedModuleIds, manifest, modes, name, version, params, widgetConfigs,\n } = this.extractDappProperties(dapp)\n\n try {\n /**\n * TODO: More validation from sources is needed for third-party dapps. A name needs some form of verification\n * before trusting it with a seed phrase at that given name.\n */\n\n // get a seed phrase for the given dapp id\n const walletId = await this.dappSeedPhraseRepository.findOrCreate(name)\n\n const registeredAccessors = await this.validateDappAccessPayloads(manifest, dapp.accessors, params)\n\n const registeredDapp: RegisteredDapp = {\n accessors: registeredAccessors,\n config: {\n exposedModuleIds,\n manifest,\n modes,\n name,\n schema: DappRegisteredSchema,\n state: DappRegisteredState.Registered,\n version,\n // attach the walletId to a registered dapp so it can request it back in the future\n walletId,\n },\n params,\n widgetConfigs,\n }\n\n if (this.dappRegistry.get(name)) {\n console.warn('tried to register two dapps with the same name', name)\n return null\n }\n this.dappRegistry.set(name, registeredDapp)\n return registeredDapp\n } catch (e) {\n console.error('Error registeringDapp', e)\n return null\n }\n } else {\n return null\n }\n }\n\n /**\n * Unregister a dapp so it can no longer be launched\n *\n * @param dappId\n */\n unregisterDapp(dappId: Hash) {\n this.dappRegistry.delete(dappId)\n }\n\n private extractDappProperties(dapp: UnregisteredDapp) {\n const {\n params, config, widgetConfigs,\n } = dapp\n const {\n exposedModuleIds, manifest, modes, name, sources, version,\n } = config\n\n return {\n exposedModuleIds, manifest, modes, name, params, sources, version, widgetConfigs,\n }\n }\n\n private async validateDappAccessPayloads(manifest: DappPackageManifestPayload, accessors: UnregisteredDappAccess[] = [], params: DappParams) {\n const validateDappAccess = await ValidateDappAccessDiviner.create({\n account: await HDWallet.random(),\n config: { schema: ValidateDappAccessDivinerConfigSchema },\n dappParams: params,\n })\n const payloads = await validateDappAccess.divine([manifest, ...accessors])\n const failedAccessors = payloads.filter(isFailedAccessor) as FailedAccessor[]\n const registeredAccessors = payloads.filter(isRegisteredDappAccess) as RegisteredDappAccess[]\n\n if (failedAccessors.length > 0) {\n console.error('Failed to register all dapp accessors', failedAccessors)\n }\n\n return registeredAccessors\n }\n}\n","import type { DivinerParams } from '@xyo-network/diviner-model'\nimport type { PackageManifestPayload } from '@xyo-network/manifest'\nimport type {\n DappPackageManifestPayload, DappParams, RegisteredDappAccess, UnregisteredDappAccess,\n} from '@xyo-network/os-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nexport const FailedAccessorSchema = 'network.xyo.os.failed.accessor.registration' as const\nexport type FailedAccessorSchema = typeof FailedAccessorSchema\n\nexport type FailedAccessor = Payload<{\n accessor: UnregisteredDappAccess\n errorMessage: string\n}, FailedAccessorSchema>\n\nexport const isFailedAccessor = isPayloadOfSchemaType<FailedAccessor>(FailedAccessorSchema)\n\nexport type ValidateDappAccessDivinerParams = DivinerParams & { dappParams: DappParams }\nexport type ValidateDappAccessDivinerIn = DappPackageManifestPayload | PackageManifestPayload | UnregisteredDappAccess\nexport type ValidateDappAccessDivinerOut = RegisteredDappAccess | FailedAccessor\n\nexport const ValidateDappAccessDivinerConfigSchema = 'network.xyo.os.dapp.access.registration.validate' as const\nexport type ValidateDappAccessDivinerConfigSchema = typeof ValidateDappAccessDivinerConfigSchema\n","import type { Address } from '@xylabs/hex'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport type { NodeManifestPayload, PackageManifestPayload } from '@xyo-network/manifest'\nimport { ManifestWrapper, PackageManifestPayloadSchema } from '@xyo-network/manifest'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type {\n DappPackageManifestPayload,\n DappParams,\n RegisteredDappAccess,\n UnregisteredDappAccess,\n} from '@xyo-network/os-model'\nimport {\n isDappPackageManifestPayload,\n isUnregisteredDappAccess,\n RegisteredDappAccessSchema,\n} from '@xyo-network/os-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport { ValidDappAccessInterfaces } from '../../models/index.ts'\nimport type {\n FailedAccessor,\n ValidateDappAccessDivinerIn,\n ValidateDappAccessDivinerOut,\n ValidateDappAccessDivinerParams,\n} from './Config.ts'\nimport {\n FailedAccessorSchema,\n ValidateDappAccessDivinerConfigSchema,\n} from './Config.ts'\n\n// Validate the accessors of a dapp against the dapp access interfaces\nexport class ValidateDappAccessDiviner<TParams extends ValidateDappAccessDivinerParams = ValidateDappAccessDivinerParams> extends AbstractDiviner<\n TParams,\n ValidateDappAccessDivinerIn,\n ValidateDappAccessDivinerOut\n> {\n static override configSchemas = [ValidateDappAccessDivinerConfigSchema]\n\n protected override async divineHandler(payloads?: ValidateDappAccessDivinerIn[]): Promise<ValidateDappAccessDivinerOut[]> {\n const dappManifest = payloads?.filter(isDappPackageManifestPayload) as DappPackageManifestPayload[]\n const accessors = payloads?.filter(isUnregisteredDappAccess) as UnregisteredDappAccess[]\n const dappParams = this.params.dappParams\n\n if (dappManifest.length > 1) {\n throw new Error('Only one dapp manifest payload is allowed')\n }\n\n if (!dappManifest || dappManifest.length === 0 || accessors?.length === 0) {\n return []\n }\n\n const registeredAccessors: RegisteredDappAccess[] = []\n const failedAccessors: FailedAccessor[] = []\n\n for (const access of accessors) {\n try {\n if (access) {\n const dappAccessInterface = ValidDappAccessInterfaces[access.name]\n if (!dappAccessInterface) {\n console.warn('Invalid dapp access interface', access.name)\n continue\n }\n\n const dappManifestToTest = dappPackageManifestToPackageManifest(dappManifest[0])\n const dappChildren = await getNodeChildren(dappManifestToTest, dappParams)\n const interfaceChildren = await getNodeChildren(dappAccessInterface.manifest, dappParams)\n const valid = compareChildren(interfaceChildren, dappChildren)\n if (valid) {\n const payload: RegisteredDappAccess = {\n ...access,\n schema: RegisteredDappAccessSchema,\n timestamp: Date.now(),\n }\n registeredAccessors.push(payload)\n } else {\n const failedRegistration: FailedAccessor = {\n accessor: access,\n errorMessage: 'Invalid dapp access interface',\n schema: FailedAccessorSchema,\n }\n failedAccessors.push(failedRegistration)\n }\n }\n } catch (e) {\n failedAccessors.push(\n {\n accessor: access, errorMessage: (e as Error).message, schema: FailedAccessorSchema,\n } as FailedAccessor,\n )\n }\n }\n\n return [...registeredAccessors, ...failedAccessors]\n }\n}\n\nconst compareChildren = (interfaceChildren: Record<Address, string | null>[], dappChildren: Record<Address, string | null>[]) => {\n return interfaceChildren.every(interfaceChild =>\n Object.values(interfaceChild).every(interfaceChildName =>\n dappChildren.some(dappChild => Object.values(dappChild).includes(interfaceChildName))))\n}\n\nconst dappPackageManifestToPackageManifest = (dappPackageManifest: DappPackageManifestPayload): PackageManifestPayload => {\n return {\n ...dappPackageManifest,\n schema: PackageManifestPayloadSchema,\n }\n}\n\nconst getChildrenFromNode = async (node: NodeInstance) => {\n const nodeManifest = (await node.state())?.[0] as NodeManifestPayload\n return nodeManifest.status?.children\n}\n\nconst getNodeChildren = async (manifestToTest: PackageManifestPayload, dappParams: DappParams) => {\n const testNodes = await getNodeToTest(manifestToTest, dappParams)\n\n const children: Record<Address, string | null>[] = []\n for (const node of testNodes) {\n const nodeChildren = await getChildrenFromNode(node)\n if (nodeChildren) {\n children.push(nodeChildren)\n }\n }\n\n return children\n}\n\nconst getNodeToTest = async (manifestToTest: PackageManifestPayload, dappParams: DappParams) => {\n const dappManifestWrapper = new ManifestWrapper(manifestToTest, await HDWallet.random(), dappParams.locator ?? new ModuleFactoryLocator())\n return await dappManifestWrapper.loadNodes()\n}\n","import type { DappAccessInterface } from '@xyo-network/os-model'\nimport { RegisteredNames, RegisteredNamesInterface } from '@xyo-network/os-model'\n\nexport type ValidDappAccessInterfaces = typeof RegisteredNames\n\nexport const ValidDappAccessInterfaces: Record<string, DappAccessInterface> = { [RegisteredNames]: RegisteredNamesInterface }\n","import { assertEx } from '@xylabs/assert'\nimport { type AccountInstance } from '@xyo-network/account-model'\nimport type {\n SignerAccounts, SignersExternal, WalletKindSignerPaths,\n} from '@xyo-network/os-model'\nimport type {\n WalletKind,\n WalletSeedPhraseStore,\n} from '@xyo-network/storage-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nexport class Signers implements SignersExternal {\n private _paths: WalletKindSignerPaths\n private _signerAccounts: Map<WalletKind, SignerAccounts>\n private _walletStore: WalletSeedPhraseStore\n\n constructor(paths: WalletKindSignerPaths, walletStore: WalletSeedPhraseStore) {\n this._paths = paths\n this._walletStore = walletStore\n this._signerAccounts = new Map()\n }\n\n private get paths(): WalletKindSignerPaths {\n return assertEx(this._paths, () => 'Paths not initialized')\n }\n\n private get signerAccounts(): Map<WalletKind, SignerAccounts> {\n return assertEx(this._signerAccounts, () => 'Signer accounts not initialized')\n }\n\n private get walletStore(): WalletSeedPhraseStore {\n return assertEx(this._walletStore, () => 'Wallet store not initialized')\n }\n\n getSigner(walletKind: WalletKind, signer: string): AccountInstance | undefined {\n return this.signerAccounts.get(walletKind)?.get(signer)\n }\n\n getWalletKindSigner(walletKind: WalletKind): SignerAccounts | undefined {\n return this.signerAccounts.get(walletKind)\n }\n\n async initialize() {\n for (const [walletKindName, signerPaths] of this.paths) {\n for (const [signerName, walletPath] of signerPaths.entries()) {\n await this.initializeSigners(walletKindName, signerName, walletPath)\n }\n }\n }\n\n private async initializeSigners(walletKindName: WalletKind, signerName: string, path: string) {\n // test if the name and path are valid\n assertEx(signerName, () => 'Name not found in signer paths')\n assertEx(path, () => 'Path not found in signer paths')\n\n // test if the wallet exists\n const phrase = assertEx(await this.walletStore.get(walletKindName), () => `Wallet not found: ${walletKindName}`)\n\n if (path) {\n // get the signer map for the wallet kind or create a new one\n const signerMap = this.signerAccounts.get(walletKindName) ?? new Map()\n\n // derive the wallet from the path\n const wallet = await HDWallet.fromPhrase(phrase)\n const derivedWallet = await wallet.derivePath(path)\n\n // add the derived wallet to the signer map\n signerMap.set(signerName, derivedWallet)\n\n // set the signer map for the wallet kind\n this.signerAccounts.set(walletKindName, signerMap)\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { BaseEmitter } from '@xylabs/events'\nimport { forget } from '@xylabs/forget'\nimport type { Promisable } from '@xylabs/promise'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport { isModuleInstance } from '@xyo-network/module-model'\nimport type { AttachableNodeInstance } from '@xyo-network/node-model'\nimport { asAttachableNodeInstance } from '@xyo-network/node-model'\nimport type {\n AdapterSetCreator, NodeAdapter, NodeAdapterBaseEvents, StackBaseEvents, StackInitializer, XyOsContext,\n} from '@xyo-network/os-model'\n\n/**\n * Stack Base Class\n *\n * Listens for changes in adapter connections, update the stack node, and emits events when the stack is ready\n */\nexport class StackBase extends BaseEmitter<BaseParams, StackBaseEvents> implements StackInitializer {\n // flag to check that all adapters are initialized\n initialized = false\n\n // adapters to initialize into the stack\n private _adapterSet: NodeAdapter[]\n\n private _context: XyOsContext\n\n // stack node\n private _stack: AttachableNodeInstance | undefined\n\n // stack node module identifier for the stack\n private _stackNodeModuleId: ModuleIdentifier\n\n // list of initialized nodes\n private initializedNodes: AttachableNodeInstance[] = []\n\n // list of listeners - lister type not important since its only recalled to stop listening\n\n private listeners: {\n adapter: NodeAdapter\n eventName: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n listener: (args: any) => Promisable<void>\n }[] = []\n\n constructor(context: XyOsContext, adapterSet: AdapterSetCreator, stackNodeModuleId: ModuleIdentifier) {\n super({})\n this._context = context\n this._adapterSet = adapterSet(assertEx(this.context.kernel, 'Kernel access required'))\n this._stackNodeModuleId = stackNodeModuleId\n }\n\n get adapterSet(): NodeAdapter[] {\n return assertEx(this._adapterSet, () => `${this.stackNodeModuleId} adapters not initialized`)\n }\n\n get context(): XyOsContext {\n return assertEx(this._context, () => `${this.stackNodeModuleId} stack context not initialized`)\n }\n\n get stack(): AttachableNodeInstance {\n return assertEx(this._stack, () => `${this.stackNodeModuleId} stack node not initialized`)\n }\n\n get stackNodeModuleId(): ModuleIdentifier {\n return assertEx(this._stackNodeModuleId, () => 'Stack node module identifier not initialized')\n }\n\n initialize() {\n this.assignStack()\n // watch for adapter connection changes\n for (const adapter of this.adapterSet) {\n // listen for driver ready events\n const driverReadyListener = async ({ node }: NodeAdapterBaseEvents['driverReady']) => await this.handleDriverReady(node)\n adapter.on('driverReady', driverReadyListener)\n this.listeners.push({\n adapter: adapter, eventName: 'driverReady', listener: driverReadyListener,\n })\n\n // listen for driver error events\n const driverErrorListener = async ({ error }: NodeAdapterBaseEvents['driverError']) => {\n console.error(`Error updating ${this.stackNodeModuleId} stack node`, error)\n await this.emit('driverError', { error })\n }\n adapter.on('driverError', driverErrorListener)\n this.listeners.push({\n adapter: adapter, eventName: 'driverError', listener: driverErrorListener,\n })\n\n // start the adapter\n const startAdapter = async () => await adapter.start()\n forget(startAdapter())\n }\n }\n\n /**\n * Stops the stack\n */\n stop() {\n for (const {\n eventName, listener, adapter,\n } of this.listeners) {\n // stop the adapter\n adapter.off(eventName, listener)\n }\n }\n\n /**\n * Adds a node to the stack. Idempotent to avoid adding the\n * same node multiple times\n * @param node The node to add to the stack\n * @returns\n */\n private async addNodeToStackNode(node: AttachableNodeInstance) {\n // Locate the stack node\n const stackNode = await this.getStackNode()\n\n // If the node is already attached as there's no need to re-attach\n const existingModule = await stackNode.resolve(node.address, { direction: 'down' })\n if (isModuleInstance(existingModule)) return\n\n // Register & attach the new node\n await stackNode.register?.(node)\n await stackNode.attach?.(node.address, true)\n }\n\n private assignStack() {\n const assign = async () => {\n const stackNode = await this.getStackNode()\n this._stack = stackNode\n }\n forget(assign())\n }\n\n private async getStackNode() {\n const mod = assertEx(await this.context.root.resolve(this.stackNodeModuleId), () => `${this.stackNodeModuleId} not found`)\n return asAttachableNodeInstance(mod, () => `${this.stackNodeModuleId} not a NodeInstance`, { required: true })\n }\n\n private async handleDriverReady(node: AttachableNodeInstance) {\n try {\n // eagerly emit that the driver is ready\n await this.emit('driverReady', { node })\n\n await this.addNodeToStackNode(node)\n\n await this.updateInitializationState(node)\n } catch (error) {\n console.error(`Error updating ${this.stackNodeModuleId} stack node`, node.id, error)\n await this.emit('stackError', { error: error as Error })\n }\n }\n\n private async updateInitializationState(node: AttachableNodeInstance) {\n // update the initialized nodes list\n this.initializedNodes.push(node)\n\n // update the initialized flag\n this.initialized = this.adapterSet.every(n => n.initialized)\n\n // notify all initialized listeners\n if (this.initialized) {\n await this.emit('initialized', { stack: await this.getStackNode() })\n }\n }\n}\n","import type {\n AdapterSetCreator, StackInitializer, XyOsContext,\n} from '@xyo-network/os-model'\n\nimport type { StackBase } from './Base.ts'\n\nexport interface StackConstructor { new (context: XyOsContext, adapters: AdapterSetCreator): StackBase }\n\nexport interface UninitializedStackSet {\n adapters: AdapterSetCreator\n stack: StackConstructor\n}\n\nexport interface UninitializedStackMap { [key: string]: UninitializedStackSet }\n\nexport class StackManager {\n private initializedStacksMap: Map<string, StackInitializer> = new Map()\n private stackMap: UninitializedStackMap\n\n constructor(stackMap: UninitializedStackMap) {\n this.stackMap = stackMap\n }\n\n get stacks() {\n return Object.keys(this.initializedStacksMap)\n }\n\n private get initializedStacks() {\n return this.initializedStacksMap\n }\n\n getStack<TStack = StackBase>(key: string) {\n return this.initializedStacksMap.get(key) as TStack | undefined\n }\n\n initialize(context: XyOsContext) {\n for (const [key, stackSet] of Object.entries(this.stackMap)) {\n console.log('stack-initialize', key)\n const { stack: Stack, adapters: stackNodeModuleId } = stackSet\n const initializedStack = new Stack(context, stackNodeModuleId)\n initializedStack.initialize()\n this.initializedStacks.set(key, initializedStack)\n }\n }\n\n stop() {\n for (const stack of this.initializedStacks.values()) {\n stack.stop()\n }\n }\n}\n","import type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { AdapterSetCreator } from '@xyo-network/os-model'\nimport { ExposedNodeOuterNodeName, PubSubBridgeNodeNodeName } from '@xyo-network/os-model'\n\nimport { NetworkAdapter } from '../adapter/index.ts'\n\nexport const OsPubSubBridgeNetworkAdapters: AdapterSetCreator = (kernel: KernelExternal) => [\n new NetworkAdapter(kernel, PubSubBridgeNodeNodeName),\n new NetworkAdapter(kernel, ExposedNodeOuterNodeName),\n]\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { BaseEmitter } from '@xylabs/events'\nimport { forget } from '@xylabs/forget'\nimport type { ArchivistModuleEventData } from '@xyo-network/archivist'\nimport { asArchivistInstance } from '@xyo-network/archivist'\nimport type { KernelExternal } from '@xyo-network/kernel-model'\nimport { asAttachableNodeInstance } from '@xyo-network/node-model'\nimport type { NodeAdapter, NodeAdapterBaseEvents } from '@xyo-network/os-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { v4 as uuid } from 'uuid'\n\ntype ModuleEventPayload = {\n event: string\n name: string | undefined\n schema: 'network.xyo.kernel.module.event'\n}\n\nexport class NodeAdapterBase extends BaseEmitter<BaseParams, NodeAdapterBaseEvents> implements NodeAdapter {\n initialized = false\n\n private _id: string = ''\n\n constructor(\n private kernel: KernelExternal,\n private driverName: string,\n ) {\n super({})\n this._id = uuid()\n }\n\n get id() {\n return assertEx(this._id, () => 'NodeAdapterBase id not initialized')\n }\n\n async start() {\n try {\n // listen to events inserted into the kernel events archivist\n const moduleAttachedInsertListener = ({ payloads }: ArchivistModuleEventData['inserted']) => {\n const moduleAttachedEvent = this.findModuleEventPayloads(payloads)\n\n // loop through the event payloads\n for (const payload of moduleAttachedEvent) {\n // check if the event is for the driver\n if (payload.name === this.driverName) {\n this.validateAndReturnDriver()\n }\n }\n }\n // get the events archivist\n const eventsArchivist = await this.getEventsArchivist()\n\n // prepare the listener\n const weakRefInsertListener = new WeakRef(moduleAttachedInsertListener)\n const insertListenerRef = weakRefInsertListener.deref()\n\n // attach the listener\n if (insertListenerRef) eventsArchivist.on('inserted', insertListenerRef)\n\n // check if the driver is already attached\n const node = this.validateAndReturnDriver()\n if (node) return node\n\n // reset the initialized flag\n this.initialized = false\n } catch (error) {\n // call the onError callbacks\n await this.emit('driverError', { error: error as Error })\n }\n }\n\n private findModuleEventPayloads(payloads: Payload[]) {\n return payloads.filter((payload) => {\n const payloadToTest = payload as ModuleEventPayload\n return payloadToTest.event === 'driverReady' && payloadToTest.schema === 'network.xyo.kernel.module.event'\n }) as ModuleEventPayload[]\n }\n\n private async getEventsArchivist() {\n const mod = assertEx(await (await this.kernel.getNode()).resolve('KernelNode:ModuleEvents'), () => 'KernelNode:ModuleEvents not found')\n return asArchivistInstance(mod, () => `${mod.id} is not an archivist`, { required: true })\n }\n\n private validateAndReturnDriver() {\n const mod = this.kernel.initialized[this.driverName]\n if (mod) {\n // confirm expected shape\n const node = asAttachableNodeInstance(mod, () => `${mod.id} is not a node`, { required: true })\n\n // set the initialized flag\n this.initialized = true\n\n // call the next callbacks\n const emit = async () => await this.emit('driverReady', { node })\n forget(emit())\n\n return node\n }\n }\n}\n","import type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { AttachableNodeInstance } from '@xyo-network/node-model'\nimport type { NetworkAdapterBase } from '@xyo-network/os-model'\n\nimport { NodeAdapterBase } from './Base.ts'\n\n/**\n * Adapts Network Driver to the Operating System\n */\nexport class NetworkAdapter extends NodeAdapterBase implements NetworkAdapterBase {\n _connection: AttachableNodeInstance | undefined\n\n constructor(kernel: KernelExternal, driverName: string) {\n super(kernel, driverName)\n this.on('driverReady', ({ node }) => {\n this._connection = node\n })\n }\n\n get connection() {\n return this._connection\n }\n\n get hasConnection() {\n return !!this.connection\n }\n\n removeConnection() {\n this._connection = undefined\n }\n}\n","import type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { AttachableNodeInstance } from '@xyo-network/node-model'\n\nimport { NodeAdapterBase } from './Base.ts'\n\n/**\n * Adapts Settings Driver to the Operating System\n */\nexport class SettingsAdapter extends NodeAdapterBase {\n private _settings: AttachableNodeInstance | undefined = undefined\n\n constructor(kernel: KernelExternal, driverName: string) {\n super(kernel, driverName)\n this.on('driverReady', ({ node }) => {\n this._settings = node\n })\n }\n\n get hasSettings() {\n return !!this.settings\n }\n\n get settings() {\n return this._settings\n }\n\n removeSettings() {\n this._settings = undefined\n }\n}\n","import type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { AdapterSetCreator } from '@xyo-network/os-model'\nimport { OsSettingsNodeName } from '@xyo-network/os-model'\n\nimport { SettingsAdapter } from '../adapter/index.ts'\n\nexport const OsSettingsAdapters: AdapterSetCreator = (kernel: KernelExternal) => [new SettingsAdapter(kernel, OsSettingsNodeName)]\n","import type { KernelExternal } from '@xyo-network/kernel-model'\nimport type { AdapterSetCreator } from '@xyo-network/os-model'\nimport { XyoPublicNodeName } from '@xyo-network/os-model'\n\nimport { NetworkAdapter } from '../adapter/index.ts'\n\nexport const OsXyoPublicNetworkAdapters: AdapterSetCreator = (kernel: KernelExternal) => [\n new NetworkAdapter(kernel, XyoPublicNodeName),\n]\n","import { assertEx } from '@xylabs/assert'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { asAttachableNodeInstance, asNodeInstance } from '@xyo-network/node-model'\nimport type { AdapterSetCreator, XyOsContext } from '@xyo-network/os-model'\nimport { ExposedNodeOuterNodeName, PubSubBridgeNodeNodeName } from '@xyo-network/os-model'\n\nimport type { EventBusPubSubConnection } from '../event/index.ts'\nimport { osPubSubNetworkReadyConnection, OsPubSubNetworkReadyEvent } from '../event/index.ts'\nimport { initializeXns } from '../lib/index.ts'\nimport { StackBase } from './Base.ts'\n\nexport class OsPubSubNetworkStack extends StackBase {\n protected _exposedNode: NodeInstance | undefined\n protected _exposedNodeOuter: NodeInstance | undefined\n\n private busConnection: EventBusPubSubConnection = osPubSubNetworkReadyConnection()\n\n constructor(context: XyOsContext, adapters: AdapterSetCreator) {\n super(context, adapters, 'OsPubSubNetworkStackNode')\n }\n\n get exposedNode() {\n return this._exposedNode\n }\n\n get exposedNodeOuter() {\n return this._exposedNodeOuter\n }\n\n override initialize() {\n super.initialize()\n // connect to the bus\n this.context.eventBus.addConnection(this.busConnection)\n this.on('initialized', () => this.busConnection.emit(OsPubSubNetworkReadyEvent, {}))\n\n // listen for drivers\n super.on('driverReady', async ({ node }) => {\n if (node.id === PubSubBridgeNodeNodeName) {\n const httpBridge = assertEx(await node.resolve('NsHttpBridge'), () => 'HttpBridge not found')\n const xnsNode = asNodeInstance(await httpBridge.resolve('XNS'))\n\n if (xnsNode) {\n const initializedXns = await initializeXns(xnsNode)\n console.log(`Xns: ${initializedXns}`)\n } else {\n console.log('Xns: Failed to contact Xns Node')\n }\n }\n })\n\n super.on('driverReady', async ({ node }) => {\n if (node.id === ExposedNodeOuterNodeName) {\n this._exposedNodeOuter = node\n const mod = assertEx(await node.resolve('ExposedNode'), () => 'ExposedNode not found')\n const exposedNode = asAttachableNodeInstance(mod, () => 'ExposedNode is not a node')\n this._exposedNode = exposedNode\n }\n })\n super.on('driverError', error => console.error('Unable to assign exposed node(s) to context', error))\n }\n\n override stop() {\n super.stop()\n this._exposedNode = undefined\n this._exposedNodeOuter = undefined\n // prevent throwing an error if the connection is not initialized\n if (this.busConnection._id)\n this.context.eventBus.removeConnection(this.busConnection.id)\n }\n}\n","import type { AdapterSetCreator, XyOsContext } from '@xyo-network/os-model'\n\nimport type { EventBusPubSubConnection } from '../event/index.ts'\nimport { osSettingsReadyConnection, OsSettingsReadyEvent } from '../event/index.ts'\nimport { StackBase } from './Base.ts'\n\nexport class OsSettingsStack extends StackBase {\n private busConnection: EventBusPubSubConnection = osSettingsReadyConnection()\n\n constructor(context: XyOsContext, adapters: AdapterSetCreator) {\n super(context, adapters, 'OsSettingsStackNode')\n }\n\n override initialize() {\n super.initialize()\n // connect to the bus\n this.context.eventBus.addConnection(this.busConnection)\n this.on('initialized', () => this.busConnection.emit(OsSettingsReadyEvent, {}))\n }\n\n override stop() {\n super.stop()\n }\n}\n","import type { AdapterSetCreator, XyOsContext } from '@xyo-network/os-model'\nimport { XyoPublicNodeName } from '@xyo-network/os-model'\n\nimport type { EventBusPubSubConnection } from '../event/index.ts'\nimport { osXyoPublicNetworkReadyConnection, OsXyoPublicNetworkReadyEvent } from '../event/index.ts'\nimport { StackBase } from './Base.ts'\n\nexport class XyoPublicNetworkStack extends StackBase {\n private busConnection: EventBusPubSubConnection = osXyoPublicNetworkReadyConnection()\n\n constructor(context: XyOsContext, adapters: AdapterSetCreator) {\n super(context, adapters, 'OsXyoPublicNetworkStackNode')\n }\n\n override initialize() {\n super.initialize()\n // connect to the bus\n this.context.eventBus.addConnection(this.busConnection)\n this.on('initialized', () => this.busConnection.emit(OsXyoPublicNetworkReadyEvent, {}))\n\n this.on('driverReady', ({ node }) => {\n if (node.id === XyoPublicNodeName) {\n console.log('XyoPublicNode ready')\n }\n })\n this.on('driverError', error => console.error('Error loading driver', error))\n }\n\n override stop() {\n super.stop()\n }\n}\n","import {\n OsPubSubBridgeNetworkAdapters, OsSettingsAdapters, OsXyoPublicNetworkAdapters,\n} from '../adapters/index.ts'\nimport type { UninitializedStackMap } from './Manager.ts'\nimport { OsPubSubNetworkStack } from './OsPubSubNetworkStack.ts'\nimport { OsSettingsStack } from './OsSettingsStack.ts'\nimport { XyoPublicNetworkStack } from './XyoPublicNetworkStack.ts'\n\nexport const OsStackMap: UninitializedStackMap = {\n osPubSubNetworkStack: {\n stack: OsPubSubNetworkStack,\n adapters: OsPubSubBridgeNetworkAdapters,\n },\n xyoPublicNetworkStack: {\n stack: XyoPublicNetworkStack,\n adapters: OsXyoPublicNetworkAdapters,\n },\n osSettingsStack: {\n stack: OsSettingsStack,\n adapters: OsSettingsAdapters,\n },\n}\n","import type { Argv } from 'yargs'\n\nimport type { TemplateName } from '../lib/index.ts'\nimport { createFromTemplate } from '../lib/index.ts'\n\nexport const commandCreate = (argv: Argv) => {\n return argv.command('create [template] <target>', 'Create an xyos project', (yargs) => {\n return yargs\n .positional('template', {\n choices: ['react', 'headless', 'dapp', 'diviner', 'witness'] as TemplateName[],\n description: 'Template to use',\n type: 'string',\n })\n .positional('target', {\n description: 'Location into which to create the template project',\n type: 'string',\n })\n }, async ({ template, target }) => {\n console.log(`Using template ${template} at location ${target}`)\n return await createFromTemplate({ target, template })\n })\n}\n","import type { Argv } from 'yargs'\n\nexport const commandManifest = (argv: Argv) => {\n return argv.command('manifest [action] <target>', 'Create an xyos project', (yargs) => {\n return yargs\n .positional('action', {\n choices: ['create', 'validate', 'display'],\n description: 'Action to take on manifest',\n type: 'string',\n })\n .positional('target', {\n description: 'Location of manifest file',\n type: 'string',\n })\n }, async ({ action, target }) => {\n console.log(`Taking action [${action}] on manifest at ${target}`)\n return await Promise.resolve()\n })\n}\n","import type { NativeKernelDrivers } from '@xyo-network/kernel-model'\nimport type { Argv } from 'yargs'\n\nimport { headless } from '../lib/index.ts'\n\nexport const commandStart = (argv: Argv) => {\n return argv.command('start', 'Start xyOS in headless mode', (yargs) => {\n return yargs\n .option('config', {\n alias: 'c',\n description: 'Config file to use',\n type: 'string',\n }).option('manifest', {\n alias: 'm',\n description: 'Manifest file to use',\n type: 'string',\n }).option('kernelDriver', {\n alias: 'k',\n description: 'Kernel driver to load',\n type: 'string',\n })\n }, async ({\n config, manifest, kernelDriver,\n }) => {\n if (config) {\n console.log(`Using config: ${config}`)\n }\n if (config) {\n console.log(`Using manifest: ${manifest}`)\n }\n await headless({\n manifest, config, kernelDrivers: kernelDriver ? [kernelDriver as NativeKernelDrivers] : [],\n })\n })\n}\n"],"mappings":"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","names":["yargs","boot","Kernel","HDWallet","assertEx","ModuleFactoryLocator","assertEx","forget","ModuleFactoryLocator","DappMode","assertEx","asArchivistInstance","asDivinerInstance","PayloadBuilder","assertEx","asArchivistInstance","asDivinerInstance","PayloadDivinerQuerySchema","PayloadBuilder","PayloadBuilder","PayloadDivinerQuerySchema","uuid","uuid","existingPayload","PayloadDivinerQuerySchema","assertEx","ManifestWrapper","ModuleFactoryLocator","assertEx","BaseEmitter","ModuleFactoryLocator","Mutex","assertEx","ModuleFactoryLocator","ManifestWrapper","HDWallet","ManifestWrapper","ModuleFactoryLocator","HDWallet","ManifestWrapper","HDWallet","ModuleFactoryLocator","HDWallet","ModuleFactoryLocator","forget","DappMode","assertEx","HDWallet","assertEx","BaseEmitter","forget","assertEx","BaseEmitter","forget","asArchivistInstance","asAttachableNodeInstance","uuid","assertEx","asAttachableNodeInstance","ExposedNodeOuterNodeName","PubSubBridgeNodeNodeName","PubSubBridgeNodeNodeName","assertEx","ExposedNodeOuterNodeName","asAttachableNodeInstance","XyoPublicNodeName","XyoPublicNodeName","ModuleFactoryLocator","assertEx","HDWallet","Kernel","boot","yargs","yargs","yargs"]}