@xyo-network/os-runtime 7.0.1 → 7.1.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.
- package/dist/neutral/DappCallerBase.d.ts.map +1 -1
- package/dist/neutral/OsCallerBase.d.ts.map +1 -1
- package/dist/neutral/PubSubBridgeCaller.d.ts.map +1 -1
- package/dist/neutral/XyOs.d.ts +2 -3
- package/dist/neutral/XyOs.d.ts.map +1 -1
- package/dist/neutral/XyOsBase.d.ts +2 -1
- package/dist/neutral/XyOsBase.d.ts.map +1 -1
- package/dist/neutral/XyOsDapp.d.ts +2 -1
- package/dist/neutral/XyOsDapp.d.ts.map +1 -1
- package/dist/neutral/access/Caller.d.ts +3 -3
- package/dist/neutral/access/Caller.d.ts.map +1 -1
- package/dist/neutral/access/interfaces/registered-names/helpers/AccessNodeQueries.d.ts.map +1 -1
- package/dist/neutral/access/interfaces/registered-names/helpers/resource/AbstractXnsCaller.d.ts.map +1 -1
- package/dist/neutral/access/interfaces/registered-names/helpers/resource/RegistrationsResource.d.ts +2 -2
- package/dist/neutral/access/interfaces/registered-names/helpers/resource/RegistrationsResource.d.ts.map +1 -1
- package/dist/neutral/adapter/Base.d.ts +2 -2
- package/dist/neutral/adapter/Base.d.ts.map +1 -1
- package/dist/neutral/classes/settings/CallerBase.d.ts.map +1 -1
- package/dist/neutral/dapp/context/creator/Creator.d.ts +5 -5
- package/dist/neutral/dapp/context/creator/Creator.d.ts.map +1 -1
- package/dist/neutral/dapp/context/creator/DefaultPayloads/DappAccessPayloads.d.ts.map +1 -1
- package/dist/neutral/dapp/context/creator/DefaultPayloads/DefaultPayloads.d.ts +1 -1
- package/dist/neutral/dapp/context/creator/DefaultPayloads/DefaultPayloads.d.ts.map +1 -1
- package/dist/neutral/dapp/context/creator/DefaultPayloads/NodeInfoPayload.d.ts +1 -1
- package/dist/neutral/dapp/context/creator/DefaultPayloads/NodeInfoPayload.d.ts.map +1 -1
- package/dist/neutral/dapp/context/creator/ExternalModulePermissions/ExternalModulePermissions.d.ts +2 -2
- package/dist/neutral/dapp/context/creator/ExternalModulePermissions/ExternalModulePermissions.d.ts.map +1 -1
- package/dist/neutral/index.mjs +81 -37
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/lib/NameTransforms.d.ts.map +1 -1
- package/dist/neutral/lib/PayloadStore.d.ts +1 -1
- package/dist/neutral/lib/PayloadStore.d.ts.map +1 -1
- package/dist/neutral/registration/DappRegistrationService.d.ts +6 -6
- package/dist/neutral/registration/DappRegistrationService.d.ts.map +1 -1
- package/dist/neutral/registration/DappRegistry.d.ts +1 -1
- package/dist/neutral/registration/DappRegistry.d.ts.map +1 -1
- package/dist/neutral/system/ManageSystemDapps.d.ts +5 -5
- package/dist/neutral/system/ManageSystemDapps.d.ts.map +1 -1
- package/dist/neutral/wallet/DappSeedPhraseRepository.d.ts.map +1 -1
- package/dist/node/DappCallerBase.d.ts.map +1 -1
- package/dist/node/OsCallerBase.d.ts.map +1 -1
- package/dist/node/PubSubBridgeCaller.d.ts.map +1 -1
- package/dist/node/XyOs.d.ts +2 -3
- package/dist/node/XyOs.d.ts.map +1 -1
- package/dist/node/XyOsBase.d.ts +2 -1
- package/dist/node/XyOsBase.d.ts.map +1 -1
- package/dist/node/XyOsDapp.d.ts +2 -1
- package/dist/node/XyOsDapp.d.ts.map +1 -1
- package/dist/node/access/Caller.d.ts +3 -3
- package/dist/node/access/Caller.d.ts.map +1 -1
- package/dist/node/access/interfaces/registered-names/helpers/AccessNodeQueries.d.ts.map +1 -1
- package/dist/node/access/interfaces/registered-names/helpers/resource/AbstractXnsCaller.d.ts.map +1 -1
- package/dist/node/access/interfaces/registered-names/helpers/resource/RegistrationsResource.d.ts +2 -2
- package/dist/node/access/interfaces/registered-names/helpers/resource/RegistrationsResource.d.ts.map +1 -1
- package/dist/node/adapter/Base.d.ts +2 -2
- package/dist/node/adapter/Base.d.ts.map +1 -1
- package/dist/node/classes/settings/CallerBase.d.ts.map +1 -1
- package/dist/node/dapp/context/creator/Creator.d.ts +5 -5
- package/dist/node/dapp/context/creator/Creator.d.ts.map +1 -1
- package/dist/node/dapp/context/creator/DefaultPayloads/DappAccessPayloads.d.ts.map +1 -1
- package/dist/node/dapp/context/creator/DefaultPayloads/DefaultPayloads.d.ts +1 -1
- package/dist/node/dapp/context/creator/DefaultPayloads/DefaultPayloads.d.ts.map +1 -1
- package/dist/node/dapp/context/creator/DefaultPayloads/NodeInfoPayload.d.ts +1 -1
- package/dist/node/dapp/context/creator/DefaultPayloads/NodeInfoPayload.d.ts.map +1 -1
- package/dist/node/dapp/context/creator/ExternalModulePermissions/ExternalModulePermissions.d.ts +2 -2
- package/dist/node/dapp/context/creator/ExternalModulePermissions/ExternalModulePermissions.d.ts.map +1 -1
- package/dist/node/index.mjs +81 -37
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/lib/NameTransforms.d.ts.map +1 -1
- package/dist/node/lib/PayloadStore.d.ts +1 -1
- package/dist/node/lib/PayloadStore.d.ts.map +1 -1
- package/dist/node/registration/DappRegistrationService.d.ts +6 -6
- package/dist/node/registration/DappRegistrationService.d.ts.map +1 -1
- package/dist/node/registration/DappRegistry.d.ts +1 -1
- package/dist/node/registration/DappRegistry.d.ts.map +1 -1
- package/dist/node/scripts/xyos/index.mjs +44 -28
- package/dist/node/scripts/xyos/index.mjs.map +1 -1
- package/dist/node/system/ManageSystemDapps.d.ts +5 -5
- package/dist/node/system/ManageSystemDapps.d.ts.map +1 -1
- package/dist/node/wallet/DappSeedPhraseRepository.d.ts.map +1 -1
- package/package.json +49 -49
- package/src/DappCallerBase.ts +5 -1
- package/src/OsCallerBase.ts +5 -1
- package/src/PubSubBridgeCaller.ts +4 -1
- package/src/XyOs.ts +1 -1
- package/src/XyOsBase.ts +2 -1
- package/src/XyOsDapp.ts +2 -1
- package/src/access/Caller.ts +17 -5
- package/src/access/interfaces/registered-names/helpers/AccessNodeQueries.ts +12 -4
- package/src/access/interfaces/registered-names/helpers/resource/AbstractXnsCaller.ts +5 -1
- package/src/access/interfaces/registered-names/helpers/resource/RegistrationsResource.ts +3 -1
- package/src/adapter/Base.ts +6 -2
- package/src/classes/menu/Queries.ts +1 -1
- package/src/classes/settings/CallerBase.ts +4 -1
- package/src/dapp/context/creator/Creator.ts +21 -7
- package/src/dapp/context/creator/DefaultPayloads/DappAccessPayloads.ts +5 -2
- package/src/dapp/context/creator/DefaultPayloads/DefaultPayloads.ts +12 -4
- package/src/dapp/context/creator/DefaultPayloads/NodeInfoPayload.ts +5 -2
- package/src/dapp/context/creator/ExternalModulePermissions/ExternalModulePermissions.ts +15 -5
- package/src/lib/NameTransforms.ts +4 -1
- package/src/lib/PayloadStore.ts +4 -1
- package/src/registration/DappRegistrationService.ts +20 -6
- package/src/registration/DappRegistry.ts +4 -1
- package/src/system/ManageSystemDapps.ts +17 -5
- package/src/wallet/DappSeedPhraseRepository.ts +4 -1
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/access/Caller.ts","../../src/OsCallerBase.ts","../../src/RunningDappCache.ts","../../src/dapp/context/creator/createDappContext.ts","../../src/wallet/DappSeedPhraseRepository.ts","../../src/dapp/context/creator/Creator.ts","../../src/DappCallerBase.ts","../../src/manifest/manifestReplacementTokens.ts","../../src/manifest/os-node.manifest.json","../../src/dapp/context/creator/DefaultPayloads/DefaultPayloads.ts","../../src/classes/lib/Insertable.ts","../../src/dapp/context/creator/DefaultPayloads/DappAccessPayloads.ts","../../src/dapp/context/creator/DefaultPayloads/NodeInfoPayload.ts","../../src/dapp/context/creator/ExternalModulePermissions/ExternalModulePermissions.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/DappsReady.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/isEqual.ts","../../src/lib/isPayload.ts","../../src/lib/ModuleNames.ts","../../src/lib/ModuleAccountPaths.ts","../../src/lib/NameTransforms.ts","../../src/lib/PayloadStore.ts","../../src/lib/tokenPlacesSplit.ts","../../src/loadOsNode.ts","../../src/registration/DappRegistrationService.ts","../../src/intent/Caller.ts","../../src/intent/Resource.ts","../../src/system/ManageSystemDapps.ts","../../src/system/Queries.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/access/RunningAccessDappCache.ts","../../src/access/interfaces/registered-names/helpers/AccessNodeQueries.ts","../../src/access/interfaces/registered-names/helpers/resource/AbstractXnsCaller.ts","../../src/access/interfaces/registered-names/helpers/resource/RegistrationsResource.ts","../../src/access/interfaces/registered-names/helpers/resource/RegistrationsResourceQueries.ts","../../src/access/Queries.ts","../../src/access/Resource.ts","../../src/Caller.ts","../../src/DefaultsQueries.ts","../../src/classes/dapp/DefaultsResource.ts","../../src/classes/menu/Caller.ts","../../src/classes/menu/Resource.ts","../../src/classes/menu/Queries.ts","../../src/classes/settings/badge/Caller.ts","../../src/classes/settings/CallerBase.ts","../../src/classes/settings/badge/Queries.ts","../../src/classes/settings/badge/Resource.ts","../../src/classes/settings/Caller.ts","../../src/utils/buildWalletSeedPhrasePayload.ts","../../src/utils/getApiDomain.ts","../../src/utils/renameObjKey.ts","../../src/classes/settings/SettingsQueries.ts","../../src/classes/settings/Resource.ts","../../src/helpers/monitor/XyOsMonitor.ts","../../src/initializer/DappInitializer.ts","../../src/profileModuleEvents.ts","../../src/PubSubBridgeCaller.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport { asNodeInstance } from '@xyo-network/node-model'\nimport type {\n PostRegistrationHandler,\n RegisteredDappAccess,\n RegisteredDappSet,\n RegisteredDappSetResult,\n XyOsContext,\n} from '@xyo-network/os-model'\nimport { isRegisteredDappAccessDappSet } from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nimport { OsCallerBase } from '../OsCallerBase.ts'\nimport { RunningDappCache } from '../RunningDappCache.ts'\nimport { RunningDappAccessCache } from './RunningAccessDappCache.ts'\n\n/**\n * Caller for managing Dapp Access Nodes\n * Start nodes that have been registered as accessible\n * Grab their Access Node(s)\n * Put RegisteredDappAccess payloads in RegisteredDappInterfacesArchivist\n * Keep Service running that can service requests for Access Nodes\n **/\nexport class DappAccessCaller extends OsCallerBase implements PostRegistrationHandler {\n constructor(\n context: XyOsContext,\n private registeredDapps: RegisteredDappSetResult[],\n private allowedNames: string[],\n private xnsNodeUrl: string | undefined,\n private xnsNetwork: string | undefined,\n private platformLocator = new ModuleFactoryLocator(),\n ) {\n super(context)\n }\n\n async start() {\n const registeredDappAccessDappSets = this.registeredDapps.filter(isRegisteredDappAccessDappSet)\n for (const registeredDappSet of registeredDappAccessDappSets) {\n const context = await this.buildRunningDappCache(registeredDappSet, this.allowedNames)\n\n for (const dappAccessor of registeredDappSet.dapp.accessors) {\n await this.cacheAccessNode(dappAccessor, context)\n await this.saveRegisteredDappInterfaces(dappAccessor)\n }\n }\n }\n\n private async buildRunningDappCache(registeredDappSet: RegisteredDappSet, allowedNames: string[]) {\n const { context } = await RunningDappCache.findOrCreate(registeredDappSet.dapp, this.context, allowedNames, this.xnsNodeUrl, this.xnsNetwork)\n if (!context) throw new Error('Dapp context not found')\n return context\n }\n\n private async cacheAccessNode(dappAccessor: RegisteredDappAccess, context: XyOsContext) {\n const accessNodeId = dappAccessor.rootModuleId\n const accessNodeModule = assertEx(await context.root.resolve(accessNodeId), () => 'Access Node Module not found')\n const accessNode = asNodeInstance(accessNodeModule, () => 'Access Node Module is not a NodeInstance', { required: true })\n\n RunningDappAccessCache.set(dappAccessor.registeringDappId, accessNode)\n }\n\n private async saveRegisteredDappInterfaces(registeredDappAccess: RegisteredDappAccess) {\n const archivist = await this.getRegisteredDappInterfacesArchivist()\n\n const hash = await PayloadBuilder.dataHash(registeredDappAccess)\n const [existing] = await archivist.get([hash])\n if (existing) return\n\n await archivist.insert([registeredDappAccess])\n console.debug('[DEBUG] -', `Registered ${registeredDappAccess.registeringDappId} with ${registeredDappAccess.name} interface`)\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 { assertEx } from '@xylabs/assert'\nimport type {\n DappId, RegisteredDapp, WindowDappNodeSet, XyOsContext,\n} from '@xyo-network/os-model'\nimport { Mutex } from 'async-mutex'\n\nimport { createDappContext, DappContextCreator } from './dapp/index.ts'\nimport { XyOs } from './XyOs.ts'\n\nconst findOrCreateMutex = new Mutex()\n\n/**\n * A cache for running node instances\n */\nexport class RunningDappCache {\n private static _cache: { [key: DappId]: WindowDappNodeSet } = {}\n\n static async findOrCreate(\n dapp: RegisteredDapp,\n xyOs: XyOsContext,\n allowedNames: string[],\n xnsNodeUrl: string | undefined,\n xnsNetwork: string | undefined,\n ): Promise<WindowDappNodeSet> {\n const dappId = dapp.config.name\n\n return await XyOs.monitor<WindowDappNodeSet>(\n async () =>\n await findOrCreateMutex.runExclusive(async () => {\n const existingWindowDappSet = RunningDappCache.get(dappId)\n if (existingWindowDappSet) {\n console.debug('[DEBUG]', `RunningDappCache, using existing node for ${dappId}`)\n const existingDappContext = assertEx(existingWindowDappSet.context, () => 'No context found in existing dapp node')\n await DappContextCreator.primeDappArchivist(existingDappContext, xyOs, dappId)\n return existingWindowDappSet\n }\n console.debug('[DEBUG]', 'RunningDappCache:creating', dappId)\n const windowDappSet = await createDappContext(dapp, xyOs, allowedNames, xnsNodeUrl, xnsNetwork)\n RunningDappCache.set(dappId, windowDappSet)\n\n return windowDappSet\n }),\n { additionalProperties: { dappId }, name: 'Loading dApp' },\n )\n }\n\n static get(key: DappId): WindowDappNodeSet | undefined {\n return this._cache[key]\n }\n\n static has(key?: DappId) {\n return key ? !!this._cache[key] : false\n }\n\n static set(key: DappId, value: WindowDappNodeSet) {\n this._cache[key] = value\n }\n}\n","import { GenericPayloadDiviner } from '@xyo-network/diviner-payload-generic'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { ModuleFactoryLocatorInstance } from '@xyo-network/module-model'\nimport type {\n RegisteredDapp, WindowDappNodeSet, XyOsContext,\n} from '@xyo-network/os-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { DappNodesCreatorParams } from '../../../classes/lib/index.ts'\nimport { DappSeedPhraseRepository } from '../../../wallet/index.ts'\nimport { DappContextCreator } from './Creator.ts'\n\nconst GenericPayloadDivinerTags = { 'network.xyo.generic.payload.diviner': 'GenericPayloadDiviner' }\n\nconst resolveLocator = (existingLocator?: ModuleFactoryLocatorInstance): ModuleFactoryLocatorInstance => {\n const locator = existingLocator ?? new ModuleFactoryLocator()\n locator.register(GenericPayloadDiviner.factory(), GenericPayloadDivinerTags)\n return locator\n}\n\nexport const createDappContext = async (\n dapp: RegisteredDapp,\n context: XyOsContext,\n allowedNames: string[],\n xnsNodeUrl: string | undefined,\n xnsNetwork: string | undefined,\n): Promise<WindowDappNodeSet> => {\n console.log('createNodes')\n try {\n const dappSeedPhraseRepository = new DappSeedPhraseRepository(context, allowedNames)\n const seedPhrase = await dappSeedPhraseRepository.request(dapp.config.walletId)\n if (!seedPhrase) {\n throw new Error(`unable to find seed phrase for walletId: ${JSON.stringify(dapp.config, null, 2)}`)\n }\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const dappName = dapp.config.name\n const { config: dappConfig, params: dappParams } = dapp\n\n const locator = resolveLocator((dappParams.locator ?? new ModuleFactoryLocator()).merge(context.platformLocator))\n\n const params: DappNodesCreatorParams = {\n config: { dappName, payload: dappConfig.manifest },\n context,\n locator,\n wallet,\n }\n const dappContextCreator = await DappContextCreator.create(params, xnsNodeUrl, xnsNetwork)\n\n const dappContext = await dappContextCreator.loadDappContext(context)\n\n return {\n context: dappContext,\n dappWallet: wallet,\n }\n } catch (e) {\n const error = e as Error\n console.error(`Error creating dappWindow node: ${error.message}`)\n console.error(`Error creating dappWindow node: ${error.stack}`)\n throw new Error(`Error creating dappWindow node: ${error.message}`)\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 { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { replaceManifestTokens } from '@xyo-network/kernel'\nimport { DappPackageManifestPayloadSchema } from '@xyo-network/manifest'\nimport type { ManifestWrapper } from '@xyo-network/manifest-wrapper'\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, DappPackageManifestPayload, ExternalModule, XyOsContext,\n} from '@xyo-network/os-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport type { DappNodesCreatorParams } from '../../../classes/lib/index.ts'\nimport { DappCallerBase } from '../../../DappCallerBase.ts'\nimport { manifestReplacementTokens } from '../../../manifest/index.ts'\nimport { DefaultPayloads } from './DefaultPayloads/index.ts'\nimport { ExternalModulePermissions } from './ExternalModulePermissions/index.ts'\n\nexport type TargetDappManifestParams = ConstructorParameters<typeof ManifestWrapper<DappPackageManifestPayload>>\n\nexport class DappContextCreator {\n // Designated offset path for the wallet used by windowed dapps. In the future, other offsets could be used for other dapp modes\n private static DAPP_WINDOW_WALLET_PATH = '1'\n\n constructor(\n private targetDappManifestParams: TargetDappManifestParams,\n private dappId: DappId,\n private context: XyOsContext,\n private rootWallet: WalletInstance,\n private externalPermissions?: ExternalModule[],\n private sharedLocator?: ModuleFactoryLocatorInstance,\n ) {}\n\n static async create(params: DappNodesCreatorParams, xnsNodeUrl: string | undefined, xnsNetwork: string | undefined) {\n const {\n config, locator, context, wallet,\n } = params\n const {\n payload, dappName, publicChildren, privateChildren,\n } = config\n\n const { external, manifestPayload } = this.parseDappPackageManifestPayload(payload, xnsNodeUrl, xnsNetwork)\n console.debug('[DEBUG] dApp manifest', manifestPayload)\n\n // derive a wallet for the dapp to use from the root wallet\n const dappWallet = await wallet.derivePath(DappContextCreator.DAPP_WINDOW_WALLET_PATH)\n const targetDappManifestParams: TargetDappManifestParams = [manifestPayload,\n dappWallet,\n locator ?? new ModuleFactoryLocator(),\n publicChildren,\n privateChildren]\n\n const instance = new this(targetDappManifestParams, dappName, context, wallet, external?.modules, locator)\n return instance\n }\n\n // Add default payloads to the archivist shared between the os and the dapp\n static async primeDappArchivist(dappContext: XyOsContext, osContext: XyOsContext, dappName: DappId) {\n const dappCaller = new DappCallerBase(dappContext)\n const dappArchivist = await dappCaller.getDappArchivist()\n const defaultPayloads = new DefaultPayloads(dappArchivist, osContext, dappName)\n\n await defaultPayloads.insert()\n }\n\n // Reset the dapp archivist to remove all payloads\n static async resetDappArchivist(context: XyOsContext) {\n const dappModule = await context.root.resolve('DappArchivist')\n const dappArchivist = assertEx(asArchivistInstance(dappModule), () => 'resetDappArchivist: DappArchivist not found')\n\n await dappArchivist.clear()\n }\n\n private static parseDappPackageManifestPayload(payload: DappPackageManifestPayload, xnsNodeUrl: string | undefined, xnsNetwork: string | undefined) {\n // extract external permissions from package manifest payload\n const { external, ...manifestWithoutExternals } = payload\n const manifestPayloadRaw: DappPackageManifestPayload = {\n ...manifestWithoutExternals,\n schema: DappPackageManifestPayloadSchema,\n }\n console.log('DappContextCreator:parseDappPackageManifestPayload', xnsNodeUrl, xnsNetwork)\n const manifestPayload = replaceManifestTokens(manifestPayloadRaw, manifestReplacementTokens(xnsNodeUrl, xnsNetwork))\n return { external, manifestPayload }\n }\n\n async loadDappContext(context: XyOsContext): Promise<XyOsContext> {\n console.log('DappNodesCreator:loadDappContext', this.dappId)\n // build nodes and attach to dappNodes to dappWindowNode\n const dapp\n = (await context.dappByName(this.dappId))\n ?? (await (async () => {\n const dapp = await context.buildDapp(this.targetDappManifestParams[0], this.dappId)\n await dapp.boot(this.rootWallet, this.sharedLocator)\n return dapp\n })())\n await this.handleExternalModulePermissions(dapp.root)\n await DappContextCreator.primeDappArchivist(dapp, this.context, this.dappId)\n\n return dapp\n }\n\n // try to satisfy the external permissions requested by a dapp\n private async handleExternalModulePermissions(dappWindowNode: NodeInstance) {\n const externalModulePermissions = new ExternalModulePermissions(this.context, dappWindowNode, this.dappId, this.externalPermissions)\n await externalModulePermissions.permit()\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 { getXnsDomain } from '@xyo-network/kernel'\n\nexport const manifestReplacementTokens = (\n xnsNodeUrl: string | undefined,\n xnsNetwork: string | undefined,\n) => ({ '[REPLACE_WITH_NS_NODE_URL]': getXnsDomain(xnsNodeUrl, xnsNetwork) })\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 type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { DappName, XyOsContext } from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport type { InsertableConstructor } from '../../../../classes/lib/index.ts'\nimport { createInsertable } from '../../../../classes/lib/index.ts'\nimport { DappAccessPayloads } from './DappAccessPayloads.ts'\nimport { NodeInfoPayload } from './NodeInfoPayload.ts'\n\nexport class DefaultPayloads {\n constructor(\n private dappArchivist: ArchivistInstance,\n private xyOs: XyOsContext,\n private dappName: DappName,\n ) {}\n\n async insert() {\n const insertables: InsertableConstructor[] = [NodeInfoPayload, DappAccessPayloads]\n const insertPayloads: Payload[] = []\n for (const insertable of insertables) {\n const classInstance = createInsertable(insertable, this.xyOs, this.dappName)\n const payloads = await classInstance.payloads()\n insertPayloads.push(...payloads)\n }\n for (const payload of insertPayloads) {\n const [existing] = await this.dappArchivist.get([await PayloadBuilder.dataHash(payload)])\n if (existing) continue\n await this.dappArchivist.insert([payload])\n }\n }\n}\n","import type { DappName, XyOsContext } from '@xyo-network/os-model'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport interface InsertableConstructor { new (_xyOs: XyOsContext, dappName: DappName): DefaultPayloadsInsertable }\n\ntype InsertableConstructorParams = ConstructorParameters<InsertableConstructor>\n\nexport interface DefaultPayloadsInsertable { payloads(): Promise<Payload[]> }\n\nexport const createInsertable = (insertable: InsertableConstructor, ...params: InsertableConstructorParams) => new insertable(...params)\n","import type { DappName, XyOsContext } from '@xyo-network/os-model'\n\nimport type { DefaultPayloadsInsertable } from '../../../../classes/lib/index.ts'\nimport { OsCallerBase } from '../../../../OsCallerBase.ts'\n\nexport class DappAccessPayloads implements DefaultPayloadsInsertable {\n constructor(\n private context: XyOsContext,\n _dappName: DappName,\n ) {}\n\n async payloads() {\n const osCaller = new OsCallerBase(this.context)\n const archivist = await osCaller.getRegisteredDappInterfacesArchivist()\n return await archivist.all()\n }\n}\n","import type { Address } from '@xylabs/hex'\nimport type {\n DappName, NodeOsInfo, XyOsContext,\n} from '@xyo-network/os-model'\nimport { NodeOsInfoSchema } from '@xyo-network/os-model'\n\nimport type { DefaultPayloadsInsertable } from '../../../../classes/lib/index.ts'\n\nexport class NodeInfoPayload implements DefaultPayloadsInsertable {\n constructor(\n private _context: XyOsContext,\n _dappName: DappName,\n ) {}\n\n async payloads() {\n const exposedNode = this._context.exposedNode\n if (exposedNode) {\n console.debug('[DEBUG]', 'Found Exposed Node Address', exposedNode?.address)\n } else {\n console.error('exposedNode not found')\n }\n\n await Promise.resolve()\n const nodeOsInfo: NodeOsInfo = {\n publicAddress: exposedNode?.address ?? '' as Address,\n schema: NodeOsInfoSchema,\n }\n return [nodeOsInfo]\n }\n}\n","import type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type {\n DappName, ExternalModule, XyOsContext,\n} from '@xyo-network/os-model'\n\n// Dapps can only request specific modules from the parent node\nconst ALLOWED_MODULES_FROM_PARENT = ['IntentArchivist', 'OsSettingsNode', 'OsPubSubNetworkStackNode', 'OsXyoPublicNetworkStackNode'] as const\n\nexport class ExternalModulePermissions {\n constructor(\n private context: XyOsContext,\n private dappWindowNode: NodeInstance,\n private dappName: DappName,\n private externalPermissions?: ExternalModule[],\n ) {}\n\n async permit() {\n for (const permission of this.externalPermissions ?? []) {\n await this.permitExternalModule(permission)\n }\n }\n\n private getExternalModuleName(permission: ExternalModule) {\n return permission.name as (typeof ALLOWED_MODULES_FROM_PARENT)[number]\n }\n\n private async permitExternalModule(externalPermission: ExternalModule) {\n const externalModuleName = this.getExternalModuleName(externalPermission)\n\n if (ALLOWED_MODULES_FROM_PARENT.includes(externalModuleName)) {\n const mod = await this.resolveExternalModule(externalModuleName)\n await this.registerAndAttachModule(mod)\n } else {\n console.warn(`${this.dappName} requested ${externalModuleName} but it was not fulfilled`)\n }\n }\n\n private async registerAndAttachModule(mod?: AttachableModuleInstance) {\n if (mod) {\n await this.dappWindowNode.register?.(mod)\n await this.dappWindowNode.attach(mod.address, true)\n }\n }\n\n private async resolveExternalModule(id: ModuleIdentifier): Promise<AttachableModuleInstance | undefined> {\n return await this.context.root.resolve(id)\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\nconst dappsReadyConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: ['dappsReady'],\n type: 'PubSub',\n}\nexport const dappsReadyConnection = () => new EventBusPubSubConnection(dappsReadyConnectionRequest)\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","import { isObject } from '@xylabs/object'\n\nexport function isEqual(a: unknown, b: unknown): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((a as any) === (b as any)) return true\n\n if (typeof a !== typeof b) return false\n\n if (isObject(a) && isObject(b)) {\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n\n if (aKeys.length !== bKeys.length) {\n return false\n }\n\n for (const key of aKeys) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!b.hasOwnProperty(key) || !isEqual((a as any)[key], (b as any)[key])) {\n return false\n }\n }\n\n return true\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return false\n }\n\n for (const [i, element] of a.entries()) {\n if (!isEqual(element, b[i])) {\n return false\n }\n }\n\n return true\n }\n\n return false\n}\n","import { AsObjectFactory } from '@xylabs/object'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nexport const isObject = (x: unknown): x is Record<string | symbol | number, unknown> => {\n return typeof x === 'object' && !Array.isArray(x)\n}\n\nexport const isAnyPayload = (obj: unknown): obj is Payload => {\n if (isObject(obj)) {\n return typeof obj.schema === 'string'\n }\n return false\n}\n\nexport const isPayload\n = <T extends Payload>(schema: Schema[]) =>\n (obj: unknown): obj is T => {\n if (isAnyPayload(obj)) {\n return schema.includes(obj.schema)\n }\n return false\n }\n\nexport const asPayload = <T extends Payload>(schema: Schema[]) => AsObjectFactory.create(isPayload<T>(schema))\n","export const DevelopArchivist = 'DevelopArchivist'\n\nexport const NodeSentinel = 'NodeSentinel'\n","import { DevelopArchivist, NodeSentinel } from './ModuleNames.ts'\n\nexport const RemoteNodeArchivistOffsetPaths: Record<string, Record<string, string>> = {\n Kerplunk: { [DevelopArchivist]: '118' },\n Local: { [DevelopArchivist]: '115' },\n Main: { [DevelopArchivist]: '121' },\n}\n\nexport const ModuleOffsetPaths: Record<string, string> = {\n IdWitness: '1',\n DomainWitness: '2',\n LocationWitness: '3',\n SchemaWitness: '4',\n CryptoCardsGameWitness: '5',\n CryptoCardsMoveWitness: '6',\n EthereumGasEtherchainV2Witness: '7',\n CoingeckoCryptoMarketWitness: '8',\n UniswapCryptoMarketWitness: '9',\n EthereumGasEtherscanWitness: '10',\n [NodeSentinel]: '11',\n [DevelopArchivist]: '12',\n BowserSystemInfoPluginWitness: '13',\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 type { ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport type { ExternalStore } from './ExternalStore.ts'\nimport { isEqual } from './isEqual.ts'\nimport type { Listener } from './Listener.ts'\n\nexport interface PayloadStoreConfig<T extends Payload = Payload> {\n archivist: ArchivistInstance\n getLatest: () => Promise<T[]>\n idFunction: (schema: Payload) => boolean\n}\n\nexport class PayloadStore<T extends Payload = Payload> implements ExternalStore {\n latest: T[] = []\n private deleteListeners: WeakRef<(args: ArchivistModuleEventData['deleted']) => void>[] = []\n private insertListeners: WeakRef<(args: ArchivistModuleEventData['inserted']) => void>[] = []\n private listeners: Listener[] = []\n\n private constructor(private archivist: ArchivistInstance) {}\n\n /**\n * Initialize listeners on the archivist that update class member variables when new payloads are inserted\n */\n static async create<T extends Payload = Payload>({\n archivist, getLatest, idFunction,\n }: PayloadStoreConfig<T>) {\n const instance = new this<T>(archivist)\n\n const insertListener = async ({ payloads }: ArchivistModuleEventData['inserted']) => {\n // if any of the newly inserted payloads pass the idFunction check, rerun the query\n if (payloads.some(idFunction)) {\n const latest = await getLatest()\n if (isEqual(latest, instance.latest)) return\n instance.latest = latest\n instance.emitChange()\n }\n }\n\n // when payloads are deleted, rerun the diviner query\n const deleteListener = async () => {\n instance.latest = await getLatest()\n instance.emitChange()\n }\n\n const weakRefInsertListener = new WeakRef(insertListener)\n const weakRefDeleteListener = new WeakRef(deleteListener)\n const insertListenerRef = weakRefInsertListener.deref()\n const deleteListenerRef = weakRefDeleteListener.deref()\n\n if (insertListenerRef) instance.archivist.on('inserted', insertListenerRef)\n if (deleteListenerRef) instance.archivist.on('deleted', deleteListenerRef)\n\n instance.insertListeners.push(weakRefInsertListener)\n instance.deleteListeners.push(weakRefDeleteListener)\n\n instance.latest = await getLatest()\n return instance\n }\n\n /**\n * Remove all listeners and reset their class members\n */\n cleanupListeners() {\n this.removeListeners(this.insertListeners, 'inserted')\n this.removeListeners(this.deleteListeners, 'deleted')\n this.insertListeners = []\n this.deleteListeners = []\n }\n\n /**\n * Get the current value of the store\n */\n getSnapshot(): T[] {\n return this.latest\n }\n\n /**\n * Add a call back function that is invoked when new Payloads are inserted\n *\n * @param {PayloadListener} onStoreChange\n */\n subscribe(onStoreChange: Listener) {\n this.listeners.push(onStoreChange)\n return () => {\n this.listeners = this.listeners.filter(l => l !== onStoreChange)\n }\n }\n\n private emitChange() {\n for (const listener of this.listeners) {\n listener()\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private removeListeners(listeners: WeakRef<(args: any) => void>[], eventName: string) {\n for (const listener of listeners) {\n const listenerRef = listener.deref()\n if (listenerRef) this.archivist.off(eventName, listenerRef)\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nexport const tokenPlacesSplit = (value: bigint, places: number): [bigint, bigint] => {\n assertEx(places >= 0, () => 'Places has to be >= 0')\n const factor = BigInt(10 ** Math.abs(places))\n const remainder = value % factor\n const wholeValue = value / factor\n return [wholeValue, remainder]\n}\n\nexport const tokenPlacesSplitString = (value: bigint | undefined, places: number): string => {\n if (value === undefined) {\n return '-'\n }\n const [wholeValue, remainder] = tokenPlacesSplit(value, places)\n return `${wholeValue}.${remainder.toString().padStart(Math.abs(places), '0')}`\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","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 type { DappIntent, XyOsContext } from '@xyo-network/os-model'\nimport { isDappIntent } from '@xyo-network/os-model'\nimport type { WithSources, WithStorageMeta } from '@xyo-network/payload-model'\n\nimport { DappCallerBase } from '../DappCallerBase.ts'\nimport type { Listener, ResourceStore } from '../lib/index.ts'\nimport { PayloadStore } from '../lib/index.ts'\n\nexport type DappIntentViews = 'latestDappIntent' | 'allDappIntents'\nconst NO_RESULTS: [] = []\n\nexport class DappIntentResource extends DappCallerBase implements ResourceStore<DappIntentViews> {\n private _allDappIntents: PayloadStore<DappIntent> | undefined\n private _latestDappIntent: PayloadStore<DappIntent> | undefined\n\n constructor(context: XyOsContext) {\n super(context)\n }\n\n get allDappIntents() {\n return assertEx(this._allDappIntents, () => 'allDappIntents not set')\n }\n\n get latestDappIntent() {\n return assertEx(this._latestDappIntent, () => 'latestDappIntent not set')\n }\n\n get subscriptions() {\n return {\n allDappIntents: (cb: Listener) => this.allDappIntents.subscribe(cb),\n latestDappIntent: (cb: Listener) => this.latestDappIntent.subscribe(cb),\n }\n }\n\n get views() {\n return {\n allDappIntents: () => this.allDappIntents.getSnapshot(),\n latestDappIntent: () => this.latestDappIntent.getSnapshot(),\n }\n }\n\n cleanupListeners() {\n this.latestDappIntent.cleanupListeners()\n this.allDappIntents.cleanupListeners()\n }\n\n async start() {\n const archivist = await this.getDappIntentArchivist()\n\n this._allDappIntents = await PayloadStore.create<DappIntent>({\n archivist,\n getLatest: async () => (await archivist.all()) as WithStorageMeta<WithSources<DappIntent>>[],\n idFunction: isDappIntent,\n })\n this._latestDappIntent = await PayloadStore.create<DappIntent>({\n archivist,\n getLatest: async () => {\n const all = await archivist.all()\n const result = all.length > 0 ? [all.at(-1)] : NO_RESULTS\n return result as WithStorageMeta<WithSources<DappIntent>>[]\n },\n idFunction: isDappIntent,\n })\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 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 { 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 { NodeInstance } from '@xyo-network/node-model'\nimport type { DappId } from '@xyo-network/os-model'\n\n/**\n * A cache for running access node instances\n */\nexport class RunningDappAccessCache {\n private static _cache: { [key: DappId]: NodeInstance } = {}\n\n static get(key: DappId) {\n return this._cache[key]\n }\n\n static has(key?: DappId) {\n return key ? !!this._cache[key] : false\n }\n\n static set(key: DappId, value: NodeInstance) {\n this._cache[key] = value\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type {\n DappAccessRequest, RegisteredDappAccess, XyOsContext,\n} from '@xyo-network/os-model'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport { RunningDappAccessCache } from '../../../RunningAccessDappCache.ts'\n\nexport class AccessNodeQueries {\n constructor(\n protected xyOsContext: XyOsContext,\n private accessRequest: DappAccessRequest,\n private registeredDappAccess: RegisteredDappAccess,\n ) {}\n\n get nameServiceNamesAccessNode() {\n return assertEx(RunningDappAccessCache.get(this.registeredDappAccess.registeringDappId), () => 'No access node found')\n }\n\n // Refresh the archivist in the dapp\n async refresh() {\n const archivist = await this.getArchivistFromDappNode()\n await archivist.clear()\n await this.run()\n console.log('refreshed')\n }\n\n // Run the access node queries\n async run() {\n const payloads = await this.getPayloadsFromAccessNode()\n await this.insertAccessNodePayloadsIntoDappNodeArchivist(payloads)\n return payloads\n }\n\n private async getArchivistFromDappNode() {\n const archivistPath = this.accessRequest?.destinationArchivist || 'DappArchivist'\n const mod = assertEx(await this.xyOsContext.root.resolve(archivistPath), () => `Unable to find archivist at ${archivistPath}`)\n return asArchivistInstance(mod, () => `Module at ${archivistPath} is not an archivist`, { required: true })\n }\n\n private async getPayloadsFromAccessNode() {\n const archivistFromAccessNode = await this.resolveArchivistFromAccessNode()\n return await archivistFromAccessNode.all()\n }\n\n private async insertAccessNodePayloadsIntoDappNodeArchivist(payloads: Payload[]) {\n const archivist = await this.getArchivistFromDappNode()\n await archivist.clear()\n await archivist.insert(payloads)\n }\n\n private async resolveArchivistFromAccessNode() {\n const archivist = assertEx(\n await this.nameServiceNamesAccessNode.resolve('PublicXnsArchivist'),\n () => 'Unable to find archivist at PublicXnsArchivist',\n )\n return asArchivistInstance(archivist, () => 'PublicXnsArchivist is not an archivist', { required: true })\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 XnsArchivistPayloadDivinerModuleName = 'XnsArchivistPayloadDiviner'\nexport const XnsArchivistModuleName = 'XnsArchivist'\nexport const XnsRegistrationsArchivistModuleName = 'XnsRegistrationsArchivist'\n\nexport abstract class AbstractXnsCaller {\n constructor(protected context: XyOsContext) {}\n /**\n * Get the XnsArchivist\n */\n async getXnsArchivist(pathPrefix?: string) {\n const fullyQualifiedPath = pathPrefix ? `${pathPrefix}:${XnsArchivistModuleName}` : XnsArchivistModuleName\n const mod = assertEx(await this.context.root.resolve(fullyQualifiedPath), () => `${fullyQualifiedPath} not found`)\n return asArchivistInstance(mod, () => `${fullyQualifiedPath} is not an archivist`, { required: true })\n }\n\n /**\n * Get the XnsArchivistPayloadDiviner\n */\n async getXnsArchivistPayloadDiviner(pathPrefix?: string) {\n const fullyQualifiedPath = pathPrefix ? `${pathPrefix}:${XnsArchivistPayloadDivinerModuleName}` : XnsArchivistPayloadDivinerModuleName\n const mod = assertEx(await this.context.root.resolve(fullyQualifiedPath), () => `${fullyQualifiedPath} not found`)\n return asDivinerInstance(mod, () => `${fullyQualifiedPath} is not an diviner`, { required: true })\n }\n\n /**\n * Get the XnsRegistrationsArchivist\n */\n async getXnsRegistrationsArchivist(pathPrefix?: string) {\n const fullyQualifiedPath = pathPrefix ? `${pathPrefix}:${XnsRegistrationsArchivistModuleName}` : XnsRegistrationsArchivistModuleName\n const mod = assertEx(await this.context.root.resolve(fullyQualifiedPath), () => `${fullyQualifiedPath} not found`)\n return asArchivistInstance(mod, () => `${fullyQualifiedPath} is not an archivist`, { required: true })\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { isTemporalIndexingDivinerResultIndex } from '@xyo-network/diviner-temporal-indexing-model'\nimport type { TemporalIndexRegistrationResults, XyOsContext } from '@xyo-network/os-model'\nimport type { WithSources } from '@xyo-network/payload-model'\nimport type { Listener } from 'ethers'\n\nimport type { ResourceStore } from '../../../../../lib/index.ts'\nimport { PayloadStore } from '../../../../../lib/index.ts'\nimport { AbstractXnsCaller } from './AbstractXnsCaller.ts'\nimport { XnsRegistrationsResourceQueries } from './RegistrationsResourceQueries.ts'\n\nexport type XnsRegistrationsViews = 'allRegistrations'\n\nexport class XnsRegistrationsResource extends AbstractXnsCaller implements ResourceStore<XnsRegistrationsViews> {\n protected _allRegistrations: PayloadStore<WithSources<TemporalIndexRegistrationResults>> | undefined\n\n constructor(\n context: XyOsContext,\n private pathPrefix?: string,\n ) {\n super(context)\n }\n\n get allRegistrations() {\n return assertEx(this._allRegistrations)\n }\n\n get subscriptions() {\n return { allRegistrations: (cb: Listener) => this.allRegistrations.subscribe(cb) }\n }\n\n get views() {\n return { allRegistrations: () => this.allRegistrations.getSnapshot() }\n }\n\n cleanupListeners() {\n this.allRegistrations.cleanupListeners()\n }\n\n async start() {\n const xnsArchivistPayloadDiviner = await this.getXnsArchivistPayloadDiviner(this.pathPrefix)\n const xnsArchivist = await this.getXnsArchivist(this.pathPrefix)\n\n this._allRegistrations = await PayloadStore.create<WithSources<TemporalIndexRegistrationResults>>({\n archivist: xnsArchivist,\n getLatest: async () => await XnsRegistrationsResourceQueries.getAllRegistrations(xnsArchivistPayloadDiviner),\n idFunction: isTemporalIndexingDivinerResultIndex,\n })\n }\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerResultIndexSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport type { TemporalIndexRegistrationResults } from '@xyo-network/os-model'\nimport type { WithSources, WithStorageMeta } from '@xyo-network/payload-model'\n\nexport const XnsRegistrationsResourceQueries = {\n getAllRegistrations: async (diviner: DivinerInstance) => {\n const query = {\n limit: 100,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [TemporalIndexingDivinerResultIndexSchema],\n }\n\n return (await diviner.divine([query])) as WithSources<TemporalIndexRegistrationResults>[]\n },\n\n getRecentRegistrations: async (archivist: ArchivistInstance) => {\n return (await archivist.all()).toReversed() as WithStorageMeta<TemporalIndexRegistrationResults>[]\n },\n}\n","import type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { DappAccessRequest, RegisteredDappAccess } from '@xyo-network/os-model'\nimport { DappAccessRequestSchema, RegisteredDappAccessSchema } from '@xyo-network/os-model'\nimport type { WithSources } from '@xyo-network/payload-model'\n\nconst noResults: unknown[] = []\n\nexport const DappAccessRequestQueries = {\n async getAccessRequests(diviner: DivinerInstance) {\n const query = {\n limit: 1,\n schema: PayloadDivinerQuerySchema,\n schemas: [DappAccessRequestSchema],\n }\n\n const results = (await diviner.divine([query])) as WithSources<DappAccessRequest>[]\n\n if (results.length === 0) {\n return noResults as WithSources<DappAccessRequest>[]\n }\n return results\n },\n async getRegisteredInterfaces(diviner: DivinerInstance) {\n const query = {\n limit: 1,\n schema: PayloadDivinerQuerySchema,\n schemas: [RegisteredDappAccessSchema],\n }\n\n const results = (await diviner.divine([query])) as WithSources<RegisteredDappAccess>[]\n\n if (results.length === 0) {\n return noResults as WithSources<RegisteredDappAccess>[]\n }\n return results\n },\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n DappAccessRequest, RegisteredDappAccess, XyOsContext,\n} from '@xyo-network/os-model'\nimport { isDappAccessRequestWithMeta, isRegisteredDappAccess } from '@xyo-network/os-model'\n\nimport { DappCallerBase } from '../DappCallerBase.ts'\nimport type { Listener, ResourceStore } from '../lib/index.ts'\nimport { PayloadStore } from '../lib/index.ts'\nimport { DappAccessRequestQueries } from './Queries.ts'\n\nexport type DappAccessRequestViews = 'accessRequests' | 'registeredInterfaces'\n\nexport class DappAccessRequestResource extends DappCallerBase implements ResourceStore<DappAccessRequestViews> {\n private _accessRequestListener: PayloadStore<DappAccessRequest> | undefined\n private _registeredInterfacesListener: PayloadStore<RegisteredDappAccess> | undefined\n\n constructor(context: XyOsContext) {\n super(context)\n }\n\n get accessRequestListener() {\n return assertEx(this._accessRequestListener, () => 'accessRequests note found')\n }\n\n get registeredInterfacesListener() {\n return assertEx(this._registeredInterfacesListener, () => 'registeredInterfaces note found')\n }\n\n get subscriptions() {\n return {\n accessRequests: (cb: Listener) => this.accessRequestListener.subscribe(cb),\n registeredInterfaces: (cb: Listener) => this.registeredInterfacesListener.subscribe(cb),\n }\n }\n\n get views() {\n return {\n accessRequests: () => this.accessRequestListener.getSnapshot(),\n registeredInterfaces: () => this.registeredInterfacesListener.getSnapshot(),\n }\n }\n\n cleanupListeners(): void {\n this.accessRequestListener.cleanupListeners()\n }\n\n // Start the resource\n async start() {\n const archivist = await this.getDappArchivist()\n const diviner = await this.getDappArchivistPayloadDiviner()\n\n this._accessRequestListener = await PayloadStore.create<DappAccessRequest>({\n archivist,\n getLatest: async () => await DappAccessRequestQueries.getAccessRequests(diviner),\n idFunction: isDappAccessRequestWithMeta,\n })\n\n this._registeredInterfacesListener = await PayloadStore.create<RegisteredDappAccess>({\n archivist,\n getLatest: async () => await DappAccessRequestQueries.getRegisteredInterfaces(diviner),\n idFunction: isRegisteredDappAccess,\n })\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappAccessRequest,\n DappId,\n DappInjectableParams,\n DappIntent,\n RegisteredDappAccess,\n XyOsContext,\n} from '@xyo-network/os-model'\nimport {\n DappAccessRequestSchema,\n DappInjectableParamsSchema,\n DappIntentTypes,\n DappMode,\n RegisteredDappAccessSchema,\n} from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport { DappCallerBase } from './DappCallerBase.ts'\nimport { DappDefaultsResourceQueries } from './DefaultsQueries.ts'\nimport { DappIntentCaller } from './intent/index.ts'\n\nexport class DappCaller extends DappCallerBase {\n constructor(context: XyOsContext) {\n super(context)\n }\n\n /**\n * Add payloads to the dapp archivist\n * @param {Payload[]} payloads\n * @param {Boolean} force\n */\n async addPayloadsToDappArchivist(payloads: Payload[] = [], force: boolean = false) {\n const dappArchivist = await this.getDappArchivist()\n if (force) {\n await dappArchivist.insert(payloads)\n } else {\n for (const payload of payloads) {\n const hash = await PayloadBuilder.dataHash(payload)\n const [existing] = await dappArchivist.get([hash])\n if (existing) continue\n await dappArchivist.insert([payload])\n }\n }\n }\n\n /**\n * Build Access Request\n * @param {DappAccessRequest['mode']} mode\n * @param {Hash} registeredDappAccessHash\n * @param {string} requestingDappId\n * @param {string | undefined} destinationArchivist\n */\n buildAccessRequest(mode: DappAccessRequest['mode'], registeredDappAccessHash: Hash, requestingDappId: string, destinationArchivist?: string) {\n const accessRequest: DappAccessRequest = {\n destinationArchivist,\n mode,\n registeredDappAccessHash,\n requestingDappId,\n schema: DappAccessRequestSchema,\n timestamp: Date.now(),\n }\n return accessRequest\n }\n\n /**\n * Get all available dapp access requests\n */\n async getDappAccessPayloads() {\n const diviner = await this.getDappArchivistPayloadDiviner()\n const query: PayloadDivinerQueryPayload = {\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [RegisteredDappAccessSchema],\n }\n\n return diviner.divine([query])\n }\n\n /**\n * Get the most recent dapp injectable params\n * @returns Promise\n */\n async getDappInjectableParams(): Promise<DappInjectableParams[] | undefined> {\n const diviner = await this.getDappArchivistPayloadDiviner()\n\n return await DappDefaultsResourceQueries.getDappInjectableParamsFromRoute(diviner)\n }\n\n /**\n * Get the most recent dapp intent\n * @param {string} name\n */\n async getRegisteredDappAccessByName(name: string) {\n const diviner = await this.getDappArchivistPayloadDiviner()\n const query = {\n limit: 1,\n name,\n schema: PayloadDivinerQuerySchema,\n schemas: [RegisteredDappAccessSchema],\n }\n\n const [payload] = assertEx(await diviner.divine([query]), () => 'Unable to find registered dapp access') as RegisteredDappAccess[]\n return payload\n }\n\n /**\n * Get the user wallet\n */\n getUserAccount(dappName: string): Promisable<AccountInstance> {\n // new implementation\n const account = this.context.user.signers?.get(dappName)\n\n if (account) {\n return account\n } else {\n throw new Error('Unable to find user wallet')\n }\n }\n\n /**\n * Get all wallets for the user\n */\n getUserAccountsAll(): Promisable<AccountInstance[]> {\n return [...this.context.user.signers?.values() ?? []]\n }\n\n /**\n * Make Dapp Access Request\n * @param {string} requestingDappId\n * @param {string} registeredDappAccessHash\n * @param {string} mode\n * @param {string} destinationArchivist\n */\n async makeDappAccessRequest(\n requestingDappId: DappAccessRequest['requestingDappId'],\n registeredDappAccessHash: DappAccessRequest['registeredDappAccessHash'],\n mode?: DappAccessRequest['mode'],\n destinationArchivist?: DappAccessRequest['destinationArchivist'],\n ) {\n const archivist = await this.getDappArchivist()\n const registeredDappAccessPayload = await archivist.get([registeredDappAccessHash])\n if (!registeredDappAccessPayload) {\n throw new Error('No registered dapp access found')\n }\n const accessRequest = this.buildAccessRequest(mode, registeredDappAccessHash, requestingDappId, destinationArchivist)\n await archivist.insert([accessRequest])\n }\n\n /**\n * Make Dapp Intent Request\n * @param {DappId} sourceDappId\n * @param {DappId} targetDappId\n * @param {DappIntentTypes=DappIntentTypes.Launch} intent\n * @param {DappIntent['params']} mode\n */\n async makeDappIntentRequest(\n sourceDappId: DappId,\n targetDappId: DappId,\n intent: DappIntentTypes = DappIntentTypes.Launch,\n mode: DappMode = DappMode.Window,\n params?: DappIntent['params'],\n ) {\n if (!sourceDappId) {\n throw new Error('No source dapp id provided, dApps must declare a sourceDappId')\n }\n const archivist = await this.getDappArchivist()\n const dappIntent: DappIntent = DappIntentCaller.buildIntent(sourceDappId, intent, targetDappId, mode, params)\n return await archivist.insert([dappIntent])\n }\n\n /**\n * Set the dapp injectable params\n *\n * @param {URLSearchParams} searchParams\n * @param {string} pathname\n */\n async setDappInjectableRouteParams(searchParams: URLSearchParams = new URLSearchParams(), pathname: string): Promise<void> {\n const dappArchivist = await this.getDappArchivist()\n\n const params: DappInjectableParams['params'] = {}\n for (const [key, value] of searchParams.entries()) {\n params[key] = value\n }\n\n const payload: DappInjectableParams = {\n params,\n path: pathname,\n schema: DappInjectableParamsSchema,\n source: 'route',\n timestamp: Date.now(),\n }\n\n await dappArchivist.insert([payload])\n }\n}\n","import type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { DappInjectableParams, NodeOsInfo } from '@xyo-network/os-model'\nimport { DappInjectableParamsSchema, NodeOsInfoSchema } from '@xyo-network/os-model'\nimport type { WithSources } from '@xyo-network/payload-model'\n\nexport const DappDefaultsResourceQueries = {\n async getDappInjectableParamsFromRoute(diviner: DivinerInstance) {\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappInjectableParamsSchema],\n source: 'route',\n }\n return (await diviner.divine([query])) as WithSources<DappInjectableParams>[]\n },\n async getNodeOsInfo(diviner: DivinerInstance) {\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [NodeOsInfoSchema],\n }\n return (await diviner.divine([query])) as WithSources<NodeOsInfo>[]\n },\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n DappInjectableParams, NodeOsInfo, XyOsContext,\n} from '@xyo-network/os-model'\nimport { isDappInjectableParams, isNodeOsInfo } from '@xyo-network/os-model'\n\nimport { DappCallerBase } from '../../DappCallerBase.ts'\nimport { DappDefaultsResourceQueries } from '../../DefaultsQueries.ts'\nimport type { Listener, ResourceStore } from '../../lib/index.ts'\nimport { PayloadStore } from '../../lib/index.ts'\n\nexport type DappDefaultsResourceViews = 'nodeOsInfo' | 'dappInjectableParamsFromRoute'\n\n/**\n * A resource for interacting with Dapp Defaults\n */\nexport class DappDefaultsResource extends DappCallerBase implements ResourceStore<DappDefaultsResourceViews> {\n private _dappInjectableParamsFromRouteListener: PayloadStore<DappInjectableParams> | undefined\n private _nodeOsInfoListener: PayloadStore<NodeOsInfo> | undefined\n\n constructor(context: XyOsContext) {\n super(context)\n }\n\n get dappInjectableParamsFromRouteListener() {\n return assertEx(this._dappInjectableParamsFromRouteListener, () => 'DappInjectableParams not found')\n }\n\n get nodeOsInfoListener() {\n return assertEx(this._nodeOsInfoListener, () => 'NodeOsInfo not found')\n }\n\n get subscriptions() {\n return {\n dappInjectableParamsFromRoute: (cb: Listener) => this.dappInjectableParamsFromRouteListener.subscribe(cb),\n nodeOsInfo: (cb: Listener) => this.nodeOsInfoListener.subscribe(cb),\n }\n }\n\n get views() {\n return {\n dappInjectableParamsFromRoute: () => this.dappInjectableParamsFromRouteListener.getSnapshot(),\n nodeOsInfo: () => this.nodeOsInfoListener.getSnapshot(),\n }\n }\n\n cleanupListeners() {\n this.nodeOsInfoListener.cleanupListeners()\n }\n\n async start() {\n const archivist = await this.getDappArchivist()\n const diviner = await this.getDappArchivistPayloadDiviner()\n\n this._nodeOsInfoListener = await PayloadStore.create<NodeOsInfo>({\n archivist,\n getLatest: async () => await DappDefaultsResourceQueries.getNodeOsInfo(diviner),\n idFunction: isNodeOsInfo,\n })\n\n this._dappInjectableParamsFromRouteListener = await PayloadStore.create<DappInjectableParams>({\n archivist,\n getLatest: async () => await DappDefaultsResourceQueries.getDappInjectableParamsFromRoute(diviner),\n idFunction: isDappInjectableParams,\n })\n }\n}\n","import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappInjectableParams,\n DappNavItemSelection,\n XyOsContext,\n} from '@xyo-network/os-model'\nimport {\n DappInjectableParamsSchema,\n DappNavItemSelectionSchema,\n} from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport { DappCaller } from '../../Caller.ts'\n\nexport class DappMenuCaller extends DappCaller {\n constructor(context: XyOsContext) {\n super(context)\n }\n\n /**\n * Add new Payloads to the dappArchivist if they haven't already\n *\n * @param {Payload[]} payloads\n */\n async add(payloads: Payload[], force = false) {\n const dappArchivist = await this.getDappArchivist()\n\n for (const payload of payloads) {\n const hash = await PayloadBuilder.dataHash(payload)\n const [existing] = await dappArchivist.get([hash])\n if (!existing || force) {\n await dappArchivist.insert(payloads)\n }\n }\n }\n\n async currentNavSelection(): Promise<DappNavItemSelection[] | undefined> {\n const diviner = await this.getDappArchivistPayloadDiviner()\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappNavItemSelectionSchema],\n }\n\n return (await diviner.divine([query])) as DappNavItemSelection[]\n }\n\n /*\n * Indicate to the system that a nav item was selected\n *\n * @param {string} path\n * @params {string} injectableParamsPath\n * @returns Promise\n */\n async makeNavItemSelection(path: string, injectableParamsPath?: string): Promise<void> {\n const dappArchivist = await this.getDappArchivist()\n const payload: DappNavItemSelection = {\n path,\n schema: DappNavItemSelectionSchema,\n timestamp: Date.now(),\n }\n await dappArchivist.insert([payload])\n\n if (injectableParamsPath) {\n const injectableParams: DappInjectableParams = {\n params: {},\n path: injectableParamsPath,\n schema: DappInjectableParamsSchema,\n source: 'route',\n timestamp: Date.now(),\n }\n await dappArchivist.insert([injectableParams])\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n DappNavItem, DappNavItemSelection, DappNavMenuConfig, XyOsContext,\n} from '@xyo-network/os-model'\nimport { isDappNavItemSelection, isDappNavMenuConfig } from '@xyo-network/os-model'\nimport type { Payload, WithSources } from '@xyo-network/payload-model'\n\nimport { DappCaller } from '../../Caller.ts'\nimport type { Listener, ResourceStore } from '../../lib/index.ts'\nimport { PayloadStore } from '../../lib/index.ts'\nimport { DappMenuQueries } from './Queries.ts'\n\nexport type DappMenuResourceViews = 'menuConfigs' | 'menuItems' | 'menuItemsVisible' | 'menuItemSelections'\n\nexport type NavPayloadType<T extends Payload = Payload> = WithSources<T>[]\n\n/**\n * A Repository for interacting with dapp menu items and config\n */\nexport class DappMenuResource extends DappCaller implements ResourceStore<DappMenuResourceViews> {\n private _menuConfigListener: PayloadStore<DappNavMenuConfig> | undefined\n private _menuItemListener: PayloadStore<DappNavItem> | undefined\n private _menuItemSelectionListener: PayloadStore<DappNavItemSelection> | undefined\n private _menuItemVisibleListener: PayloadStore<DappNavItem> | undefined\n\n constructor(xyOsContext: XyOsContext) {\n super(xyOsContext)\n }\n\n get menuConfigListener() {\n return assertEx(this._menuConfigListener, () => 'menuConfigListener note found')\n }\n\n get menuItemListener() {\n return assertEx(this._menuItemListener, () => 'menuItemListener note found')\n }\n\n get menuItemSelectionListener() {\n return assertEx(this._menuItemSelectionListener, () => 'menuItemSelectionListener note found')\n }\n\n get menuItemVisibleListener() {\n return assertEx(this._menuItemVisibleListener, () => 'menuItemVisibleListener note found')\n }\n\n /** subscribe to latest set of payloads */\n get subscriptions() {\n return {\n menuConfigs: (cb: Listener) => this.menuConfigListener.subscribe(cb),\n menuItemSelections: (cb: Listener) => this.menuItemSelectionListener.subscribe(cb),\n menuItems: (cb: Listener) => this.menuItemListener.subscribe(cb),\n menuItemsVisible: (cb: Listener) => this.menuItemVisibleListener.subscribe(cb),\n }\n }\n\n /**\n * Return the latest menu payloads from the repository\n */\n get views() {\n return {\n menuConfigs: () => this.menuConfigListener.getSnapshot(),\n menuItemSelections: () => this.menuItemSelectionListener.getSnapshot(),\n menuItems: () => this.menuItemListener.getSnapshot(),\n menuItemsVisible: () => this.menuItemVisibleListener.getSnapshot(),\n }\n }\n\n /**\n * Remove all listeners and reset their class members\n */\n cleanupListeners() {\n this.menuConfigListener.cleanupListeners()\n this.menuItemListener.cleanupListeners()\n this.menuItemSelectionListener.cleanupListeners()\n }\n\n /**\n * Start the resource\n */\n async start(): Promise<void> {\n const dappArchivist = await this.getDappArchivist()\n const dappArchivistPayloadDiviner = await this.getDappArchivistPayloadDiviner()\n\n this._menuConfigListener = await PayloadStore.create<DappNavMenuConfig>({\n archivist: dappArchivist,\n getLatest: async () => await DappMenuQueries.getMenuConfigs(dappArchivistPayloadDiviner),\n idFunction: isDappNavMenuConfig,\n })\n this._menuItemListener = await PayloadStore.create<DappNavItem>({\n archivist: dappArchivist,\n getLatest: async () => await DappMenuQueries.getMenuItems(dappArchivistPayloadDiviner),\n idFunction: isDappNavMenuConfig,\n })\n this._menuItemVisibleListener = await PayloadStore.create<DappNavItem>({\n archivist: dappArchivist,\n getLatest: async () => await DappMenuQueries.getVisibleMenuItems(dappArchivistPayloadDiviner),\n idFunction: isDappNavMenuConfig,\n })\n this._menuItemSelectionListener = await PayloadStore.create<DappNavItemSelection>({\n archivist: dappArchivist,\n getLatest: async () => await DappMenuQueries.getNavItemSelections(dappArchivistPayloadDiviner),\n idFunction: isDappNavItemSelection,\n })\n }\n}\n","import type { DivinerInstance } from '@xyo-network/diviner-model'\nimport type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappNavItem,\n DappNavItemSelection,\n DappNavMenuConfig,\n} from '@xyo-network/os-model'\nimport {\n DappNavItemSchema,\n DappNavItemSelectionSchema,\n DappNavMenuConfigSchema,\n} from '@xyo-network/os-model'\nimport type { WithSources } from '@xyo-network/payload-model'\n\nconst NO_ITEMS: unknown[] = []\n\nexport const DappMenuQueries = {\n async getMenuConfigs(diviner: DivinerInstance): Promise<WithSources<DappNavMenuConfig>[]> {\n const query: PayloadDivinerQueryPayload = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappNavMenuConfigSchema],\n }\n return (await diviner.divine([query])) as WithSources<DappNavMenuConfig>[]\n },\n\n async getMenuItems(diviner: DivinerInstance) {\n const query: PayloadDivinerQueryPayload = {\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappNavItemSchema],\n }\n\n const results = (await diviner.divine([query])) as WithSources<DappNavItem>[]\n return results.length > 0 ? results : (NO_ITEMS as WithSources<DappNavItem>[])\n },\n\n async getNavItemSelections(diviner: DivinerInstance) {\n const query: PayloadDivinerQueryPayload = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappNavItemSelectionSchema],\n }\n const results = (await diviner.divine([query])) as WithSources<DappNavItemSelection>[]\n return results.length > 0 ? results : (NO_ITEMS as WithSources<DappNavItemSelection>[])\n },\n\n async getVisibleMenuItems(diviner: DivinerInstance) {\n const query: PayloadDivinerQueryPayload = {\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappNavItemSchema],\n }\n const results = (await diviner.divine([query])) as WithSources<DappNavItem>[]\n return results.filter(menuItem => menuItem.hidden !== true).sort((a, b) => ((a.weight ?? 0) > (b.weight ?? 0) ? 1 : -1))\n },\n}\n","import type { ValidOsAchievements } from '@xyo-network/os-model'\nimport { OsBadgeSchema } from '@xyo-network/os-model'\n\nimport { OsSettingsCallerBase } from '../CallerBase.ts'\nimport { OsBadgeQueries } from './Queries.ts'\n\nexport class OsBadgeCaller extends OsSettingsCallerBase {\n /**\n * @param {ValidOsAchievements} achievement\n */\n async getBadge(achievement: ValidOsAchievements) {\n const diviner = await this.getOsSettingsPayloadDiviner()\n const results = await OsBadgeQueries.getBadge(achievement, diviner)\n return results[0] ?? null\n }\n\n /**\n * @param {ValidOsAchievements} achievement\n */\n async saveBadge(achievement: ValidOsAchievements) {\n const badge = {\n achievement,\n schema: OsBadgeSchema,\n timestamp: Date.now(),\n }\n\n const archivist = await this.getOsSettingsArchivist()\n return await archivist.insert([badge])\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\nconst OsSettingsArchivistModuleName = 'OsSettingsNode:OsSettingsArchivist'\nconst OsSettingsArchivistPayloadDivinerModuleName = 'OsSettingsNode:OsSettingsArchivistPayloadDiviner'\n\nexport class OsSettingsCallerBase {\n constructor(protected context: XyOsContext) {}\n\n async getOsSettingsArchivist() {\n const mod = assertEx(await this.context.root.resolve(OsSettingsArchivistModuleName), () => `${OsSettingsArchivistModuleName} not found`)\n return asArchivistInstance(mod, () => `${OsSettingsArchivistModuleName} is not an archivist`, { required: true })\n }\n\n async getOsSettingsPayloadDiviner() {\n const mod = assertEx(\n await this.context.root.resolve(OsSettingsArchivistPayloadDivinerModuleName),\n () => `${OsSettingsArchivistPayloadDivinerModuleName} not found`,\n )\n return asDivinerInstance(mod, () => `${OsSettingsArchivistPayloadDivinerModuleName} is not a diviner`, { required: true })\n }\n}\n","import type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { OsBadge } from '@xyo-network/os-model'\nimport { OsBadgeSchema } from '@xyo-network/os-model'\nimport type { WithSources } from '@xyo-network/payload-model'\n\nexport const OsBadgeQueries = {\n getBadge: async (achievement: string, diviner: DivinerInstance) => {\n const query = {\n achievement,\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [OsBadgeSchema],\n }\n\n return (await diviner.divine([query])) as WithSources<OsBadge>[]\n },\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { OsBadge, XyOsContext } from '@xyo-network/os-model'\nimport { isBadgeWithMeta } from '@xyo-network/os-model'\n\nimport type { ResourceStore } from '../../../lib/index.ts'\nimport { PayloadStore } from '../../../lib/index.ts'\nimport { OsSettingsCallerBase } from '../CallerBase.ts'\nimport { OsBadgeQueries } from './Queries.ts'\n\nexport type OsBadgeResourceViews = 'savedSeedPhrase'\n\nexport class OsBadgeResource extends OsSettingsCallerBase implements ResourceStore<OsBadgeResourceViews> {\n static readonly views: OsBadgeResourceViews[] = ['savedSeedPhrase']\n\n private _savedSeedPhrase: PayloadStore<OsBadge> | undefined\n\n constructor(xyOsContext: XyOsContext) {\n super(xyOsContext)\n }\n\n get savedSeedPhrase() {\n return assertEx(this._savedSeedPhrase, () => 'Saved seed phrase listener not set')\n }\n\n get subscriptions() {\n return { savedSeedPhrase: (cb: () => void) => this.savedSeedPhrase.subscribe(cb) }\n }\n\n get views() {\n return { savedSeedPhrase: () => this.savedSeedPhrase.latest }\n }\n\n cleanupListeners() {\n this.savedSeedPhrase.cleanupListeners()\n }\n\n /**\n * start listeners\n **/\n async start() {\n const diviner = await this.getOsSettingsPayloadDiviner()\n const archivist = await this.getOsSettingsArchivist()\n\n this._savedSeedPhrase = await PayloadStore.create<OsBadge>({\n archivist,\n getLatest: async () => await OsBadgeQueries.getBadge('savedSeedPhrase', diviner),\n idFunction: isBadgeWithMeta,\n })\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n NodeBackground, WalletSeedPhrase, XyOsContext,\n} from '@xyo-network/os-model'\n\nimport { isEqual } from '../../lib/index.ts'\nimport { buildUserWalletSeedPhrasePayload } from '../../utils/index.ts'\nimport { OsSettingsCallerBase } from './CallerBase.ts'\nimport { OsSettingsQueries } from './SettingsQueries.ts'\n\nexport class OsSettingsCaller extends OsSettingsCallerBase {\n constructor(context: XyOsContext) {\n super(context)\n }\n\n /**\n * Add a node background to the settings\n * @param {NodeBackground} payload\n */\n async addNodeBackground(payload: NodeBackground) {\n const archivist = await this.getOsSettingsArchivist()\n await archivist.insert([payload])\n }\n\n /**\n * Add a wallet seed phrase to the settings\n * @param {WalletSeedPhrase} payload\n */\n async addWalletSeedPhrase(payload: WalletSeedPhrase) {\n // NOTE: Since setting the seed phrase in OS takes precedence\n // over the BIOS when the two phrases differ, we'll set the seed\n // phrase in the OS first. That way if the latter saves fail we can\n // still recover on next boot.\n\n // Save seed phrase to OS settings\n const archivist = await this.getOsSettingsArchivist()\n await archivist.insert([payload])\n\n // Save seed phrase to BIOS\n const phrase = payload.mnemonic.mnemonic.join(' ')\n await this.context.kernel?.bios?.seedPhraseStore.set('user', phrase)\n }\n\n /**\n * Get the latest node background\n */\n async getLatestNodeBackground(): Promise<NodeBackground | null> {\n const diviner = await this.getOsSettingsPayloadDiviner()\n const [result] = (await OsSettingsQueries.getNodeBackground(diviner)) as NodeBackground[]\n return result ?? null\n }\n\n async getLatestUserWallet(): Promise<WalletSeedPhrase> {\n // Get the seed phrase from the OS settings\n const diviner = await this.getOsSettingsPayloadDiviner()\n const archivist = await this.getOsSettingsArchivist()\n const storedSeedPhrasePayload = (await OsSettingsQueries.getLatestUserWallet(diviner, archivist)).pop()\n // Get the seed phrase from the BIOS\n const biosWalletSeedPhrase = assertEx(await this.context.kernel?.bios?.seedPhraseStore.get('user'), () => 'No user seed phrase found from BIOS')\n const biosWalletSeedPhraseParts = biosWalletSeedPhrase.split(' ')\n // If there is no stored seed phrase in the OS, use the seed phrase from the BIOS\n if (!storedSeedPhrasePayload?.mnemonic?.mnemonic) {\n // Create new wallet payload from BIOS seed phrase\n const { payload: biosSeedPhrasePayload } = await buildUserWalletSeedPhrasePayload(biosWalletSeedPhrase)\n // Store the BIOS seed phrase in the OS settings\n await this.addWalletSeedPhrase(biosSeedPhrasePayload)\n // Return BIOS seed phrase payload\n return biosSeedPhrasePayload\n } else if (!isEqual(storedSeedPhrasePayload.mnemonic.mnemonic, biosWalletSeedPhraseParts)) {\n // If there is a seed phrase in the OS settings that does not match the BIOS seed phrase\n // Update bios with existing user seed phrase\n const updatedBiosSeedPhrase = storedSeedPhrasePayload.mnemonic.mnemonic.join(' ')\n await this.context.kernel?.bios?.seedPhraseStore.set('user', updatedBiosSeedPhrase)\n }\n // Return stored seed phrase\n return storedSeedPhrasePayload\n }\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { WalletSeedPhrase } from '@xyo-network/os-model'\nimport { WalletSeedPhraseSchema } from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nconst language = 'english'\nconst standard = 'bip-39'\n\n/**\n * The label for the user wallet\n */\nexport const userWalletLabel = 'userWallet'\n\n/**\n * The valid wallet labels\n */\nexport type WalletLabel = typeof userWalletLabel // TODO: More wallet types 'osWallet' | 'deviceWalletBackup' | ...\n\n/**\n * Builds a WalletSeedPhrase payload from the supplied mnemonic seed phrase and label\n * @param mnemonic The mnemonic seed phrase\n * @param $label The wallet label\n * @returns A WalletSeedPhrase payload and its root hash\n */\nexport const buildWalletSeedPhrasePayload = async (mnemonic: string, $label: WalletLabel): Promise<{\n payload: WalletSeedPhrase\n rootHash: Hash\n}> => {\n const fields = {\n mnemonic: {\n language, mnemonic: mnemonic.split(' '), standard,\n },\n $label,\n $timestamp: Date.now(),\n }\n const payload = new PayloadBuilder<WalletSeedPhrase>({ schema: WalletSeedPhraseSchema }).fields(fields).build()\n const rootHash = await PayloadBuilder.hash(payload)\n return { payload, rootHash }\n}\n\n/**\n * Builds a user WalletSeedPhrase payload from the supplied mnemonic seed phrase and label\n * @param mnemonic The mnemonic seed phrase\n * @returns A user WalletSeedPhrase payload and its root hash\n */\nexport const buildUserWalletSeedPhrasePayload = (mnemonic: string): Promise<{\n payload: WalletSeedPhrase\n rootHash: Hash\n}> => {\n return buildWalletSeedPhrasePayload(mnemonic, userWalletLabel)\n}\n","const getApiDomain = (scope: 'localhost' | 'beta' | 'prod' | undefined, apiDomain: string | undefined) => {\n if (apiDomain !== undefined) {\n return apiDomain as string\n }\n if (scope === 'localhost') {\n return 'http://localhost:8080'\n }\n if (scope === 'beta') {\n return 'https://beta.archivist.xyo.network'\n }\n return 'https://archivist.xyo.network'\n}\n\nexport { getApiDomain }\n","/**\n * Renames a key on an existing object by returning a new one with the same insertion order\n *\n * inspired by - https://stackoverflow.com/a/48110891/2803259\n */\nexport const renameObjKey = <T extends Record<string, unknown> = Record<string, unknown>>(oldObj: T, oldKey: keyof T, newKey: string) => {\n const oldObjKeys = Object.keys(oldObj) as Array<keyof T>\n // eslint-disable-next-line unicorn/no-array-reduce\n const newObj = oldObjKeys.reduce(\n (acc, val) => {\n if (val === oldKey) {\n acc[newKey] = oldObj[oldKey]\n } else {\n acc[val as string] = oldObj[val]\n }\n return acc\n },\n {} as Record<string, unknown>,\n )\n\n return newObj as T\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { NodeBackground, WalletSeedPhrase } from '@xyo-network/os-model'\nimport { NodeBackgroundSchema, WalletSeedPhraseSchema } from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithSources } from '@xyo-network/payload-model'\n\nconst NO_RESULTS: WithSources<WalletSeedPhrase>[] = []\n\nexport const OsSettingsQueries = {\n async getLatestUserWallet(diviner: DivinerInstance, archivist?: ArchivistInstance): Promise<WalletSeedPhrase[]> {\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [WalletSeedPhraseSchema],\n }\n const results = (await diviner.divine([query])) as WalletSeedPhrase[]\n const wallet = results.find(payload => payload.$label === 'userWallet')\n if (wallet) return [wallet]\n // Check for legacy payload and optionally migrate by re-minting it in the updates format.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legacyWallet = results.find(payload => (payload as any).$meta.label === 'userWallet')\n if (legacyWallet && archivist) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legacyMeta = (legacyWallet as any).$meta\n const newWalletPayloadFields = {\n mnemonic: legacyWallet.mnemonic,\n $label: legacyMeta.label,\n $timestamp: legacyMeta.$timestamp,\n }\n const payload = new PayloadBuilder<WalletSeedPhrase>({ schema: WalletSeedPhraseSchema }).fields(newWalletPayloadFields).build()\n await archivist.insert([payload])\n return [payload]\n }\n return NO_RESULTS\n },\n async getNodeBackground(diviner: DivinerInstance) {\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [NodeBackgroundSchema],\n }\n return (await diviner.divine([query])) as WithSources<NodeBackground>[]\n },\n async getWallets(diviner: DivinerInstance) {\n const query = {\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [WalletSeedPhraseSchema],\n }\n return (await diviner.divine([query])) as WithSources<WalletSeedPhrase>[]\n },\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n NodeBackground, WalletSeedPhrase, XyOsContext,\n} from '@xyo-network/os-model'\nimport { isNodeBackground, isWalletSeedPhrase } from '@xyo-network/os-model'\n\nimport type { Listener, ResourceStore } from '../../lib/index.ts'\nimport { PayloadStore } from '../../lib/index.ts'\nimport { OsSettingsCallerBase } from './CallerBase.ts'\nimport { OsSettingsQueries } from './SettingsQueries.ts'\n\nexport type OsSettingsResourceViews = 'wallets' | 'latestUserWallet' | 'nodeBackground'\n\nexport class OsSettingsResource extends OsSettingsCallerBase implements ResourceStore<OsSettingsResourceViews> {\n private _latestUserWalletListener: PayloadStore<WalletSeedPhrase> | undefined\n private _nodeBackgroundListener: PayloadStore<NodeBackground> | undefined\n private _walletsListener: PayloadStore<WalletSeedPhrase> | undefined\n\n constructor(context: XyOsContext) {\n super(context)\n }\n\n get latestUserWalletListener() {\n return assertEx(this._latestUserWalletListener, () => 'Latest user wallet listener not set')\n }\n\n get nodeBackgroundListener() {\n return assertEx(this._nodeBackgroundListener, () => 'Node background listener not set')\n }\n\n get subscriptions() {\n return {\n latestUserWallet: (cb: Listener) => this.walletsListener.subscribe(cb),\n nodeBackground: (cb: Listener) => this.nodeBackgroundListener.subscribe(cb),\n wallets: (cb: Listener) => this.walletsListener.subscribe(cb),\n }\n }\n\n get views() {\n return {\n latestUserWallet: () => this.latestUserWalletListener.latest,\n nodeBackground: () => this.nodeBackgroundListener.latest,\n wallets: () => this.walletsListener.latest,\n }\n }\n\n get walletsListener() {\n return assertEx(this._walletsListener, () => 'Wallets listener not set')\n }\n\n cleanupListeners() {\n this.walletsListener.cleanupListeners()\n this.latestUserWalletListener.cleanupListeners()\n }\n\n /**\n * start listeners\n */\n async start() {\n const archivist = await this.getOsSettingsArchivist()\n const diviner = await this.getOsSettingsPayloadDiviner()\n\n this._walletsListener = await PayloadStore.create<WalletSeedPhrase>({\n archivist,\n getLatest: async () => await OsSettingsQueries.getWallets(diviner),\n idFunction: isWalletSeedPhrase,\n })\n\n this._latestUserWalletListener = await PayloadStore.create<WalletSeedPhrase>({\n archivist,\n getLatest: async () => await OsSettingsQueries.getLatestUserWallet(diviner),\n idFunction: isWalletSeedPhrase,\n })\n\n this._nodeBackgroundListener = await PayloadStore.create<NodeBackground>({\n archivist,\n getLatest: async () => await OsSettingsQueries.getNodeBackground(diviner),\n idFunction: isNodeBackground,\n })\n }\n}\n","import type { XyOsGlobal } from '@xyo-network/os-model'\n\nimport type { MonitorEventConfig } from './types.ts'\n\n// See - https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation\nexport type Connection = {\n downlink: number\n effectiveType: string\n rtt: number\n}\n\nconst DEFAULT_MONITORING_EVENT_NAME = 'System Task Duration'\n\nglobalThis.getXyOsGlobal\n = globalThis.getXyOsGlobal\n ?? ((): XyOsGlobal => {\n return { tracking: { trackEvent: (_event: string, _properties?: Record<string, unknown>) => void {} } }\n })\n\n// TODO: Make this node compatible\nconst xyOsGlobal = globalThis.getXyOsGlobal()\n\nexport abstract class XyOsMonitor {\n static trackEvent = xyOsGlobal.tracking.trackEvent\n\n private performanceTimers = new Map<string, number>()\n\n startTimer(name: string): void {\n this.performanceTimers.set(name, performance.now())\n }\n\n stopTimer(eventConfig: MonitorEventConfig): void {\n const { additionalProperties, name } = eventConfig\n const start = this.performanceTimers.get(name)\n if (start) {\n const end = performance.now()\n const duration = end - start\n this.performanceTimers.delete(name)\n const connection = this.connection()\n XyOsMonitor.trackEvent(DEFAULT_MONITORING_EVENT_NAME, {\n downloadSpeedMbps: connection?.downlink,\n duration: duration.toString(),\n effectiveConnectionSpeed: connection?.effectiveType,\n name,\n roundTripTime: connection?.rtt,\n ...additionalProperties,\n })\n }\n }\n\n protected abstract connection(): Connection | undefined\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n RegisteredDapp, WindowDappNodeSet, XyOsContext,\n} from '@xyo-network/os-model'\n\nimport { RunningDappCache } from '../RunningDappCache.ts'\nimport { DappSeedPhraseRepository } from '../wallet/index.ts'\n\n/** Helper class to simulate full dapp initialization by the OS */\nexport interface DappInitializerConfig<T extends RegisteredDapp = RegisteredDapp> {\n allowedNames: string[]\n dapp: T\n xnsNetwork: string | undefined\n xnsNodeUrl: string | undefined\n xyOs: XyOsContext\n}\n\nexport class DappInitializer<T extends RegisteredDapp = RegisteredDapp> {\n private _config: DappInitializerConfig\n\n constructor(config: DappInitializerConfig) {\n this._config = config\n }\n\n get config() {\n return assertEx(this._config, () => new Error('Options not set'))\n }\n\n async install(): Promise<WindowDappNodeSet> {\n const dappWithWalletId = await this.installDappWallet()\n\n return await this.initializeDappContext(dappWithWalletId)\n }\n\n private async initializeDappContext(dappWithWalletId: T): Promise<WindowDappNodeSet> {\n const {\n allowedNames, xnsNetwork, xnsNodeUrl, xyOs,\n } = this.config\n\n return await RunningDappCache.findOrCreate(dappWithWalletId, xyOs, allowedNames ?? [], xnsNodeUrl, xnsNetwork)\n }\n\n private async installDappWallet(): Promise<T> {\n const { xyOs, dapp } = this.config\n const dappSeedPhraseRepository = new DappSeedPhraseRepository(xyOs, [dapp.config.name])\n const walletId = await dappSeedPhraseRepository.findOrCreate(dapp.config.name)\n\n // Update the dapp with the walletId\n return {\n ...dapp,\n config: {\n ...dapp.config,\n walletId,\n },\n } as T\n }\n}\n","import type { Address } from '@xylabs/hex'\nimport type { QuerySendStartedEventArgs } from '@xyo-network/bridge-model'\nimport type { ModuleInstance } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nconst DISPLAY_EVENT_COUNT_FREQUENCY = 100 as const\n\nexport interface ProfileEventsData {\n allEventCount: number\n eventCounts: { [key: string | number | symbol]: number }\n}\n\nexport const profileData: Record<Address, ProfileEventsData> = {}\n\nexport const profileModuleEvents = (mod: ModuleInstance) => {\n const modRef = new WeakRef(mod) // prevent memory leak\n mod.onAny(async (eventName, args) => {\n const mod = modRef.deref()\n if (mod) {\n const data = profileData[mod.address] ?? { allEventCount: 0, eventCounts: {} }\n profileData[mod.address] = data\n data.allEventCount += 1\n data.eventCounts[eventName] = (data.eventCounts[eventName] ?? 0) + 1\n if (eventName === 'querySendStarted') {\n const { query, payloads = [] } = args as QuerySendStartedEventArgs\n const pairs = await PayloadBuilder.dataHashPairs(payloads)\n const foundPair = pairs.find(([, hash]) => hash === query.query)\n if (foundPair) {\n const [payload] = foundPair\n console.log(`querySendStarted: ${payload.schema}`)\n }\n }\n if (eventName === 'querySendFinished') {\n const { query } = args as QuerySendStartedEventArgs\n console.log(`querySendFinished: ${query.query}`)\n }\n if (data.allEventCount % DISPLAY_EVENT_COUNT_FREQUENCY === 0) {\n console.log(`[PROFILE] - ${mod.id} Event Counts:`)\n console.log(data.eventCounts)\n }\n }\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport type { BridgeExposeOptions } from '@xyo-network/bridge-model'\nimport { asBridgeInstance } from '@xyo-network/bridge-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { BridgedPubSubModuleName } from '@xyo-network/os-model'\n\nexport class PubSubBridgeCaller {\n constructor(private node: NodeInstance) {}\n\n async exposeAddresses(addresses: Address[], options?: BridgeExposeOptions) {\n const pubSubBridge = await this.getPubSubBridge()\n for (const address of addresses) {\n console.log(`Exposing: ${address}`)\n await pubSubBridge.expose(address, options)\n }\n }\n\n async unExposeAddresses(addresses: Address[]) {\n const pubSubBridge = await this.getPubSubBridge()\n for (const address of addresses) {\n await pubSubBridge.unexpose?.(address)\n }\n }\n\n private async getPubSubBridge() {\n const mod = assertEx(await this.node.resolve(BridgedPubSubModuleName), () => `${BridgedPubSubModuleName} not found`)\n return asBridgeInstance(mod, () => `${BridgedPubSubModuleName} is not a bridge`, { required: true })\n }\n}\n"],"mappings":"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","names":["assertEx","ModuleFactoryLocator","asNodeInstance","isRegisteredDappAccessDappSet","PayloadBuilder","assertEx","Mutex","ModuleFactoryLocator","HDWallet","existingPayload","assertEx","asArchivistInstance","assertEx","asArchivistInstance","asDivinerInstance","assertEx","asArchivistInstance","dapp","ModuleFactoryLocator","HDWallet","assertEx","ModuleFactoryLocator","assertEx","assertEx","asArchivistInstance","PayloadBuilder","uuid","asDivinerInstance","isObject","assertEx","ModuleFactoryLocator","ModuleFactoryLocator","forget","ModuleFactoryLocator","DappMode","PayloadDivinerQuerySchema","PayloadDivinerQuerySchema","assertEx","assertEx","PayloadBuilder","PayloadDivinerQuerySchema","PayloadBuilder","PayloadBuilder","assertEx","ManifestWrapper","ModuleFactoryLocator","DappPackageManifestPayloadSchema","assertEx","BaseEmitter","ModuleFactoryLocator","Mutex","assertEx","ModuleFactoryLocator","ManifestWrapper","DappPackageManifestPayloadSchema","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","Mutex","assertEx","ModuleFactoryLocator","isRegisteredDappAccessDappSet","assertEx","asNodeInstance","PayloadBuilder","assertEx","asArchivistInstance","assertEx","asArchivistInstance","assertEx","asArchivistInstance","asDivinerInstance","assertEx","PayloadDivinerQuerySchema","assertEx","PayloadDivinerQuerySchema","RegisteredDappAccessSchema","assertEx","isRegisteredDappAccess","assertEx","isRegisteredDappAccess","assertEx","PayloadDivinerQuerySchema","DappAccessRequestSchema","DappInjectableParamsSchema","DappIntentTypes","DappMode","RegisteredDappAccessSchema","PayloadBuilder","PayloadDivinerQuerySchema","NodeOsInfoSchema","PayloadBuilder","DappAccessRequestSchema","PayloadDivinerQuerySchema","RegisteredDappAccessSchema","assertEx","DappIntentTypes","DappMode","DappInjectableParamsSchema","assertEx","assertEx","PayloadDivinerQuerySchema","DappInjectableParamsSchema","PayloadBuilder","PayloadBuilder","PayloadDivinerQuerySchema","DappInjectableParamsSchema","assertEx","PayloadDivinerQuerySchema","DappNavItemSelectionSchema","assertEx","OsBadgeSchema","assertEx","asArchivistInstance","asDivinerInstance","PayloadDivinerQuerySchema","OsBadgeSchema","assertEx","assertEx","assertEx","PayloadBuilder","PayloadDivinerQuerySchema","WalletSeedPhraseSchema","PayloadBuilder","NO_RESULTS","assertEx","assertEx","assertEx","assertEx","assertEx","PayloadBuilder","mod","assertEx"]}
|
|
1
|
+
{"version":3,"sources":["../../src/access/Caller.ts","../../src/OsCallerBase.ts","../../src/RunningDappCache.ts","../../src/dapp/context/creator/createDappContext.ts","../../src/wallet/DappSeedPhraseRepository.ts","../../src/dapp/context/creator/Creator.ts","../../src/DappCallerBase.ts","../../src/manifest/manifestReplacementTokens.ts","../../src/manifest/os-node.manifest.json","../../src/dapp/context/creator/DefaultPayloads/DefaultPayloads.ts","../../src/classes/lib/Insertable.ts","../../src/dapp/context/creator/DefaultPayloads/DappAccessPayloads.ts","../../src/dapp/context/creator/DefaultPayloads/NodeInfoPayload.ts","../../src/dapp/context/creator/ExternalModulePermissions/ExternalModulePermissions.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/DappsReady.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/isEqual.ts","../../src/lib/isPayload.ts","../../src/lib/ModuleNames.ts","../../src/lib/ModuleAccountPaths.ts","../../src/lib/NameTransforms.ts","../../src/lib/PayloadStore.ts","../../src/lib/tokenPlacesSplit.ts","../../src/loadOsNode.ts","../../src/registration/DappRegistrationService.ts","../../src/intent/Caller.ts","../../src/intent/Resource.ts","../../src/system/ManageSystemDapps.ts","../../src/system/Queries.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/access/RunningAccessDappCache.ts","../../src/access/interfaces/registered-names/helpers/AccessNodeQueries.ts","../../src/access/interfaces/registered-names/helpers/resource/AbstractXnsCaller.ts","../../src/access/interfaces/registered-names/helpers/resource/RegistrationsResource.ts","../../src/access/interfaces/registered-names/helpers/resource/RegistrationsResourceQueries.ts","../../src/access/Queries.ts","../../src/access/Resource.ts","../../src/Caller.ts","../../src/DefaultsQueries.ts","../../src/classes/dapp/DefaultsResource.ts","../../src/classes/menu/Caller.ts","../../src/classes/menu/Resource.ts","../../src/classes/menu/Queries.ts","../../src/classes/settings/badge/Caller.ts","../../src/classes/settings/CallerBase.ts","../../src/classes/settings/badge/Queries.ts","../../src/classes/settings/badge/Resource.ts","../../src/classes/settings/Caller.ts","../../src/utils/buildWalletSeedPhrasePayload.ts","../../src/utils/getApiDomain.ts","../../src/utils/renameObjKey.ts","../../src/classes/settings/SettingsQueries.ts","../../src/classes/settings/Resource.ts","../../src/helpers/monitor/XyOsMonitor.ts","../../src/initializer/DappInitializer.ts","../../src/profileModuleEvents.ts","../../src/PubSubBridgeCaller.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { ModuleFactoryLocatorInstance } from '@xyo-network/module-model'\nimport { asNodeInstance } from '@xyo-network/node-model'\nimport type {\n PostRegistrationHandler,\n RegisteredDappAccess,\n RegisteredDappSet,\n RegisteredDappSetResult,\n XyOsContext,\n} from '@xyo-network/os-model'\nimport { isRegisteredDappAccessDappSet } from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nimport { OsCallerBase } from '../OsCallerBase.ts'\nimport { RunningDappCache } from '../RunningDappCache.ts'\nimport { RunningDappAccessCache } from './RunningAccessDappCache.ts'\n\n/**\n * Caller for managing Dapp Access Nodes\n * Start nodes that have been registered as accessible\n * Grab their Access Node(s)\n * Put RegisteredDappAccess payloads in RegisteredDappInterfacesArchivist\n * Keep Service running that can service requests for Access Nodes\n **/\nexport class DappAccessCaller extends OsCallerBase implements PostRegistrationHandler {\n private allowedNames: string[]\n private platformLocator: ModuleFactoryLocatorInstance\n private registeredDapps: RegisteredDappSetResult[]\n private xnsNetwork: string | undefined\n private xnsNodeUrl: string | undefined\n\n constructor(\n context: XyOsContext,\n registeredDapps: RegisteredDappSetResult[],\n allowedNames: string[],\n xnsNodeUrl: string | undefined,\n xnsNetwork: string | undefined,\n platformLocator = new ModuleFactoryLocator(),\n ) {\n super(context)\n this.registeredDapps = registeredDapps\n this.allowedNames = allowedNames\n this.xnsNodeUrl = xnsNodeUrl\n this.xnsNetwork = xnsNetwork\n this.platformLocator = platformLocator\n }\n\n async start() {\n const registeredDappAccessDappSets = this.registeredDapps.filter(isRegisteredDappAccessDappSet)\n for (const registeredDappSet of registeredDappAccessDappSets) {\n const context = await this.buildRunningDappCache(registeredDappSet, this.allowedNames)\n\n for (const dappAccessor of registeredDappSet.dapp.accessors) {\n await this.cacheAccessNode(dappAccessor, context)\n await this.saveRegisteredDappInterfaces(dappAccessor)\n }\n }\n }\n\n private async buildRunningDappCache(registeredDappSet: RegisteredDappSet, allowedNames: string[]) {\n const { context } = await RunningDappCache.findOrCreate(registeredDappSet.dapp, this.context, allowedNames, this.xnsNodeUrl, this.xnsNetwork)\n if (!context) throw new Error('Dapp context not found')\n return context\n }\n\n private async cacheAccessNode(dappAccessor: RegisteredDappAccess, context: XyOsContext) {\n const accessNodeId = dappAccessor.rootModuleId\n const accessNodeModule = assertEx(await context.root.resolve(accessNodeId), () => 'Access Node Module not found')\n const accessNode = asNodeInstance(accessNodeModule, () => 'Access Node Module is not a NodeInstance', { required: true })\n\n RunningDappAccessCache.set(dappAccessor.registeringDappId, accessNode)\n }\n\n private async saveRegisteredDappInterfaces(registeredDappAccess: RegisteredDappAccess) {\n const archivist = await this.getRegisteredDappInterfacesArchivist()\n\n const hash = await PayloadBuilder.dataHash(registeredDappAccess)\n const [existing] = await archivist.get([hash])\n if (existing) return\n\n await archivist.insert([registeredDappAccess])\n console.debug('[DEBUG] -', `Registered ${registeredDappAccess.registeringDappId} with ${registeredDappAccess.name} interface`)\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 protected context: XyOsContext\n constructor(context: XyOsContext) {\n this.context = context\n }\n\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 { assertEx } from '@xylabs/assert'\nimport type {\n DappId, RegisteredDapp, WindowDappNodeSet, XyOsContext,\n} from '@xyo-network/os-model'\nimport { Mutex } from 'async-mutex'\n\nimport { createDappContext, DappContextCreator } from './dapp/index.ts'\nimport { XyOs } from './XyOs.ts'\n\nconst findOrCreateMutex = new Mutex()\n\n/**\n * A cache for running node instances\n */\nexport class RunningDappCache {\n private static _cache: { [key: DappId]: WindowDappNodeSet } = {}\n\n static async findOrCreate(\n dapp: RegisteredDapp,\n xyOs: XyOsContext,\n allowedNames: string[],\n xnsNodeUrl: string | undefined,\n xnsNetwork: string | undefined,\n ): Promise<WindowDappNodeSet> {\n const dappId = dapp.config.name\n\n return await XyOs.monitor<WindowDappNodeSet>(\n async () =>\n await findOrCreateMutex.runExclusive(async () => {\n const existingWindowDappSet = RunningDappCache.get(dappId)\n if (existingWindowDappSet) {\n console.debug('[DEBUG]', `RunningDappCache, using existing node for ${dappId}`)\n const existingDappContext = assertEx(existingWindowDappSet.context, () => 'No context found in existing dapp node')\n await DappContextCreator.primeDappArchivist(existingDappContext, xyOs, dappId)\n return existingWindowDappSet\n }\n console.debug('[DEBUG]', 'RunningDappCache:creating', dappId)\n const windowDappSet = await createDappContext(dapp, xyOs, allowedNames, xnsNodeUrl, xnsNetwork)\n RunningDappCache.set(dappId, windowDappSet)\n\n return windowDappSet\n }),\n { additionalProperties: { dappId }, name: 'Loading dApp' },\n )\n }\n\n static get(key: DappId): WindowDappNodeSet | undefined {\n return this._cache[key]\n }\n\n static has(key?: DappId) {\n return key ? !!this._cache[key] : false\n }\n\n static set(key: DappId, value: WindowDappNodeSet) {\n this._cache[key] = value\n }\n}\n","import { GenericPayloadDiviner } from '@xyo-network/diviner-payload-generic'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { ModuleFactoryLocatorInstance } from '@xyo-network/module-model'\nimport type {\n RegisteredDapp, WindowDappNodeSet, XyOsContext,\n} from '@xyo-network/os-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { DappNodesCreatorParams } from '../../../classes/lib/index.ts'\nimport { DappSeedPhraseRepository } from '../../../wallet/index.ts'\nimport { DappContextCreator } from './Creator.ts'\n\nconst GenericPayloadDivinerTags = { 'network.xyo.generic.payload.diviner': 'GenericPayloadDiviner' }\n\nconst resolveLocator = (existingLocator?: ModuleFactoryLocatorInstance): ModuleFactoryLocatorInstance => {\n const locator = existingLocator ?? new ModuleFactoryLocator()\n locator.register(GenericPayloadDiviner.factory(), GenericPayloadDivinerTags)\n return locator\n}\n\nexport const createDappContext = async (\n dapp: RegisteredDapp,\n context: XyOsContext,\n allowedNames: string[],\n xnsNodeUrl: string | undefined,\n xnsNetwork: string | undefined,\n): Promise<WindowDappNodeSet> => {\n console.log('createNodes')\n try {\n const dappSeedPhraseRepository = new DappSeedPhraseRepository(context, allowedNames)\n const seedPhrase = await dappSeedPhraseRepository.request(dapp.config.walletId)\n if (!seedPhrase) {\n throw new Error(`unable to find seed phrase for walletId: ${JSON.stringify(dapp.config, null, 2)}`)\n }\n const wallet = await HDWallet.fromPhrase(seedPhrase)\n const dappName = dapp.config.name\n const { config: dappConfig, params: dappParams } = dapp\n\n const locator = resolveLocator((dappParams.locator ?? new ModuleFactoryLocator()).merge(context.platformLocator))\n\n const params: DappNodesCreatorParams = {\n config: { dappName, payload: dappConfig.manifest },\n context,\n locator,\n wallet,\n }\n const dappContextCreator = await DappContextCreator.create(params, xnsNodeUrl, xnsNetwork)\n\n const dappContext = await dappContextCreator.loadDappContext(context)\n\n return {\n context: dappContext,\n dappWallet: wallet,\n }\n } catch (e) {\n const error = e as Error\n console.error(`Error creating dappWindow node: ${error.message}`)\n console.error(`Error creating dappWindow node: ${error.stack}`)\n throw new Error(`Error creating dappWindow node: ${error.message}`)\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 protected readonly allowedNames: string[]\n\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 allowedNames: string[],\n ) {\n super(xyOs)\n this.allowedNames = allowedNames\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 { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { replaceManifestTokens } from '@xyo-network/kernel'\nimport { DappPackageManifestPayloadSchema } from '@xyo-network/manifest'\nimport type { ManifestWrapper } from '@xyo-network/manifest-wrapper'\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, DappPackageManifestPayload, ExternalModule, XyOsContext,\n} from '@xyo-network/os-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport type { DappNodesCreatorParams } from '../../../classes/lib/index.ts'\nimport { DappCallerBase } from '../../../DappCallerBase.ts'\nimport { manifestReplacementTokens } from '../../../manifest/index.ts'\nimport { DefaultPayloads } from './DefaultPayloads/index.ts'\nimport { ExternalModulePermissions } from './ExternalModulePermissions/index.ts'\n\nexport type TargetDappManifestParams = ConstructorParameters<typeof ManifestWrapper<DappPackageManifestPayload>>\n\nexport class DappContextCreator {\n // Designated offset path for the wallet used by windowed dapps. In the future, other offsets could be used for other dapp modes\n private static DAPP_WINDOW_WALLET_PATH = '1'\n\n private context: XyOsContext\n private dappId: DappId\n private externalPermissions?: ExternalModule[]\n private rootWallet: WalletInstance\n private sharedLocator?: ModuleFactoryLocatorInstance\n private targetDappManifestParams: TargetDappManifestParams\n\n constructor(\n targetDappManifestParams: TargetDappManifestParams,\n dappId: DappId,\n context: XyOsContext,\n rootWallet: WalletInstance,\n externalPermissions?: ExternalModule[],\n sharedLocator?: ModuleFactoryLocatorInstance,\n ) {\n this.targetDappManifestParams = targetDappManifestParams\n this.dappId = dappId\n this.context = context\n this.rootWallet = rootWallet\n this.externalPermissions = externalPermissions\n this.sharedLocator = sharedLocator\n }\n\n static async create(params: DappNodesCreatorParams, xnsNodeUrl: string | undefined, xnsNetwork: string | undefined) {\n const {\n config, locator, context, wallet,\n } = params\n const {\n payload, dappName, publicChildren, privateChildren,\n } = config\n\n const { external, manifestPayload } = this.parseDappPackageManifestPayload(payload, xnsNodeUrl, xnsNetwork)\n console.debug('[DEBUG] dApp manifest', manifestPayload)\n\n // derive a wallet for the dapp to use from the root wallet\n const dappWallet = await wallet.derivePath(DappContextCreator.DAPP_WINDOW_WALLET_PATH)\n const targetDappManifestParams: TargetDappManifestParams = [manifestPayload,\n dappWallet,\n locator ?? new ModuleFactoryLocator(),\n publicChildren,\n privateChildren]\n\n const instance = new this(targetDappManifestParams, dappName, context, wallet, external?.modules, locator)\n return instance\n }\n\n // Add default payloads to the archivist shared between the os and the dapp\n static async primeDappArchivist(dappContext: XyOsContext, osContext: XyOsContext, dappName: DappId) {\n const dappCaller = new DappCallerBase(dappContext)\n const dappArchivist = await dappCaller.getDappArchivist()\n const defaultPayloads = new DefaultPayloads(dappArchivist, osContext, dappName)\n\n await defaultPayloads.insert()\n }\n\n // Reset the dapp archivist to remove all payloads\n static async resetDappArchivist(context: XyOsContext) {\n const dappModule = await context.root.resolve('DappArchivist')\n const dappArchivist = assertEx(asArchivistInstance(dappModule), () => 'resetDappArchivist: DappArchivist not found')\n\n await dappArchivist.clear()\n }\n\n private static parseDappPackageManifestPayload(payload: DappPackageManifestPayload, xnsNodeUrl: string | undefined, xnsNetwork: string | undefined) {\n // extract external permissions from package manifest payload\n const { external, ...manifestWithoutExternals } = payload\n const manifestPayloadRaw: DappPackageManifestPayload = {\n ...manifestWithoutExternals,\n schema: DappPackageManifestPayloadSchema,\n }\n console.log('DappContextCreator:parseDappPackageManifestPayload', xnsNodeUrl, xnsNetwork)\n const manifestPayload = replaceManifestTokens(manifestPayloadRaw, manifestReplacementTokens(xnsNodeUrl, xnsNetwork))\n return { external, manifestPayload }\n }\n\n async loadDappContext(context: XyOsContext): Promise<XyOsContext> {\n console.log('DappNodesCreator:loadDappContext', this.dappId)\n // build nodes and attach to dappNodes to dappWindowNode\n const dapp\n = (await context.dappByName(this.dappId))\n ?? (await (async () => {\n const dapp = await context.buildDapp(this.targetDappManifestParams[0], this.dappId)\n await dapp.boot(this.rootWallet, this.sharedLocator)\n return dapp\n })())\n await this.handleExternalModulePermissions(dapp.root)\n await DappContextCreator.primeDappArchivist(dapp, this.context, this.dappId)\n\n return dapp\n }\n\n // try to satisfy the external permissions requested by a dapp\n private async handleExternalModulePermissions(dappWindowNode: NodeInstance) {\n const externalModulePermissions = new ExternalModulePermissions(this.context, dappWindowNode, this.dappId, this.externalPermissions)\n await externalModulePermissions.permit()\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 protected context: XyOsContext\n constructor(context: XyOsContext) {\n this.context = context\n }\n\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 { getXnsDomain } from '@xyo-network/kernel'\n\nexport const manifestReplacementTokens = (\n xnsNodeUrl: string | undefined,\n xnsNetwork: string | undefined,\n) => ({ '[REPLACE_WITH_NS_NODE_URL]': getXnsDomain(xnsNodeUrl, xnsNetwork) })\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 type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { DappName, XyOsContext } from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport type { InsertableConstructor } from '../../../../classes/lib/index.ts'\nimport { createInsertable } from '../../../../classes/lib/index.ts'\nimport { DappAccessPayloads } from './DappAccessPayloads.ts'\nimport { NodeInfoPayload } from './NodeInfoPayload.ts'\n\nexport class DefaultPayloads {\n private dappArchivist: ArchivistInstance\n private dappName: DappName\n private xyOs: XyOsContext\n\n constructor(\n dappArchivist: ArchivistInstance,\n xyOs: XyOsContext,\n dappName: DappName,\n ) {\n this.dappArchivist = dappArchivist\n this.xyOs = xyOs\n this.dappName = dappName\n }\n\n async insert() {\n const insertables: InsertableConstructor[] = [NodeInfoPayload, DappAccessPayloads]\n const insertPayloads: Payload[] = []\n for (const insertable of insertables) {\n const classInstance = createInsertable(insertable, this.xyOs, this.dappName)\n const payloads = await classInstance.payloads()\n insertPayloads.push(...payloads)\n }\n for (const payload of insertPayloads) {\n const [existing] = await this.dappArchivist.get([await PayloadBuilder.dataHash(payload)])\n if (existing) continue\n await this.dappArchivist.insert([payload])\n }\n }\n}\n","import type { DappName, XyOsContext } from '@xyo-network/os-model'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport interface InsertableConstructor { new (_xyOs: XyOsContext, dappName: DappName): DefaultPayloadsInsertable }\n\ntype InsertableConstructorParams = ConstructorParameters<InsertableConstructor>\n\nexport interface DefaultPayloadsInsertable { payloads(): Promise<Payload[]> }\n\nexport const createInsertable = (insertable: InsertableConstructor, ...params: InsertableConstructorParams) => new insertable(...params)\n","import type { DappName, XyOsContext } from '@xyo-network/os-model'\n\nimport type { DefaultPayloadsInsertable } from '../../../../classes/lib/index.ts'\nimport { OsCallerBase } from '../../../../OsCallerBase.ts'\n\nexport class DappAccessPayloads implements DefaultPayloadsInsertable {\n private context: XyOsContext\n constructor(\n context: XyOsContext,\n _dappName: DappName,\n ) {\n this.context = context\n }\n\n async payloads() {\n const osCaller = new OsCallerBase(this.context)\n const archivist = await osCaller.getRegisteredDappInterfacesArchivist()\n return await archivist.all()\n }\n}\n","import type { Address } from '@xylabs/hex'\nimport type {\n DappName, NodeOsInfo, XyOsContext,\n} from '@xyo-network/os-model'\nimport { NodeOsInfoSchema } from '@xyo-network/os-model'\n\nimport type { DefaultPayloadsInsertable } from '../../../../classes/lib/index.ts'\n\nexport class NodeInfoPayload implements DefaultPayloadsInsertable {\n private _context: XyOsContext\n constructor(\n context: XyOsContext,\n _dappName: DappName,\n ) {\n this._context = context\n }\n\n async payloads() {\n const exposedNode = this._context.exposedNode\n if (exposedNode) {\n console.debug('[DEBUG]', 'Found Exposed Node Address', exposedNode?.address)\n } else {\n console.error('exposedNode not found')\n }\n\n await Promise.resolve()\n const nodeOsInfo: NodeOsInfo = {\n publicAddress: exposedNode?.address ?? '' as Address,\n schema: NodeOsInfoSchema,\n }\n return [nodeOsInfo]\n }\n}\n","import type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type {\n DappName, ExternalModule, XyOsContext,\n} from '@xyo-network/os-model'\n\n// Dapps can only request specific modules from the parent node\nconst ALLOWED_MODULES_FROM_PARENT = ['IntentArchivist', 'OsSettingsNode', 'OsPubSubNetworkStackNode', 'OsXyoPublicNetworkStackNode'] as const\n\nexport class ExternalModulePermissions {\n private context: XyOsContext\n private dappName: DappName\n private dappWindowNode: NodeInstance\n private externalPermissions?: ExternalModule[]\n\n constructor(\n context: XyOsContext,\n dappWindowNode: NodeInstance,\n dappName: DappName,\n externalPermissions?: ExternalModule[],\n ) {\n this.context = context\n this.dappWindowNode = dappWindowNode\n this.dappName = dappName\n this.externalPermissions = externalPermissions\n }\n\n async permit() {\n for (const permission of this.externalPermissions ?? []) {\n await this.permitExternalModule(permission)\n }\n }\n\n private getExternalModuleName(permission: ExternalModule) {\n return permission.name as (typeof ALLOWED_MODULES_FROM_PARENT)[number]\n }\n\n private async permitExternalModule(externalPermission: ExternalModule) {\n const externalModuleName = this.getExternalModuleName(externalPermission)\n\n if (ALLOWED_MODULES_FROM_PARENT.includes(externalModuleName)) {\n const mod = await this.resolveExternalModule(externalModuleName)\n await this.registerAndAttachModule(mod)\n } else {\n console.warn(`${this.dappName} requested ${externalModuleName} but it was not fulfilled`)\n }\n }\n\n private async registerAndAttachModule(mod?: AttachableModuleInstance) {\n if (mod) {\n await this.dappWindowNode.register?.(mod)\n await this.dappWindowNode.attach(mod.address, true)\n }\n }\n\n private async resolveExternalModule(id: ModuleIdentifier): Promise<AttachableModuleInstance | undefined> {\n return await this.context.root.resolve(id)\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: ModuleFactoryLocatorInstance\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\nconst dappsReadyConnectionRequest: EventBusPubSubConnectionRequest = {\n publishableEvents: ['dappsReady'],\n type: 'PubSub',\n}\nexport const dappsReadyConnection = () => new EventBusPubSubConnection(dappsReadyConnectionRequest)\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","import { isObject } from '@xylabs/object'\n\nexport function isEqual(a: unknown, b: unknown): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((a as any) === (b as any)) return true\n\n if (typeof a !== typeof b) return false\n\n if (isObject(a) && isObject(b)) {\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n\n if (aKeys.length !== bKeys.length) {\n return false\n }\n\n for (const key of aKeys) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!b.hasOwnProperty(key) || !isEqual((a as any)[key], (b as any)[key])) {\n return false\n }\n }\n\n return true\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return false\n }\n\n for (const [i, element] of a.entries()) {\n if (!isEqual(element, b[i])) {\n return false\n }\n }\n\n return true\n }\n\n return false\n}\n","import { AsObjectFactory } from '@xylabs/object'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nexport const isObject = (x: unknown): x is Record<string | symbol | number, unknown> => {\n return typeof x === 'object' && !Array.isArray(x)\n}\n\nexport const isAnyPayload = (obj: unknown): obj is Payload => {\n if (isObject(obj)) {\n return typeof obj.schema === 'string'\n }\n return false\n}\n\nexport const isPayload\n = <T extends Payload>(schema: Schema[]) =>\n (obj: unknown): obj is T => {\n if (isAnyPayload(obj)) {\n return schema.includes(obj.schema)\n }\n return false\n }\n\nexport const asPayload = <T extends Payload>(schema: Schema[]) => AsObjectFactory.create(isPayload<T>(schema))\n","export const DevelopArchivist = 'DevelopArchivist'\n\nexport const NodeSentinel = 'NodeSentinel'\n","import { DevelopArchivist, NodeSentinel } from './ModuleNames.ts'\n\nexport const RemoteNodeArchivistOffsetPaths: Record<string, Record<string, string>> = {\n Kerplunk: { [DevelopArchivist]: '118' },\n Local: { [DevelopArchivist]: '115' },\n Main: { [DevelopArchivist]: '121' },\n}\n\nexport const ModuleOffsetPaths: Record<string, string> = {\n IdWitness: '1',\n DomainWitness: '2',\n LocationWitness: '3',\n SchemaWitness: '4',\n CryptoCardsGameWitness: '5',\n CryptoCardsMoveWitness: '6',\n EthereumGasEtherchainV2Witness: '7',\n CoingeckoCryptoMarketWitness: '8',\n UniswapCryptoMarketWitness: '9',\n EthereumGasEtherscanWitness: '10',\n [NodeSentinel]: '11',\n [DevelopArchivist]: '12',\n BowserSystemInfoPluginWitness: '13',\n}\n","export class NameTransforms {\n private value: string\n constructor(value: string) {\n this.value = value\n }\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 type { ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport type { ExternalStore } from './ExternalStore.ts'\nimport { isEqual } from './isEqual.ts'\nimport type { Listener } from './Listener.ts'\n\nexport interface PayloadStoreConfig<T extends Payload = Payload> {\n archivist: ArchivistInstance\n getLatest: () => Promise<T[]>\n idFunction: (schema: Payload) => boolean\n}\n\nexport class PayloadStore<T extends Payload = Payload> implements ExternalStore {\n latest: T[] = []\n private archivist: ArchivistInstance\n private deleteListeners: WeakRef<(args: ArchivistModuleEventData['deleted']) => void>[] = []\n private insertListeners: WeakRef<(args: ArchivistModuleEventData['inserted']) => void>[] = []\n private listeners: Listener[] = []\n\n private constructor(archivist: ArchivistInstance) {\n this.archivist = archivist\n }\n\n /**\n * Initialize listeners on the archivist that update class member variables when new payloads are inserted\n */\n static async create<T extends Payload = Payload>({\n archivist, getLatest, idFunction,\n }: PayloadStoreConfig<T>) {\n const instance = new this<T>(archivist)\n\n const insertListener = async ({ payloads }: ArchivistModuleEventData['inserted']) => {\n // if any of the newly inserted payloads pass the idFunction check, rerun the query\n if (payloads.some(idFunction)) {\n const latest = await getLatest()\n if (isEqual(latest, instance.latest)) return\n instance.latest = latest\n instance.emitChange()\n }\n }\n\n // when payloads are deleted, rerun the diviner query\n const deleteListener = async () => {\n instance.latest = await getLatest()\n instance.emitChange()\n }\n\n const weakRefInsertListener = new WeakRef(insertListener)\n const weakRefDeleteListener = new WeakRef(deleteListener)\n const insertListenerRef = weakRefInsertListener.deref()\n const deleteListenerRef = weakRefDeleteListener.deref()\n\n if (insertListenerRef) instance.archivist.on('inserted', insertListenerRef)\n if (deleteListenerRef) instance.archivist.on('deleted', deleteListenerRef)\n\n instance.insertListeners.push(weakRefInsertListener)\n instance.deleteListeners.push(weakRefDeleteListener)\n\n instance.latest = await getLatest()\n return instance\n }\n\n /**\n * Remove all listeners and reset their class members\n */\n cleanupListeners() {\n this.removeListeners(this.insertListeners, 'inserted')\n this.removeListeners(this.deleteListeners, 'deleted')\n this.insertListeners = []\n this.deleteListeners = []\n }\n\n /**\n * Get the current value of the store\n */\n getSnapshot(): T[] {\n return this.latest\n }\n\n /**\n * Add a call back function that is invoked when new Payloads are inserted\n *\n * @param {PayloadListener} onStoreChange\n */\n subscribe(onStoreChange: Listener) {\n this.listeners.push(onStoreChange)\n return () => {\n this.listeners = this.listeners.filter(l => l !== onStoreChange)\n }\n }\n\n private emitChange() {\n for (const listener of this.listeners) {\n listener()\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private removeListeners(listeners: WeakRef<(args: any) => void>[], eventName: string) {\n for (const listener of listeners) {\n const listenerRef = listener.deref()\n if (listenerRef) this.archivist.off(eventName, listenerRef)\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nexport const tokenPlacesSplit = (value: bigint, places: number): [bigint, bigint] => {\n assertEx(places >= 0, () => 'Places has to be >= 0')\n const factor = BigInt(10 ** Math.abs(places))\n const remainder = value % factor\n const wholeValue = value / factor\n return [wholeValue, remainder]\n}\n\nexport const tokenPlacesSplitString = (value: bigint | undefined, places: number): string => {\n if (value === undefined) {\n return '-'\n }\n const [wholeValue, remainder] = tokenPlacesSplit(value, places)\n return `${wholeValue}.${remainder.toString().padStart(Math.abs(places), '0')}`\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","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 { ModuleFactoryLocatorInstance } from '@xyo-network/module-model'\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 context: XyOsContext\n\n private dappAccessRequestConnection = dappAccessRequestConnection()\n private developmentMode?: boolean\n\n private exposeDappRequestConnection = exposeDappRequestConnection()\n\n private locator: ModuleFactoryLocatorInstance\n\n private params: DappRegistrationServiceParams\n\n constructor(\n context: XyOsContext,\n params?: DappRegistrationServiceParams,\n locator: ModuleFactoryLocatorInstance = new ModuleFactoryLocator(),\n developmentMode?: boolean,\n ) {\n this.context = context\n this.params = params ?? {\n dappNames: [], dappParams: {}, dappPayloads: [],\n }\n this.locator = locator\n this.developmentMode = developmentMode\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 type { DappIntent, XyOsContext } from '@xyo-network/os-model'\nimport { isDappIntent } from '@xyo-network/os-model'\nimport type { WithSources, WithStorageMeta } from '@xyo-network/payload-model'\n\nimport { DappCallerBase } from '../DappCallerBase.ts'\nimport type { Listener, ResourceStore } from '../lib/index.ts'\nimport { PayloadStore } from '../lib/index.ts'\n\nexport type DappIntentViews = 'latestDappIntent' | 'allDappIntents'\nconst NO_RESULTS: [] = []\n\nexport class DappIntentResource extends DappCallerBase implements ResourceStore<DappIntentViews> {\n private _allDappIntents: PayloadStore<DappIntent> | undefined\n private _latestDappIntent: PayloadStore<DappIntent> | undefined\n\n constructor(context: XyOsContext) {\n super(context)\n }\n\n get allDappIntents() {\n return assertEx(this._allDappIntents, () => 'allDappIntents not set')\n }\n\n get latestDappIntent() {\n return assertEx(this._latestDappIntent, () => 'latestDappIntent not set')\n }\n\n get subscriptions() {\n return {\n allDappIntents: (cb: Listener) => this.allDappIntents.subscribe(cb),\n latestDappIntent: (cb: Listener) => this.latestDappIntent.subscribe(cb),\n }\n }\n\n get views() {\n return {\n allDappIntents: () => this.allDappIntents.getSnapshot(),\n latestDappIntent: () => this.latestDappIntent.getSnapshot(),\n }\n }\n\n cleanupListeners() {\n this.latestDappIntent.cleanupListeners()\n this.allDappIntents.cleanupListeners()\n }\n\n async start() {\n const archivist = await this.getDappIntentArchivist()\n\n this._allDappIntents = await PayloadStore.create<DappIntent>({\n archivist,\n getLatest: async () => (await archivist.all()) as WithStorageMeta<WithSources<DappIntent>>[],\n idFunction: isDappIntent,\n })\n this._latestDappIntent = await PayloadStore.create<DappIntent>({\n archivist,\n getLatest: async () => {\n const all = await archivist.all()\n const result = all.length > 0 ? [all.at(-1)] : NO_RESULTS\n return result as WithStorageMeta<WithSources<DappIntent>>[]\n },\n idFunction: isDappIntent,\n })\n }\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { ModuleFactoryLocatorInstance } from '@xyo-network/module-model'\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 defaultSystemDappParams: Record<string, DappParams>\n private defaultSystemDapps: PayloadWithVersion[]\n private defaultSystemNames: string[]\n private developmentMode?: boolean\n private locator?: ModuleFactoryLocatorInstance\n\n private onErrorCallbacks: ErrorListener[] = []\n\n constructor(\n context: XyOsContext,\n defaultSystemNames: string[],\n defaultSystemDapps: PayloadWithVersion[],\n defaultSystemDappParams: Record<string, DappParams>,\n locator?: ModuleFactoryLocatorInstance,\n developmentMode?: boolean,\n ) {\n super(context)\n this.defaultSystemNames = defaultSystemNames\n this.defaultSystemDapps = defaultSystemDapps\n this.defaultSystemDappParams = defaultSystemDappParams\n this.locator = locator\n this.developmentMode = developmentMode\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 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 { assertEx } from '@xylabs/assert'\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 {\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: ModuleFactoryLocatorInstance\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 { ModuleFactoryLocatorInstance } from '@xyo-network/module-model'\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?: ModuleFactoryLocatorInstance\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 private dappSeedPhraseRepository: DappSeedPhraseRepository\n\n constructor(dappSeedPhraseRepository: DappSeedPhraseRepository) {\n this.dappSeedPhraseRepository = dappSeedPhraseRepository\n }\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 private driverName: string\n private kernel: KernelExternal\n\n constructor(\n kernel: KernelExternal,\n driverName: string,\n ) {\n super({})\n this._id = uuid()\n this.kernel = kernel\n this.driverName = driverName\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 { NodeInstance } from '@xyo-network/node-model'\nimport type { DappId } from '@xyo-network/os-model'\n\n/**\n * A cache for running access node instances\n */\nexport class RunningDappAccessCache {\n private static _cache: { [key: DappId]: NodeInstance } = {}\n\n static get(key: DappId) {\n return this._cache[key]\n }\n\n static has(key?: DappId) {\n return key ? !!this._cache[key] : false\n }\n\n static set(key: DappId, value: NodeInstance) {\n this._cache[key] = value\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type {\n DappAccessRequest, RegisteredDappAccess, XyOsContext,\n} from '@xyo-network/os-model'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport { RunningDappAccessCache } from '../../../RunningAccessDappCache.ts'\n\nexport class AccessNodeQueries {\n protected xyOsContext: XyOsContext\n private accessRequest: DappAccessRequest\n private registeredDappAccess: RegisteredDappAccess\n\n constructor(\n xyOsContext: XyOsContext,\n accessRequest: DappAccessRequest,\n registeredDappAccess: RegisteredDappAccess,\n ) {\n this.xyOsContext = xyOsContext\n this.accessRequest = accessRequest\n this.registeredDappAccess = registeredDappAccess\n }\n\n get nameServiceNamesAccessNode() {\n return assertEx(RunningDappAccessCache.get(this.registeredDappAccess.registeringDappId), () => 'No access node found')\n }\n\n // Refresh the archivist in the dapp\n async refresh() {\n const archivist = await this.getArchivistFromDappNode()\n await archivist.clear()\n await this.run()\n console.log('refreshed')\n }\n\n // Run the access node queries\n async run() {\n const payloads = await this.getPayloadsFromAccessNode()\n await this.insertAccessNodePayloadsIntoDappNodeArchivist(payloads)\n return payloads\n }\n\n private async getArchivistFromDappNode() {\n const archivistPath = this.accessRequest?.destinationArchivist || 'DappArchivist'\n const mod = assertEx(await this.xyOsContext.root.resolve(archivistPath), () => `Unable to find archivist at ${archivistPath}`)\n return asArchivistInstance(mod, () => `Module at ${archivistPath} is not an archivist`, { required: true })\n }\n\n private async getPayloadsFromAccessNode() {\n const archivistFromAccessNode = await this.resolveArchivistFromAccessNode()\n return await archivistFromAccessNode.all()\n }\n\n private async insertAccessNodePayloadsIntoDappNodeArchivist(payloads: Payload[]) {\n const archivist = await this.getArchivistFromDappNode()\n await archivist.clear()\n await archivist.insert(payloads)\n }\n\n private async resolveArchivistFromAccessNode() {\n const archivist = assertEx(\n await this.nameServiceNamesAccessNode.resolve('PublicXnsArchivist'),\n () => 'Unable to find archivist at PublicXnsArchivist',\n )\n return asArchivistInstance(archivist, () => 'PublicXnsArchivist is not an archivist', { required: true })\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 XnsArchivistPayloadDivinerModuleName = 'XnsArchivistPayloadDiviner'\nexport const XnsArchivistModuleName = 'XnsArchivist'\nexport const XnsRegistrationsArchivistModuleName = 'XnsRegistrationsArchivist'\n\nexport abstract class AbstractXnsCaller {\n protected context: XyOsContext\n constructor(context: XyOsContext) {\n this.context = context\n }\n\n /**\n * Get the XnsArchivist\n */\n async getXnsArchivist(pathPrefix?: string) {\n const fullyQualifiedPath = pathPrefix ? `${pathPrefix}:${XnsArchivistModuleName}` : XnsArchivistModuleName\n const mod = assertEx(await this.context.root.resolve(fullyQualifiedPath), () => `${fullyQualifiedPath} not found`)\n return asArchivistInstance(mod, () => `${fullyQualifiedPath} is not an archivist`, { required: true })\n }\n\n /**\n * Get the XnsArchivistPayloadDiviner\n */\n async getXnsArchivistPayloadDiviner(pathPrefix?: string) {\n const fullyQualifiedPath = pathPrefix ? `${pathPrefix}:${XnsArchivistPayloadDivinerModuleName}` : XnsArchivistPayloadDivinerModuleName\n const mod = assertEx(await this.context.root.resolve(fullyQualifiedPath), () => `${fullyQualifiedPath} not found`)\n return asDivinerInstance(mod, () => `${fullyQualifiedPath} is not an diviner`, { required: true })\n }\n\n /**\n * Get the XnsRegistrationsArchivist\n */\n async getXnsRegistrationsArchivist(pathPrefix?: string) {\n const fullyQualifiedPath = pathPrefix ? `${pathPrefix}:${XnsRegistrationsArchivistModuleName}` : XnsRegistrationsArchivistModuleName\n const mod = assertEx(await this.context.root.resolve(fullyQualifiedPath), () => `${fullyQualifiedPath} not found`)\n return asArchivistInstance(mod, () => `${fullyQualifiedPath} is not an archivist`, { required: true })\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { isTemporalIndexingDivinerResultIndex } from '@xyo-network/diviner-temporal-indexing-model'\nimport type { TemporalIndexRegistrationResults, XyOsContext } from '@xyo-network/os-model'\nimport type { WithSources } from '@xyo-network/payload-model'\nimport type { Listener } from 'ethers'\n\nimport type { ResourceStore } from '../../../../../lib/index.ts'\nimport { PayloadStore } from '../../../../../lib/index.ts'\nimport { AbstractXnsCaller } from './AbstractXnsCaller.ts'\nimport { XnsRegistrationsResourceQueries } from './RegistrationsResourceQueries.ts'\n\nexport type XnsRegistrationsViews = 'allRegistrations'\n\nexport class XnsRegistrationsResource extends AbstractXnsCaller implements ResourceStore<XnsRegistrationsViews> {\n protected _allRegistrations: PayloadStore<WithSources<TemporalIndexRegistrationResults>> | undefined\n private pathPrefix?: string\n\n constructor(\n context: XyOsContext,\n pathPrefix?: string,\n ) {\n super(context)\n this.pathPrefix = pathPrefix\n }\n\n get allRegistrations() {\n return assertEx(this._allRegistrations)\n }\n\n get subscriptions() {\n return { allRegistrations: (cb: Listener) => this.allRegistrations.subscribe(cb) }\n }\n\n get views() {\n return { allRegistrations: () => this.allRegistrations.getSnapshot() }\n }\n\n cleanupListeners() {\n this.allRegistrations.cleanupListeners()\n }\n\n async start() {\n const xnsArchivistPayloadDiviner = await this.getXnsArchivistPayloadDiviner(this.pathPrefix)\n const xnsArchivist = await this.getXnsArchivist(this.pathPrefix)\n\n this._allRegistrations = await PayloadStore.create<WithSources<TemporalIndexRegistrationResults>>({\n archivist: xnsArchivist,\n getLatest: async () => await XnsRegistrationsResourceQueries.getAllRegistrations(xnsArchivistPayloadDiviner),\n idFunction: isTemporalIndexingDivinerResultIndex,\n })\n }\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerResultIndexSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport type { TemporalIndexRegistrationResults } from '@xyo-network/os-model'\nimport type { WithSources, WithStorageMeta } from '@xyo-network/payload-model'\n\nexport const XnsRegistrationsResourceQueries = {\n getAllRegistrations: async (diviner: DivinerInstance) => {\n const query = {\n limit: 100,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [TemporalIndexingDivinerResultIndexSchema],\n }\n\n return (await diviner.divine([query])) as WithSources<TemporalIndexRegistrationResults>[]\n },\n\n getRecentRegistrations: async (archivist: ArchivistInstance) => {\n return (await archivist.all()).toReversed() as WithStorageMeta<TemporalIndexRegistrationResults>[]\n },\n}\n","import type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { DappAccessRequest, RegisteredDappAccess } from '@xyo-network/os-model'\nimport { DappAccessRequestSchema, RegisteredDappAccessSchema } from '@xyo-network/os-model'\nimport type { WithSources } from '@xyo-network/payload-model'\n\nconst noResults: unknown[] = []\n\nexport const DappAccessRequestQueries = {\n async getAccessRequests(diviner: DivinerInstance) {\n const query = {\n limit: 1,\n schema: PayloadDivinerQuerySchema,\n schemas: [DappAccessRequestSchema],\n }\n\n const results = (await diviner.divine([query])) as WithSources<DappAccessRequest>[]\n\n if (results.length === 0) {\n return noResults as WithSources<DappAccessRequest>[]\n }\n return results\n },\n async getRegisteredInterfaces(diviner: DivinerInstance) {\n const query = {\n limit: 1,\n schema: PayloadDivinerQuerySchema,\n schemas: [RegisteredDappAccessSchema],\n }\n\n const results = (await diviner.divine([query])) as WithSources<RegisteredDappAccess>[]\n\n if (results.length === 0) {\n return noResults as WithSources<RegisteredDappAccess>[]\n }\n return results\n },\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n DappAccessRequest, RegisteredDappAccess, XyOsContext,\n} from '@xyo-network/os-model'\nimport { isDappAccessRequestWithMeta, isRegisteredDappAccess } from '@xyo-network/os-model'\n\nimport { DappCallerBase } from '../DappCallerBase.ts'\nimport type { Listener, ResourceStore } from '../lib/index.ts'\nimport { PayloadStore } from '../lib/index.ts'\nimport { DappAccessRequestQueries } from './Queries.ts'\n\nexport type DappAccessRequestViews = 'accessRequests' | 'registeredInterfaces'\n\nexport class DappAccessRequestResource extends DappCallerBase implements ResourceStore<DappAccessRequestViews> {\n private _accessRequestListener: PayloadStore<DappAccessRequest> | undefined\n private _registeredInterfacesListener: PayloadStore<RegisteredDappAccess> | undefined\n\n constructor(context: XyOsContext) {\n super(context)\n }\n\n get accessRequestListener() {\n return assertEx(this._accessRequestListener, () => 'accessRequests note found')\n }\n\n get registeredInterfacesListener() {\n return assertEx(this._registeredInterfacesListener, () => 'registeredInterfaces note found')\n }\n\n get subscriptions() {\n return {\n accessRequests: (cb: Listener) => this.accessRequestListener.subscribe(cb),\n registeredInterfaces: (cb: Listener) => this.registeredInterfacesListener.subscribe(cb),\n }\n }\n\n get views() {\n return {\n accessRequests: () => this.accessRequestListener.getSnapshot(),\n registeredInterfaces: () => this.registeredInterfacesListener.getSnapshot(),\n }\n }\n\n cleanupListeners(): void {\n this.accessRequestListener.cleanupListeners()\n }\n\n // Start the resource\n async start() {\n const archivist = await this.getDappArchivist()\n const diviner = await this.getDappArchivistPayloadDiviner()\n\n this._accessRequestListener = await PayloadStore.create<DappAccessRequest>({\n archivist,\n getLatest: async () => await DappAccessRequestQueries.getAccessRequests(diviner),\n idFunction: isDappAccessRequestWithMeta,\n })\n\n this._registeredInterfacesListener = await PayloadStore.create<RegisteredDappAccess>({\n archivist,\n getLatest: async () => await DappAccessRequestQueries.getRegisteredInterfaces(diviner),\n idFunction: isRegisteredDappAccess,\n })\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappAccessRequest,\n DappId,\n DappInjectableParams,\n DappIntent,\n RegisteredDappAccess,\n XyOsContext,\n} from '@xyo-network/os-model'\nimport {\n DappAccessRequestSchema,\n DappInjectableParamsSchema,\n DappIntentTypes,\n DappMode,\n RegisteredDappAccessSchema,\n} from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport { DappCallerBase } from './DappCallerBase.ts'\nimport { DappDefaultsResourceQueries } from './DefaultsQueries.ts'\nimport { DappIntentCaller } from './intent/index.ts'\n\nexport class DappCaller extends DappCallerBase {\n constructor(context: XyOsContext) {\n super(context)\n }\n\n /**\n * Add payloads to the dapp archivist\n * @param {Payload[]} payloads\n * @param {Boolean} force\n */\n async addPayloadsToDappArchivist(payloads: Payload[] = [], force: boolean = false) {\n const dappArchivist = await this.getDappArchivist()\n if (force) {\n await dappArchivist.insert(payloads)\n } else {\n for (const payload of payloads) {\n const hash = await PayloadBuilder.dataHash(payload)\n const [existing] = await dappArchivist.get([hash])\n if (existing) continue\n await dappArchivist.insert([payload])\n }\n }\n }\n\n /**\n * Build Access Request\n * @param {DappAccessRequest['mode']} mode\n * @param {Hash} registeredDappAccessHash\n * @param {string} requestingDappId\n * @param {string | undefined} destinationArchivist\n */\n buildAccessRequest(mode: DappAccessRequest['mode'], registeredDappAccessHash: Hash, requestingDappId: string, destinationArchivist?: string) {\n const accessRequest: DappAccessRequest = {\n destinationArchivist,\n mode,\n registeredDappAccessHash,\n requestingDappId,\n schema: DappAccessRequestSchema,\n timestamp: Date.now(),\n }\n return accessRequest\n }\n\n /**\n * Get all available dapp access requests\n */\n async getDappAccessPayloads() {\n const diviner = await this.getDappArchivistPayloadDiviner()\n const query: PayloadDivinerQueryPayload = {\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [RegisteredDappAccessSchema],\n }\n\n return diviner.divine([query])\n }\n\n /**\n * Get the most recent dapp injectable params\n * @returns Promise\n */\n async getDappInjectableParams(): Promise<DappInjectableParams[] | undefined> {\n const diviner = await this.getDappArchivistPayloadDiviner()\n\n return await DappDefaultsResourceQueries.getDappInjectableParamsFromRoute(diviner)\n }\n\n /**\n * Get the most recent dapp intent\n * @param {string} name\n */\n async getRegisteredDappAccessByName(name: string) {\n const diviner = await this.getDappArchivistPayloadDiviner()\n const query = {\n limit: 1,\n name,\n schema: PayloadDivinerQuerySchema,\n schemas: [RegisteredDappAccessSchema],\n }\n\n const [payload] = assertEx(await diviner.divine([query]), () => 'Unable to find registered dapp access') as RegisteredDappAccess[]\n return payload\n }\n\n /**\n * Get the user wallet\n */\n getUserAccount(dappName: string): Promisable<AccountInstance> {\n // new implementation\n const account = this.context.user.signers?.get(dappName)\n\n if (account) {\n return account\n } else {\n throw new Error('Unable to find user wallet')\n }\n }\n\n /**\n * Get all wallets for the user\n */\n getUserAccountsAll(): Promisable<AccountInstance[]> {\n return [...this.context.user.signers?.values() ?? []]\n }\n\n /**\n * Make Dapp Access Request\n * @param {string} requestingDappId\n * @param {string} registeredDappAccessHash\n * @param {string} mode\n * @param {string} destinationArchivist\n */\n async makeDappAccessRequest(\n requestingDappId: DappAccessRequest['requestingDappId'],\n registeredDappAccessHash: DappAccessRequest['registeredDappAccessHash'],\n mode?: DappAccessRequest['mode'],\n destinationArchivist?: DappAccessRequest['destinationArchivist'],\n ) {\n const archivist = await this.getDappArchivist()\n const registeredDappAccessPayload = await archivist.get([registeredDappAccessHash])\n if (!registeredDappAccessPayload) {\n throw new Error('No registered dapp access found')\n }\n const accessRequest = this.buildAccessRequest(mode, registeredDappAccessHash, requestingDappId, destinationArchivist)\n await archivist.insert([accessRequest])\n }\n\n /**\n * Make Dapp Intent Request\n * @param {DappId} sourceDappId\n * @param {DappId} targetDappId\n * @param {DappIntentTypes=DappIntentTypes.Launch} intent\n * @param {DappIntent['params']} mode\n */\n async makeDappIntentRequest(\n sourceDappId: DappId,\n targetDappId: DappId,\n intent: DappIntentTypes = DappIntentTypes.Launch,\n mode: DappMode = DappMode.Window,\n params?: DappIntent['params'],\n ) {\n if (!sourceDappId) {\n throw new Error('No source dapp id provided, dApps must declare a sourceDappId')\n }\n const archivist = await this.getDappArchivist()\n const dappIntent: DappIntent = DappIntentCaller.buildIntent(sourceDappId, intent, targetDappId, mode, params)\n return await archivist.insert([dappIntent])\n }\n\n /**\n * Set the dapp injectable params\n *\n * @param {URLSearchParams} searchParams\n * @param {string} pathname\n */\n async setDappInjectableRouteParams(searchParams: URLSearchParams = new URLSearchParams(), pathname: string): Promise<void> {\n const dappArchivist = await this.getDappArchivist()\n\n const params: DappInjectableParams['params'] = {}\n for (const [key, value] of searchParams.entries()) {\n params[key] = value\n }\n\n const payload: DappInjectableParams = {\n params,\n path: pathname,\n schema: DappInjectableParamsSchema,\n source: 'route',\n timestamp: Date.now(),\n }\n\n await dappArchivist.insert([payload])\n }\n}\n","import type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { DappInjectableParams, NodeOsInfo } from '@xyo-network/os-model'\nimport { DappInjectableParamsSchema, NodeOsInfoSchema } from '@xyo-network/os-model'\nimport type { WithSources } from '@xyo-network/payload-model'\n\nexport const DappDefaultsResourceQueries = {\n async getDappInjectableParamsFromRoute(diviner: DivinerInstance) {\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappInjectableParamsSchema],\n source: 'route',\n }\n return (await diviner.divine([query])) as WithSources<DappInjectableParams>[]\n },\n async getNodeOsInfo(diviner: DivinerInstance) {\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [NodeOsInfoSchema],\n }\n return (await diviner.divine([query])) as WithSources<NodeOsInfo>[]\n },\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n DappInjectableParams, NodeOsInfo, XyOsContext,\n} from '@xyo-network/os-model'\nimport { isDappInjectableParams, isNodeOsInfo } from '@xyo-network/os-model'\n\nimport { DappCallerBase } from '../../DappCallerBase.ts'\nimport { DappDefaultsResourceQueries } from '../../DefaultsQueries.ts'\nimport type { Listener, ResourceStore } from '../../lib/index.ts'\nimport { PayloadStore } from '../../lib/index.ts'\n\nexport type DappDefaultsResourceViews = 'nodeOsInfo' | 'dappInjectableParamsFromRoute'\n\n/**\n * A resource for interacting with Dapp Defaults\n */\nexport class DappDefaultsResource extends DappCallerBase implements ResourceStore<DappDefaultsResourceViews> {\n private _dappInjectableParamsFromRouteListener: PayloadStore<DappInjectableParams> | undefined\n private _nodeOsInfoListener: PayloadStore<NodeOsInfo> | undefined\n\n constructor(context: XyOsContext) {\n super(context)\n }\n\n get dappInjectableParamsFromRouteListener() {\n return assertEx(this._dappInjectableParamsFromRouteListener, () => 'DappInjectableParams not found')\n }\n\n get nodeOsInfoListener() {\n return assertEx(this._nodeOsInfoListener, () => 'NodeOsInfo not found')\n }\n\n get subscriptions() {\n return {\n dappInjectableParamsFromRoute: (cb: Listener) => this.dappInjectableParamsFromRouteListener.subscribe(cb),\n nodeOsInfo: (cb: Listener) => this.nodeOsInfoListener.subscribe(cb),\n }\n }\n\n get views() {\n return {\n dappInjectableParamsFromRoute: () => this.dappInjectableParamsFromRouteListener.getSnapshot(),\n nodeOsInfo: () => this.nodeOsInfoListener.getSnapshot(),\n }\n }\n\n cleanupListeners() {\n this.nodeOsInfoListener.cleanupListeners()\n }\n\n async start() {\n const archivist = await this.getDappArchivist()\n const diviner = await this.getDappArchivistPayloadDiviner()\n\n this._nodeOsInfoListener = await PayloadStore.create<NodeOsInfo>({\n archivist,\n getLatest: async () => await DappDefaultsResourceQueries.getNodeOsInfo(diviner),\n idFunction: isNodeOsInfo,\n })\n\n this._dappInjectableParamsFromRouteListener = await PayloadStore.create<DappInjectableParams>({\n archivist,\n getLatest: async () => await DappDefaultsResourceQueries.getDappInjectableParamsFromRoute(diviner),\n idFunction: isDappInjectableParams,\n })\n }\n}\n","import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappInjectableParams,\n DappNavItemSelection,\n XyOsContext,\n} from '@xyo-network/os-model'\nimport {\n DappInjectableParamsSchema,\n DappNavItemSelectionSchema,\n} from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport { DappCaller } from '../../Caller.ts'\n\nexport class DappMenuCaller extends DappCaller {\n constructor(context: XyOsContext) {\n super(context)\n }\n\n /**\n * Add new Payloads to the dappArchivist if they haven't already\n *\n * @param {Payload[]} payloads\n */\n async add(payloads: Payload[], force = false) {\n const dappArchivist = await this.getDappArchivist()\n\n for (const payload of payloads) {\n const hash = await PayloadBuilder.dataHash(payload)\n const [existing] = await dappArchivist.get([hash])\n if (!existing || force) {\n await dappArchivist.insert(payloads)\n }\n }\n }\n\n async currentNavSelection(): Promise<DappNavItemSelection[] | undefined> {\n const diviner = await this.getDappArchivistPayloadDiviner()\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappNavItemSelectionSchema],\n }\n\n return (await diviner.divine([query])) as DappNavItemSelection[]\n }\n\n /*\n * Indicate to the system that a nav item was selected\n *\n * @param {string} path\n * @params {string} injectableParamsPath\n * @returns Promise\n */\n async makeNavItemSelection(path: string, injectableParamsPath?: string): Promise<void> {\n const dappArchivist = await this.getDappArchivist()\n const payload: DappNavItemSelection = {\n path,\n schema: DappNavItemSelectionSchema,\n timestamp: Date.now(),\n }\n await dappArchivist.insert([payload])\n\n if (injectableParamsPath) {\n const injectableParams: DappInjectableParams = {\n params: {},\n path: injectableParamsPath,\n schema: DappInjectableParamsSchema,\n source: 'route',\n timestamp: Date.now(),\n }\n await dappArchivist.insert([injectableParams])\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n DappNavItem, DappNavItemSelection, DappNavMenuConfig, XyOsContext,\n} from '@xyo-network/os-model'\nimport { isDappNavItemSelection, isDappNavMenuConfig } from '@xyo-network/os-model'\nimport type { Payload, WithSources } from '@xyo-network/payload-model'\n\nimport { DappCaller } from '../../Caller.ts'\nimport type { Listener, ResourceStore } from '../../lib/index.ts'\nimport { PayloadStore } from '../../lib/index.ts'\nimport { DappMenuQueries } from './Queries.ts'\n\nexport type DappMenuResourceViews = 'menuConfigs' | 'menuItems' | 'menuItemsVisible' | 'menuItemSelections'\n\nexport type NavPayloadType<T extends Payload = Payload> = WithSources<T>[]\n\n/**\n * A Repository for interacting with dapp menu items and config\n */\nexport class DappMenuResource extends DappCaller implements ResourceStore<DappMenuResourceViews> {\n private _menuConfigListener: PayloadStore<DappNavMenuConfig> | undefined\n private _menuItemListener: PayloadStore<DappNavItem> | undefined\n private _menuItemSelectionListener: PayloadStore<DappNavItemSelection> | undefined\n private _menuItemVisibleListener: PayloadStore<DappNavItem> | undefined\n\n constructor(xyOsContext: XyOsContext) {\n super(xyOsContext)\n }\n\n get menuConfigListener() {\n return assertEx(this._menuConfigListener, () => 'menuConfigListener note found')\n }\n\n get menuItemListener() {\n return assertEx(this._menuItemListener, () => 'menuItemListener note found')\n }\n\n get menuItemSelectionListener() {\n return assertEx(this._menuItemSelectionListener, () => 'menuItemSelectionListener note found')\n }\n\n get menuItemVisibleListener() {\n return assertEx(this._menuItemVisibleListener, () => 'menuItemVisibleListener note found')\n }\n\n /** subscribe to latest set of payloads */\n get subscriptions() {\n return {\n menuConfigs: (cb: Listener) => this.menuConfigListener.subscribe(cb),\n menuItemSelections: (cb: Listener) => this.menuItemSelectionListener.subscribe(cb),\n menuItems: (cb: Listener) => this.menuItemListener.subscribe(cb),\n menuItemsVisible: (cb: Listener) => this.menuItemVisibleListener.subscribe(cb),\n }\n }\n\n /**\n * Return the latest menu payloads from the repository\n */\n get views() {\n return {\n menuConfigs: () => this.menuConfigListener.getSnapshot(),\n menuItemSelections: () => this.menuItemSelectionListener.getSnapshot(),\n menuItems: () => this.menuItemListener.getSnapshot(),\n menuItemsVisible: () => this.menuItemVisibleListener.getSnapshot(),\n }\n }\n\n /**\n * Remove all listeners and reset their class members\n */\n cleanupListeners() {\n this.menuConfigListener.cleanupListeners()\n this.menuItemListener.cleanupListeners()\n this.menuItemSelectionListener.cleanupListeners()\n }\n\n /**\n * Start the resource\n */\n async start(): Promise<void> {\n const dappArchivist = await this.getDappArchivist()\n const dappArchivistPayloadDiviner = await this.getDappArchivistPayloadDiviner()\n\n this._menuConfigListener = await PayloadStore.create<DappNavMenuConfig>({\n archivist: dappArchivist,\n getLatest: async () => await DappMenuQueries.getMenuConfigs(dappArchivistPayloadDiviner),\n idFunction: isDappNavMenuConfig,\n })\n this._menuItemListener = await PayloadStore.create<DappNavItem>({\n archivist: dappArchivist,\n getLatest: async () => await DappMenuQueries.getMenuItems(dappArchivistPayloadDiviner),\n idFunction: isDappNavMenuConfig,\n })\n this._menuItemVisibleListener = await PayloadStore.create<DappNavItem>({\n archivist: dappArchivist,\n getLatest: async () => await DappMenuQueries.getVisibleMenuItems(dappArchivistPayloadDiviner),\n idFunction: isDappNavMenuConfig,\n })\n this._menuItemSelectionListener = await PayloadStore.create<DappNavItemSelection>({\n archivist: dappArchivist,\n getLatest: async () => await DappMenuQueries.getNavItemSelections(dappArchivistPayloadDiviner),\n idFunction: isDappNavItemSelection,\n })\n }\n}\n","import type { DivinerInstance } from '@xyo-network/diviner-model'\nimport type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type {\n DappNavItem,\n DappNavItemSelection,\n DappNavMenuConfig,\n} from '@xyo-network/os-model'\nimport {\n DappNavItemSchema,\n DappNavItemSelectionSchema,\n DappNavMenuConfigSchema,\n} from '@xyo-network/os-model'\nimport type { WithSources } from '@xyo-network/payload-model'\n\nconst NO_ITEMS: unknown[] = []\n\nexport const DappMenuQueries = {\n async getMenuConfigs(diviner: DivinerInstance): Promise<WithSources<DappNavMenuConfig>[]> {\n const query: PayloadDivinerQueryPayload = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappNavMenuConfigSchema],\n }\n return (await diviner.divine([query])) as WithSources<DappNavMenuConfig>[]\n },\n\n async getMenuItems(diviner: DivinerInstance) {\n const query: PayloadDivinerQueryPayload = {\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappNavItemSchema],\n }\n\n const results = (await diviner.divine([query])) as WithSources<DappNavItem>[]\n return results.length > 0 ? results : (NO_ITEMS as WithSources<DappNavItem>[])\n },\n\n async getNavItemSelections(diviner: DivinerInstance) {\n const query: PayloadDivinerQueryPayload = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappNavItemSelectionSchema],\n }\n const results = (await diviner.divine([query])) as WithSources<DappNavItemSelection>[]\n return results.length > 0 ? results : (NO_ITEMS as WithSources<DappNavItemSelection>[])\n },\n\n async getVisibleMenuItems(diviner: DivinerInstance) {\n const query: PayloadDivinerQueryPayload = {\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [DappNavItemSchema],\n }\n const results = (await diviner.divine([query])) as WithSources<DappNavItem>[]\n return results.filter(menuItem => menuItem.hidden !== true).toSorted((a, b) => ((a.weight ?? 0) > (b.weight ?? 0) ? 1 : -1))\n },\n}\n","import type { ValidOsAchievements } from '@xyo-network/os-model'\nimport { OsBadgeSchema } from '@xyo-network/os-model'\n\nimport { OsSettingsCallerBase } from '../CallerBase.ts'\nimport { OsBadgeQueries } from './Queries.ts'\n\nexport class OsBadgeCaller extends OsSettingsCallerBase {\n /**\n * @param {ValidOsAchievements} achievement\n */\n async getBadge(achievement: ValidOsAchievements) {\n const diviner = await this.getOsSettingsPayloadDiviner()\n const results = await OsBadgeQueries.getBadge(achievement, diviner)\n return results[0] ?? null\n }\n\n /**\n * @param {ValidOsAchievements} achievement\n */\n async saveBadge(achievement: ValidOsAchievements) {\n const badge = {\n achievement,\n schema: OsBadgeSchema,\n timestamp: Date.now(),\n }\n\n const archivist = await this.getOsSettingsArchivist()\n return await archivist.insert([badge])\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\nconst OsSettingsArchivistModuleName = 'OsSettingsNode:OsSettingsArchivist'\nconst OsSettingsArchivistPayloadDivinerModuleName = 'OsSettingsNode:OsSettingsArchivistPayloadDiviner'\n\nexport class OsSettingsCallerBase {\n protected context: XyOsContext\n constructor(context: XyOsContext) {\n this.context = context\n }\n\n async getOsSettingsArchivist() {\n const mod = assertEx(await this.context.root.resolve(OsSettingsArchivistModuleName), () => `${OsSettingsArchivistModuleName} not found`)\n return asArchivistInstance(mod, () => `${OsSettingsArchivistModuleName} is not an archivist`, { required: true })\n }\n\n async getOsSettingsPayloadDiviner() {\n const mod = assertEx(\n await this.context.root.resolve(OsSettingsArchivistPayloadDivinerModuleName),\n () => `${OsSettingsArchivistPayloadDivinerModuleName} not found`,\n )\n return asDivinerInstance(mod, () => `${OsSettingsArchivistPayloadDivinerModuleName} is not a diviner`, { required: true })\n }\n}\n","import type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { OsBadge } from '@xyo-network/os-model'\nimport { OsBadgeSchema } from '@xyo-network/os-model'\nimport type { WithSources } from '@xyo-network/payload-model'\n\nexport const OsBadgeQueries = {\n getBadge: async (achievement: string, diviner: DivinerInstance) => {\n const query = {\n achievement,\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [OsBadgeSchema],\n }\n\n return (await diviner.divine([query])) as WithSources<OsBadge>[]\n },\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { OsBadge, XyOsContext } from '@xyo-network/os-model'\nimport { isBadgeWithMeta } from '@xyo-network/os-model'\n\nimport type { ResourceStore } from '../../../lib/index.ts'\nimport { PayloadStore } from '../../../lib/index.ts'\nimport { OsSettingsCallerBase } from '../CallerBase.ts'\nimport { OsBadgeQueries } from './Queries.ts'\n\nexport type OsBadgeResourceViews = 'savedSeedPhrase'\n\nexport class OsBadgeResource extends OsSettingsCallerBase implements ResourceStore<OsBadgeResourceViews> {\n static readonly views: OsBadgeResourceViews[] = ['savedSeedPhrase']\n\n private _savedSeedPhrase: PayloadStore<OsBadge> | undefined\n\n constructor(xyOsContext: XyOsContext) {\n super(xyOsContext)\n }\n\n get savedSeedPhrase() {\n return assertEx(this._savedSeedPhrase, () => 'Saved seed phrase listener not set')\n }\n\n get subscriptions() {\n return { savedSeedPhrase: (cb: () => void) => this.savedSeedPhrase.subscribe(cb) }\n }\n\n get views() {\n return { savedSeedPhrase: () => this.savedSeedPhrase.latest }\n }\n\n cleanupListeners() {\n this.savedSeedPhrase.cleanupListeners()\n }\n\n /**\n * start listeners\n **/\n async start() {\n const diviner = await this.getOsSettingsPayloadDiviner()\n const archivist = await this.getOsSettingsArchivist()\n\n this._savedSeedPhrase = await PayloadStore.create<OsBadge>({\n archivist,\n getLatest: async () => await OsBadgeQueries.getBadge('savedSeedPhrase', diviner),\n idFunction: isBadgeWithMeta,\n })\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n NodeBackground, WalletSeedPhrase, XyOsContext,\n} from '@xyo-network/os-model'\n\nimport { isEqual } from '../../lib/index.ts'\nimport { buildUserWalletSeedPhrasePayload } from '../../utils/index.ts'\nimport { OsSettingsCallerBase } from './CallerBase.ts'\nimport { OsSettingsQueries } from './SettingsQueries.ts'\n\nexport class OsSettingsCaller extends OsSettingsCallerBase {\n constructor(context: XyOsContext) {\n super(context)\n }\n\n /**\n * Add a node background to the settings\n * @param {NodeBackground} payload\n */\n async addNodeBackground(payload: NodeBackground) {\n const archivist = await this.getOsSettingsArchivist()\n await archivist.insert([payload])\n }\n\n /**\n * Add a wallet seed phrase to the settings\n * @param {WalletSeedPhrase} payload\n */\n async addWalletSeedPhrase(payload: WalletSeedPhrase) {\n // NOTE: Since setting the seed phrase in OS takes precedence\n // over the BIOS when the two phrases differ, we'll set the seed\n // phrase in the OS first. That way if the latter saves fail we can\n // still recover on next boot.\n\n // Save seed phrase to OS settings\n const archivist = await this.getOsSettingsArchivist()\n await archivist.insert([payload])\n\n // Save seed phrase to BIOS\n const phrase = payload.mnemonic.mnemonic.join(' ')\n await this.context.kernel?.bios?.seedPhraseStore.set('user', phrase)\n }\n\n /**\n * Get the latest node background\n */\n async getLatestNodeBackground(): Promise<NodeBackground | null> {\n const diviner = await this.getOsSettingsPayloadDiviner()\n const [result] = (await OsSettingsQueries.getNodeBackground(diviner)) as NodeBackground[]\n return result ?? null\n }\n\n async getLatestUserWallet(): Promise<WalletSeedPhrase> {\n // Get the seed phrase from the OS settings\n const diviner = await this.getOsSettingsPayloadDiviner()\n const archivist = await this.getOsSettingsArchivist()\n const storedSeedPhrasePayload = (await OsSettingsQueries.getLatestUserWallet(diviner, archivist)).pop()\n // Get the seed phrase from the BIOS\n const biosWalletSeedPhrase = assertEx(await this.context.kernel?.bios?.seedPhraseStore.get('user'), () => 'No user seed phrase found from BIOS')\n const biosWalletSeedPhraseParts = biosWalletSeedPhrase.split(' ')\n // If there is no stored seed phrase in the OS, use the seed phrase from the BIOS\n if (!storedSeedPhrasePayload?.mnemonic?.mnemonic) {\n // Create new wallet payload from BIOS seed phrase\n const { payload: biosSeedPhrasePayload } = await buildUserWalletSeedPhrasePayload(biosWalletSeedPhrase)\n // Store the BIOS seed phrase in the OS settings\n await this.addWalletSeedPhrase(biosSeedPhrasePayload)\n // Return BIOS seed phrase payload\n return biosSeedPhrasePayload\n } else if (!isEqual(storedSeedPhrasePayload.mnemonic.mnemonic, biosWalletSeedPhraseParts)) {\n // If there is a seed phrase in the OS settings that does not match the BIOS seed phrase\n // Update bios with existing user seed phrase\n const updatedBiosSeedPhrase = storedSeedPhrasePayload.mnemonic.mnemonic.join(' ')\n await this.context.kernel?.bios?.seedPhraseStore.set('user', updatedBiosSeedPhrase)\n }\n // Return stored seed phrase\n return storedSeedPhrasePayload\n }\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { WalletSeedPhrase } from '@xyo-network/os-model'\nimport { WalletSeedPhraseSchema } from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nconst language = 'english'\nconst standard = 'bip-39'\n\n/**\n * The label for the user wallet\n */\nexport const userWalletLabel = 'userWallet'\n\n/**\n * The valid wallet labels\n */\nexport type WalletLabel = typeof userWalletLabel // TODO: More wallet types 'osWallet' | 'deviceWalletBackup' | ...\n\n/**\n * Builds a WalletSeedPhrase payload from the supplied mnemonic seed phrase and label\n * @param mnemonic The mnemonic seed phrase\n * @param $label The wallet label\n * @returns A WalletSeedPhrase payload and its root hash\n */\nexport const buildWalletSeedPhrasePayload = async (mnemonic: string, $label: WalletLabel): Promise<{\n payload: WalletSeedPhrase\n rootHash: Hash\n}> => {\n const fields = {\n mnemonic: {\n language, mnemonic: mnemonic.split(' '), standard,\n },\n $label,\n $timestamp: Date.now(),\n }\n const payload = new PayloadBuilder<WalletSeedPhrase>({ schema: WalletSeedPhraseSchema }).fields(fields).build()\n const rootHash = await PayloadBuilder.hash(payload)\n return { payload, rootHash }\n}\n\n/**\n * Builds a user WalletSeedPhrase payload from the supplied mnemonic seed phrase and label\n * @param mnemonic The mnemonic seed phrase\n * @returns A user WalletSeedPhrase payload and its root hash\n */\nexport const buildUserWalletSeedPhrasePayload = (mnemonic: string): Promise<{\n payload: WalletSeedPhrase\n rootHash: Hash\n}> => {\n return buildWalletSeedPhrasePayload(mnemonic, userWalletLabel)\n}\n","const getApiDomain = (scope: 'localhost' | 'beta' | 'prod' | undefined, apiDomain: string | undefined) => {\n if (apiDomain !== undefined) {\n return apiDomain as string\n }\n if (scope === 'localhost') {\n return 'http://localhost:8080'\n }\n if (scope === 'beta') {\n return 'https://beta.archivist.xyo.network'\n }\n return 'https://archivist.xyo.network'\n}\n\nexport { getApiDomain }\n","/**\n * Renames a key on an existing object by returning a new one with the same insertion order\n *\n * inspired by - https://stackoverflow.com/a/48110891/2803259\n */\nexport const renameObjKey = <T extends Record<string, unknown> = Record<string, unknown>>(oldObj: T, oldKey: keyof T, newKey: string) => {\n const oldObjKeys = Object.keys(oldObj) as Array<keyof T>\n // eslint-disable-next-line unicorn/no-array-reduce\n const newObj = oldObjKeys.reduce(\n (acc, val) => {\n if (val === oldKey) {\n acc[newKey] = oldObj[oldKey]\n } else {\n acc[val as string] = oldObj[val]\n }\n return acc\n },\n {} as Record<string, unknown>,\n )\n\n return newObj as T\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { NodeBackground, WalletSeedPhrase } from '@xyo-network/os-model'\nimport { NodeBackgroundSchema, WalletSeedPhraseSchema } from '@xyo-network/os-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { WithSources } from '@xyo-network/payload-model'\n\nconst NO_RESULTS: WithSources<WalletSeedPhrase>[] = []\n\nexport const OsSettingsQueries = {\n async getLatestUserWallet(diviner: DivinerInstance, archivist?: ArchivistInstance): Promise<WalletSeedPhrase[]> {\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [WalletSeedPhraseSchema],\n }\n const results = (await diviner.divine([query])) as WalletSeedPhrase[]\n const wallet = results.find(payload => payload.$label === 'userWallet')\n if (wallet) return [wallet]\n // Check for legacy payload and optionally migrate by re-minting it in the updates format.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legacyWallet = results.find(payload => (payload as any).$meta.label === 'userWallet')\n if (legacyWallet && archivist) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const legacyMeta = (legacyWallet as any).$meta\n const newWalletPayloadFields = {\n mnemonic: legacyWallet.mnemonic,\n $label: legacyMeta.label,\n $timestamp: legacyMeta.$timestamp,\n }\n const payload = new PayloadBuilder<WalletSeedPhrase>({ schema: WalletSeedPhraseSchema }).fields(newWalletPayloadFields).build()\n await archivist.insert([payload])\n return [payload]\n }\n return NO_RESULTS\n },\n async getNodeBackground(diviner: DivinerInstance) {\n const query = {\n limit: 1,\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [NodeBackgroundSchema],\n }\n return (await diviner.divine([query])) as WithSources<NodeBackground>[]\n },\n async getWallets(diviner: DivinerInstance) {\n const query = {\n order: 'desc',\n schema: PayloadDivinerQuerySchema,\n schemas: [WalletSeedPhraseSchema],\n }\n return (await diviner.divine([query])) as WithSources<WalletSeedPhrase>[]\n },\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n NodeBackground, WalletSeedPhrase, XyOsContext,\n} from '@xyo-network/os-model'\nimport { isNodeBackground, isWalletSeedPhrase } from '@xyo-network/os-model'\n\nimport type { Listener, ResourceStore } from '../../lib/index.ts'\nimport { PayloadStore } from '../../lib/index.ts'\nimport { OsSettingsCallerBase } from './CallerBase.ts'\nimport { OsSettingsQueries } from './SettingsQueries.ts'\n\nexport type OsSettingsResourceViews = 'wallets' | 'latestUserWallet' | 'nodeBackground'\n\nexport class OsSettingsResource extends OsSettingsCallerBase implements ResourceStore<OsSettingsResourceViews> {\n private _latestUserWalletListener: PayloadStore<WalletSeedPhrase> | undefined\n private _nodeBackgroundListener: PayloadStore<NodeBackground> | undefined\n private _walletsListener: PayloadStore<WalletSeedPhrase> | undefined\n\n constructor(context: XyOsContext) {\n super(context)\n }\n\n get latestUserWalletListener() {\n return assertEx(this._latestUserWalletListener, () => 'Latest user wallet listener not set')\n }\n\n get nodeBackgroundListener() {\n return assertEx(this._nodeBackgroundListener, () => 'Node background listener not set')\n }\n\n get subscriptions() {\n return {\n latestUserWallet: (cb: Listener) => this.walletsListener.subscribe(cb),\n nodeBackground: (cb: Listener) => this.nodeBackgroundListener.subscribe(cb),\n wallets: (cb: Listener) => this.walletsListener.subscribe(cb),\n }\n }\n\n get views() {\n return {\n latestUserWallet: () => this.latestUserWalletListener.latest,\n nodeBackground: () => this.nodeBackgroundListener.latest,\n wallets: () => this.walletsListener.latest,\n }\n }\n\n get walletsListener() {\n return assertEx(this._walletsListener, () => 'Wallets listener not set')\n }\n\n cleanupListeners() {\n this.walletsListener.cleanupListeners()\n this.latestUserWalletListener.cleanupListeners()\n }\n\n /**\n * start listeners\n */\n async start() {\n const archivist = await this.getOsSettingsArchivist()\n const diviner = await this.getOsSettingsPayloadDiviner()\n\n this._walletsListener = await PayloadStore.create<WalletSeedPhrase>({\n archivist,\n getLatest: async () => await OsSettingsQueries.getWallets(diviner),\n idFunction: isWalletSeedPhrase,\n })\n\n this._latestUserWalletListener = await PayloadStore.create<WalletSeedPhrase>({\n archivist,\n getLatest: async () => await OsSettingsQueries.getLatestUserWallet(diviner),\n idFunction: isWalletSeedPhrase,\n })\n\n this._nodeBackgroundListener = await PayloadStore.create<NodeBackground>({\n archivist,\n getLatest: async () => await OsSettingsQueries.getNodeBackground(diviner),\n idFunction: isNodeBackground,\n })\n }\n}\n","import type { XyOsGlobal } from '@xyo-network/os-model'\n\nimport type { MonitorEventConfig } from './types.ts'\n\n// See - https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation\nexport type Connection = {\n downlink: number\n effectiveType: string\n rtt: number\n}\n\nconst DEFAULT_MONITORING_EVENT_NAME = 'System Task Duration'\n\nglobalThis.getXyOsGlobal\n = globalThis.getXyOsGlobal\n ?? ((): XyOsGlobal => {\n return { tracking: { trackEvent: (_event: string, _properties?: Record<string, unknown>) => void {} } }\n })\n\n// TODO: Make this node compatible\nconst xyOsGlobal = globalThis.getXyOsGlobal()\n\nexport abstract class XyOsMonitor {\n static trackEvent = xyOsGlobal.tracking.trackEvent\n\n private performanceTimers = new Map<string, number>()\n\n startTimer(name: string): void {\n this.performanceTimers.set(name, performance.now())\n }\n\n stopTimer(eventConfig: MonitorEventConfig): void {\n const { additionalProperties, name } = eventConfig\n const start = this.performanceTimers.get(name)\n if (start) {\n const end = performance.now()\n const duration = end - start\n this.performanceTimers.delete(name)\n const connection = this.connection()\n XyOsMonitor.trackEvent(DEFAULT_MONITORING_EVENT_NAME, {\n downloadSpeedMbps: connection?.downlink,\n duration: duration.toString(),\n effectiveConnectionSpeed: connection?.effectiveType,\n name,\n roundTripTime: connection?.rtt,\n ...additionalProperties,\n })\n }\n }\n\n protected abstract connection(): Connection | undefined\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n RegisteredDapp, WindowDappNodeSet, XyOsContext,\n} from '@xyo-network/os-model'\n\nimport { RunningDappCache } from '../RunningDappCache.ts'\nimport { DappSeedPhraseRepository } from '../wallet/index.ts'\n\n/** Helper class to simulate full dapp initialization by the OS */\nexport interface DappInitializerConfig<T extends RegisteredDapp = RegisteredDapp> {\n allowedNames: string[]\n dapp: T\n xnsNetwork: string | undefined\n xnsNodeUrl: string | undefined\n xyOs: XyOsContext\n}\n\nexport class DappInitializer<T extends RegisteredDapp = RegisteredDapp> {\n private _config: DappInitializerConfig\n\n constructor(config: DappInitializerConfig) {\n this._config = config\n }\n\n get config() {\n return assertEx(this._config, () => new Error('Options not set'))\n }\n\n async install(): Promise<WindowDappNodeSet> {\n const dappWithWalletId = await this.installDappWallet()\n\n return await this.initializeDappContext(dappWithWalletId)\n }\n\n private async initializeDappContext(dappWithWalletId: T): Promise<WindowDappNodeSet> {\n const {\n allowedNames, xnsNetwork, xnsNodeUrl, xyOs,\n } = this.config\n\n return await RunningDappCache.findOrCreate(dappWithWalletId, xyOs, allowedNames ?? [], xnsNodeUrl, xnsNetwork)\n }\n\n private async installDappWallet(): Promise<T> {\n const { xyOs, dapp } = this.config\n const dappSeedPhraseRepository = new DappSeedPhraseRepository(xyOs, [dapp.config.name])\n const walletId = await dappSeedPhraseRepository.findOrCreate(dapp.config.name)\n\n // Update the dapp with the walletId\n return {\n ...dapp,\n config: {\n ...dapp.config,\n walletId,\n },\n } as T\n }\n}\n","import type { Address } from '@xylabs/hex'\nimport type { QuerySendStartedEventArgs } from '@xyo-network/bridge-model'\nimport type { ModuleInstance } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nconst DISPLAY_EVENT_COUNT_FREQUENCY = 100 as const\n\nexport interface ProfileEventsData {\n allEventCount: number\n eventCounts: { [key: string | number | symbol]: number }\n}\n\nexport const profileData: Record<Address, ProfileEventsData> = {}\n\nexport const profileModuleEvents = (mod: ModuleInstance) => {\n const modRef = new WeakRef(mod) // prevent memory leak\n mod.onAny(async (eventName, args) => {\n const mod = modRef.deref()\n if (mod) {\n const data = profileData[mod.address] ?? { allEventCount: 0, eventCounts: {} }\n profileData[mod.address] = data\n data.allEventCount += 1\n data.eventCounts[eventName] = (data.eventCounts[eventName] ?? 0) + 1\n if (eventName === 'querySendStarted') {\n const { query, payloads = [] } = args as QuerySendStartedEventArgs\n const pairs = await PayloadBuilder.dataHashPairs(payloads)\n const foundPair = pairs.find(([, hash]) => hash === query.query)\n if (foundPair) {\n const [payload] = foundPair\n console.log(`querySendStarted: ${payload.schema}`)\n }\n }\n if (eventName === 'querySendFinished') {\n const { query } = args as QuerySendStartedEventArgs\n console.log(`querySendFinished: ${query.query}`)\n }\n if (data.allEventCount % DISPLAY_EVENT_COUNT_FREQUENCY === 0) {\n console.log(`[PROFILE] - ${mod.id} Event Counts:`)\n console.log(data.eventCounts)\n }\n }\n })\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport type { BridgeExposeOptions } from '@xyo-network/bridge-model'\nimport { asBridgeInstance } from '@xyo-network/bridge-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { BridgedPubSubModuleName } from '@xyo-network/os-model'\n\nexport class PubSubBridgeCaller {\n private node: NodeInstance\n constructor(node: NodeInstance) {\n this.node = node\n }\n\n async exposeAddresses(addresses: Address[], options?: BridgeExposeOptions) {\n const pubSubBridge = await this.getPubSubBridge()\n for (const address of addresses) {\n console.log(`Exposing: ${address}`)\n await pubSubBridge.expose(address, options)\n }\n }\n\n async unExposeAddresses(addresses: Address[]) {\n const pubSubBridge = await this.getPubSubBridge()\n for (const address of addresses) {\n await pubSubBridge.unexpose?.(address)\n }\n }\n\n private async getPubSubBridge() {\n const mod = assertEx(await this.node.resolve(BridgedPubSubModuleName), () => `${BridgedPubSubModuleName} not found`)\n return asBridgeInstance(mod, () => `${BridgedPubSubModuleName} is not a bridge`, { required: true })\n }\n}\n"],"mappings":";AAAA,SAAS,YAAAA,kBAAgB;AACzB,SAAS,wBAAAC,6BAA4B;AAErC,SAAS,kBAAAC,uBAAsB;AAQ/B,SAAS,iCAAAC,sCAAqC;AAC9C,SAAS,kBAAAC,uBAAsB;;;ACZ/B,SAAS,gBAAgB;AACzB,SAAS,2BAA2B;AACpC,SAAS,yBAAyB;AAG3B,IAAM,2BAA2B;AACjC,IAAM,sCAAsC,GAAG,wBAAwB;AACvE,IAAM,yCAAyC;AAC/C,IAAM,oDAAoD,GAAG,sCAAsC;AACnG,IAAM,8CAA8C;AAEpD,IAAM,eAAN,MAAmB;AAAA,EACd;AAAA,EACV,YAAY,SAAsB;AAChC,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA,EAGA,MAAM,oBAAoB;AACxB,UAAM,MAAM,SAAS,MAAM,KAAK,QAAQ,KAAK,QAAQ,wBAAwB,GAAG,MAAM,GAAG,wBAAwB,YAAY;AAC7H,WAAO,oBAAoB,KAAK,MAAM,GAAG,wBAAwB,wBAAwB,EAAE,UAAU,KAAK,CAAC;AAAA,EAC7G;AAAA;AAAA,EAGA,MAAM,+BAA+B;AACnC,UAAM,MAAM;AAAA,MACV,MAAM,KAAK,QAAQ,KAAK,QAAQ,mCAAmC;AAAA,MACnE,MAAM,GAAG,mCAAmC;AAAA,IAC9C;AACA,WAAO,oBAAoB,KAAK,MAAM,GAAG,mCAAmC,wBAAwB,EAAE,UAAU,KAAK,CAAC;AAAA,EACxH;AAAA;AAAA,EAGA,MAAM,kCAAkC;AACtC,UAAM,MAAM;AAAA,MACV,MAAM,KAAK,QAAQ,KAAK,QAAQ,sCAAsC;AAAA,MACtE,MAAM,GAAG,sCAAsC;AAAA,IACjD;AACA,WAAO,kBAAkB,KAAK,MAAM,GAAG,sCAAsC,qBAAqB,EAAE,UAAU,KAAK,CAAC;AAAA,EACtH;AAAA;AAAA,EAGA,MAAM,6CAA6C;AACjD,UAAM,MAAM;AAAA,MACV,MAAM,KAAK,QAAQ,KAAK,QAAQ,iDAAiD;AAAA,MACjF,MAAM,GAAG,iDAAiD;AAAA,IAC5D;AACA,WAAO,kBAAkB,KAAK,MAAM,GAAG,iDAAiD,qBAAqB,EAAE,UAAU,KAAK,CAAC;AAAA,EACjI;AAAA;AAAA,EAGA,MAAM,uCAAuC;AAC3C,UAAM,MAAM;AAAA,MACV,MAAM,KAAK,QAAQ,KAAK,QAAQ,2CAA2C;AAAA,MAC3E,MAAM,GAAG,2CAA2C;AAAA,IACtD;AACA,WAAO,oBAAoB,KAAK,MAAM,GAAG,2CAA2C,wBAAwB,EAAE,UAAU,KAAK,CAAC;AAAA,EAChI;AACF;;;AC1DA,SAAS,YAAAC,kBAAgB;AAIzB,SAAS,SAAAC,cAAa;;;ACJtB,SAAS,6BAA6B;AACtC,SAAS,wBAAAC,6BAA4B;AAKrC,SAAS,YAAAC,iBAAgB;;;ACNzB,SAAS,iCAAiC;AAI1C,SAAS,kCAAkC;AAC3C,SAAS,gBAAgB;AACzB,SAAS,MAAM,YAAY;AAKpB,IAAM,2BAAN,cAAuC,aAA6C;AAAA,EACtE;AAAA;AAAA,EAGX,mBAAmB,oBAAI,IAAwC;AAAA;AAAA,EAE/D,qBAAqB,oBAAI,IAAoC;AAAA,EAErE,YACE,MACA,cACA;AACA,UAAM,IAAI;AACV,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAM,IAAI,QAAiC;AACzC,UAAM,YAAY,MAAM,KAAK,kBAAkB;AAC/C,UAAM,aAAa,KAAK,UAAU;AAClC,UAAM,WAAW,KAAK;AACtB,UAAM,UAAgC;AAAA,MACpC;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,UAAU,OAAO,CAAC,OAAO,CAAC;AAChC,SAAK,iBAAiB,IAAI,QAAQ,OAAO;AACzC,SAAK,mBAAmB,IAAI,UAAU,OAAO;AAC7C,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,UAAqC;AACtD,QAAI,KAAK,aAAa,SAAS,QAAQ,GAAG;AACxC,YAAM,kBAAkB,MAAM,KAAK,YAAY,QAAQ;AACvD,UAAI,gBAAiB,QAAO,gBAAgB;AAG5C,UAAI;AACF,cAAM,KAAK,IAAI,QAAQ;AACvB,cAAMC,mBAAkB,MAAM,KAAK,YAAY,QAAQ;AACvD,YAAIA,iBAAiB,QAAOA,iBAAgB;AAC5C,cAAM,IAAI,MAAM,8BAA8B,QAAQ,EAAE;AAAA,MAC1D,SAAS,GAAG;AACV,gBAAQ,MAAM,CAAC;AACf,cAAM,IAAI,MAAM,8BAA8B,QAAQ,EAAE;AAAA,MAC1D;AAAA,IACF,OAAO;AACL,YAAM,IAAI,MAAM,GAAG,QAAQ,2GAA2G;AAAA,IACxI;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,UAAoB;AAChC,YAAQ,MAAM,KAAK,cAAc,QAAQ,IAAI;AAAA,EAC/C;AAAA,EAEA,MAAc,YAAY,QAAgB;AACxC,UAAM,UAAU,MAAM,KAAK,gCAAgC;AAC3D,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS,CAAC,0BAA0B;AAAA,IACtC;AAEA,UAAM,UAAW,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAC7C,WAAO,QAAQ,SAAS,IAAI,QAAQ,CAAC,IAAI;AAAA,EAC3C;AAAA,EAEA,MAAc,cAAc,UAAoB;AAC9C,UAAM,UAAU,MAAM,KAAK,gCAAgC;AAC3D,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS,CAAC,0BAA0B;AAAA,MACpC;AAAA,IACF;AAEA,UAAM,UAAW,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAC7C,WAAO,QAAQ,SAAS,IAAI,QAAQ,CAAC,IAAI;AAAA,EAC3C;AAAA,EAEQ,YAAoB;AAC1B,WAAO,SAAS,iBAAiB;AAAA,EACnC;AACF;;;AClGA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,uBAAAC,4BAA2B;AACpC,SAAS,6BAA6B;AACtC,SAAS,wCAAwC;AAEjD,SAAS,4BAA4B;;;ACLrC,SAAS,YAAAC,iBAAgB;AACzB,SAAS,wBAAwB;AACjC,SAAS,uBAAAC,4BAA2B;AACpC,SAAS,qBAAAC,0BAAyB;AAG3B,IAAM,0BAA0B;AAChC,IAAM,4BAA4B;AAClC,IAAM,0CAA0C;AAChD,IAAM,wCAAwC;AAE9C,IAAM,iBAAN,MAAqB;AAAA,EAChB;AAAA,EACV,YAAY,SAAsB;AAChC,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAmB;AACvB,UAAM,MAAMF;AAAA,MACV,MAAM,KAAK,QAAQ,KAAK,QAAQ,uBAAuB;AAAA,MACvD,MAAM,GAAG,uBAAuB,eAAe,iBAAiB,KAAK,QAAQ,KAAK,eAAe,CAAC,CAAC;AAAA,IACrG;AACA,WAAOC,qBAAoB,KAAK,MAAM,GAAG,uBAAuB,wBAAwB,EAAE,UAAU,KAAK,CAAC;AAAA,EAC5G;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iCAAiC;AACrC,UAAM,MAAMD;AAAA,MACV,MAAM,KAAK,QAAQ,KAAK,QAAQ,qCAAqC;AAAA,MACrE,MAAM,GAAG,qCAAqC;AAAA,IAChD;AACA,WAAOE,mBAAkB,KAAK,MAAM,GAAG,qCAAqC,qBAAqB,EAAE,UAAU,KAAK,CAAC;AAAA,EACrH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBAAyB;AAC7B,UAAM,MAAMF,UAAS,MAAM,KAAK,QAAQ,KAAK,QAAQ,yBAAyB,GAAG,MAAM,GAAG,yBAAyB,YAAY;AAC/H,WAAOC,qBAAoB,KAAK,MAAM,GAAG,yBAAyB,wBAAwB,EAAE,UAAU,KAAK,CAAC;AAAA,EAC9G;AAAA;AAAA,EAGA,MAAM,uCAAuC;AAC3C,UAAM,MAAMD;AAAA,MACV,MAAM,KAAK,QAAQ,KAAK,QAAQ,uCAAuC;AAAA,MACvE,MAAM,GAAG,uCAAuC;AAAA,IAClD;AACA,WAAOE,mBAAkB,KAAK,MAAM,GAAG,uCAAuC,qBAAqB,EAAE,UAAU,KAAK,CAAC;AAAA,EACvH;AACF;;;ACvDA,SAAS,oBAAoB;AAEtB,IAAM,4BAA4B,CACvC,YACA,gBACI,EAAE,8BAA8B,aAAa,YAAY,UAAU,EAAE;;;ACL3E;AAAA,EACE,SAAW;AAAA,EACX,OAAS;AAAA,IACP;AAAA,MACE,QAAU;AAAA,QACR,aAAe;AAAA,QACf,MAAQ;AAAA,QACR,QAAU;AAAA,MACZ;AAAA,MACA,SAAW;AAAA,QACT,SAAW,CAAC;AAAA,QACZ,QAAU;AAAA,UACR;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,QAAU;AAAA,cACV,QAAU;AAAA,gBACR,2CAA2C;AAAA,cAC7C;AAAA,cACA,WAAa;AAAA,cACb,SAAW;AAAA,gBACT,MAAQ;AAAA,kBACN;AAAA,gBACF;AAAA,cACF;AAAA,cACA,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,QAAU;AAAA,cACV,QAAU;AAAA,gBACR,2CAA2C;AAAA,cAC7C;AAAA,cACA,WAAa;AAAA,cACb,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,WAAa;AAAA,cACb,WAAa;AAAA,cACb,MAAQ;AAAA,cACR,QAAU;AAAA,gBACR,2CAA2C;AAAA,cAC7C;AAAA,cACA,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,QAAU;AAAA,cACV,MAAQ;AAAA,cACR,WAAa;AAAA,cACb,QAAU;AAAA,gBACR,2CAA2C;AAAA,cAC7C;AAAA,cACA,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,WAAa;AAAA,cACb,WAAa;AAAA,cACb,MAAQ;AAAA,cACR,QAAU;AAAA,gBACR,2CAA2C;AAAA,cAC7C;AAAA,cACA,QAAU;AAAA,cACV,WAAa;AAAA,YACf;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,SAAW;AAAA,gBACT,OAAS;AAAA,kBACP;AAAA,gBACF;AAAA,cACF;AAAA,cACA,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,WAAa;AAAA,cACb,WAAa;AAAA,cACb,MAAQ;AAAA,cACR,QAAU;AAAA,gBACR,uCAAuC;AAAA,cACzC;AAAA,cACA,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,MAAQ;AAAA,cACR,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAU;AACZ;;;ACjIA,SAAS,sBAAsB;;;ACOxB,IAAM,mBAAmB,CAAC,eAAsC,WAAwC,IAAI,WAAW,GAAG,MAAM;;;ACJhI,IAAM,qBAAN,MAA8D;AAAA,EAC3D;AAAA,EACR,YACE,SACA,WACA;AACA,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,WAAW;AACf,UAAM,WAAW,IAAI,aAAa,KAAK,OAAO;AAC9C,UAAM,YAAY,MAAM,SAAS,qCAAqC;AACtE,WAAO,MAAM,UAAU,IAAI;AAAA,EAC7B;AACF;;;ACfA,SAAS,wBAAwB;AAI1B,IAAM,kBAAN,MAA2D;AAAA,EACxD;AAAA,EACR,YACE,SACA,WACA;AACA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,WAAW;AACf,UAAM,cAAc,KAAK,SAAS;AAClC,QAAI,aAAa;AACf,cAAQ,MAAM,WAAW,8BAA8B,aAAa,OAAO;AAAA,IAC7E,OAAO;AACL,cAAQ,MAAM,uBAAuB;AAAA,IACvC;AAEA,UAAM,QAAQ,QAAQ;AACtB,UAAM,aAAyB;AAAA,MAC7B,eAAe,aAAa,WAAW;AAAA,MACvC,QAAQ;AAAA,IACV;AACA,WAAO,CAAC,UAAU;AAAA,EACpB;AACF;;;AHtBO,IAAM,kBAAN,MAAsB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EAER,YACE,eACA,MACA,UACA;AACA,SAAK,gBAAgB;AACrB,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,SAAS;AACb,UAAM,cAAuC,CAAC,iBAAiB,kBAAkB;AACjF,UAAM,iBAA4B,CAAC;AACnC,eAAW,cAAc,aAAa;AACpC,YAAM,gBAAgB,iBAAiB,YAAY,KAAK,MAAM,KAAK,QAAQ;AAC3E,YAAM,WAAW,MAAM,cAAc,SAAS;AAC9C,qBAAe,KAAK,GAAG,QAAQ;AAAA,IACjC;AACA,eAAW,WAAW,gBAAgB;AACpC,YAAM,CAAC,QAAQ,IAAI,MAAM,KAAK,cAAc,IAAI,CAAC,MAAM,eAAe,SAAS,OAAO,CAAC,CAAC;AACxF,UAAI,SAAU;AACd,YAAM,KAAK,cAAc,OAAO,CAAC,OAAO,CAAC;AAAA,IAC3C;AAAA,EACF;AACF;;;AIhCA,IAAM,8BAA8B,CAAC,mBAAmB,kBAAkB,4BAA4B,6BAA6B;AAE5H,IAAM,4BAAN,MAAgC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YACE,SACA,gBACA,UACA,qBACA;AACA,SAAK,UAAU;AACf,SAAK,iBAAiB;AACtB,SAAK,WAAW;AAChB,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EAEA,MAAM,SAAS;AACb,eAAW,cAAc,KAAK,uBAAuB,CAAC,GAAG;AACvD,YAAM,KAAK,qBAAqB,UAAU;AAAA,IAC5C;AAAA,EACF;AAAA,EAEQ,sBAAsB,YAA4B;AACxD,WAAO,WAAW;AAAA,EACpB;AAAA,EAEA,MAAc,qBAAqB,oBAAoC;AACrE,UAAM,qBAAqB,KAAK,sBAAsB,kBAAkB;AAExE,QAAI,4BAA4B,SAAS,kBAAkB,GAAG;AAC5D,YAAM,MAAM,MAAM,KAAK,sBAAsB,kBAAkB;AAC/D,YAAM,KAAK,wBAAwB,GAAG;AAAA,IACxC,OAAO;AACL,cAAQ,KAAK,GAAG,KAAK,QAAQ,cAAc,kBAAkB,2BAA2B;AAAA,IAC1F;AAAA,EACF;AAAA,EAEA,MAAc,wBAAwB,KAAgC;AACpE,QAAI,KAAK;AACP,YAAM,KAAK,eAAe,WAAW,GAAG;AACxC,YAAM,KAAK,eAAe,OAAO,IAAI,SAAS,IAAI;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAc,sBAAsB,IAAqE;AACvG,WAAO,MAAM,KAAK,QAAQ,KAAK,QAAQ,EAAE;AAAA,EAC3C;AACF;;;ARrCO,IAAM,qBAAN,MAAM,oBAAmB;AAAA;AAAA,EAE9B,OAAe,0BAA0B;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YACE,0BACA,QACA,SACA,YACA,qBACA,eACA;AACA,SAAK,2BAA2B;AAChC,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,sBAAsB;AAC3B,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,aAAa,OAAO,QAAgC,YAAgC,YAAgC;AAClH,UAAM;AAAA,MACJ;AAAA,MAAQ;AAAA,MAAS;AAAA,MAAS;AAAA,IAC5B,IAAI;AACJ,UAAM;AAAA,MACJ;AAAA,MAAS;AAAA,MAAU;AAAA,MAAgB;AAAA,IACrC,IAAI;AAEJ,UAAM,EAAE,UAAU,gBAAgB,IAAI,KAAK,gCAAgC,SAAS,YAAY,UAAU;AAC1G,YAAQ,MAAM,yBAAyB,eAAe;AAGtD,UAAM,aAAa,MAAM,OAAO,WAAW,oBAAmB,uBAAuB;AACrF,UAAM,2BAAqD;AAAA,MAAC;AAAA,MAC1D;AAAA,MACA,WAAW,IAAI,qBAAqB;AAAA,MACpC;AAAA,MACA;AAAA,IAAe;AAEjB,UAAM,WAAW,IAAI,KAAK,0BAA0B,UAAU,SAAS,QAAQ,UAAU,SAAS,OAAO;AACzG,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,aAAa,mBAAmB,aAA0B,WAAwB,UAAkB;AAClG,UAAM,aAAa,IAAI,eAAe,WAAW;AACjD,UAAM,gBAAgB,MAAM,WAAW,iBAAiB;AACxD,UAAM,kBAAkB,IAAI,gBAAgB,eAAe,WAAW,QAAQ;AAE9E,UAAM,gBAAgB,OAAO;AAAA,EAC/B;AAAA;AAAA,EAGA,aAAa,mBAAmB,SAAsB;AACpD,UAAM,aAAa,MAAM,QAAQ,KAAK,QAAQ,eAAe;AAC7D,UAAM,gBAAgBC,UAASC,qBAAoB,UAAU,GAAG,MAAM,6CAA6C;AAEnH,UAAM,cAAc,MAAM;AAAA,EAC5B;AAAA,EAEA,OAAe,gCAAgC,SAAqC,YAAgC,YAAgC;AAElJ,UAAM,EAAE,UAAU,GAAG,yBAAyB,IAAI;AAClD,UAAM,qBAAiD;AAAA,MACrD,GAAG;AAAA,MACH,QAAQ;AAAA,IACV;AACA,YAAQ,IAAI,sDAAsD,YAAY,UAAU;AACxF,UAAM,kBAAkB,sBAAsB,oBAAoB,0BAA0B,YAAY,UAAU,CAAC;AACnH,WAAO,EAAE,UAAU,gBAAgB;AAAA,EACrC;AAAA,EAEA,MAAM,gBAAgB,SAA4C;AAChE,YAAQ,IAAI,oCAAoC,KAAK,MAAM;AAE3D,UAAM,OACD,MAAM,QAAQ,WAAW,KAAK,MAAM,KACjC,OAAO,YAAY;AACrB,YAAMC,QAAO,MAAM,QAAQ,UAAU,KAAK,yBAAyB,CAAC,GAAG,KAAK,MAAM;AAClF,YAAMA,MAAK,KAAK,KAAK,YAAY,KAAK,aAAa;AACnD,aAAOA;AAAA,IACT,GAAG;AACP,UAAM,KAAK,gCAAgC,KAAK,IAAI;AACpD,UAAM,oBAAmB,mBAAmB,MAAM,KAAK,SAAS,KAAK,MAAM;AAE3E,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAc,gCAAgC,gBAA8B;AAC1E,UAAM,4BAA4B,IAAI,0BAA0B,KAAK,SAAS,gBAAgB,KAAK,QAAQ,KAAK,mBAAmB;AACnI,UAAM,0BAA0B,OAAO;AAAA,EACzC;AACF;;;AF7GA,IAAM,4BAA4B,EAAE,uCAAuC,wBAAwB;AAEnG,IAAM,iBAAiB,CAAC,oBAAiF;AACvG,QAAM,UAAU,mBAAmB,IAAIC,sBAAqB;AAC5D,UAAQ,SAAS,sBAAsB,QAAQ,GAAG,yBAAyB;AAC3E,SAAO;AACT;AAEO,IAAM,oBAAoB,OAC/B,MACA,SACA,cACA,YACA,eAC+B;AAC/B,UAAQ,IAAI,aAAa;AACzB,MAAI;AACF,UAAM,2BAA2B,IAAI,yBAAyB,SAAS,YAAY;AACnF,UAAM,aAAa,MAAM,yBAAyB,QAAQ,KAAK,OAAO,QAAQ;AAC9E,QAAI,CAAC,YAAY;AACf,YAAM,IAAI,MAAM,4CAA4C,KAAK,UAAU,KAAK,QAAQ,MAAM,CAAC,CAAC,EAAE;AAAA,IACpG;AACA,UAAM,SAAS,MAAMC,UAAS,WAAW,UAAU;AACnD,UAAM,WAAW,KAAK,OAAO;AAC7B,UAAM,EAAE,QAAQ,YAAY,QAAQ,WAAW,IAAI;AAEnD,UAAM,UAAU,gBAAgB,WAAW,WAAW,IAAID,sBAAqB,GAAG,MAAM,QAAQ,eAAe,CAAC;AAEhH,UAAM,SAAiC;AAAA,MACrC,QAAQ,EAAE,UAAU,SAAS,WAAW,SAAS;AAAA,MACjD;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,qBAAqB,MAAM,mBAAmB,OAAO,QAAQ,YAAY,UAAU;AAEzF,UAAM,cAAc,MAAM,mBAAmB,gBAAgB,OAAO;AAEpE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,YAAY;AAAA,IACd;AAAA,EACF,SAAS,GAAG;AACV,UAAM,QAAQ;AACd,YAAQ,MAAM,mCAAmC,MAAM,OAAO,EAAE;AAChE,YAAQ,MAAM,mCAAmC,MAAM,KAAK,EAAE;AAC9D,UAAM,IAAI,MAAM,mCAAmC,MAAM,OAAO,EAAE;AAAA,EACpE;AACF;;;AW5DA,SAAS,YAAAE,kBAAgB;AAEzB,SAAS,YAAY;AACrB,SAAS,cAAc;AAGvB,SAAS,wBAAAC,6BAA4B;;;ACNrC,SAAS,YAAAC,iBAAgB;AAGzB,SAAS,mBAAmB;AASrB,IAAM,qBAAN,cACG,YAC2C;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,SAAoC;AAC9C,UAAM,CAAC,CAAC;AACR,SAAK,cAAc,QAAQ;AAC3B,SAAK,OAAO,QAAQ;AAAA,EACtB;AAAA,EAEA,IAAI,KAAK;AACP,WAAOA,UAAS,KAAK,KAAK,MAAM,mEAAmE;AAAA,EACrG;AAAA,EAEA,gBAAgB,IAAY;AAC1B,SAAK,MAAM;AAAA,EACb;AACF;;;AChCA,SAAS,cAAc;AACvB,SAAS,YAAAC,iBAAgB;AACzB,SAAS,cAAc;AAEvB,SAAS,uBAAAC,4BAA2B;AACpC,SAAS,iBAAiB,mCAAmC;AAQ7D;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAAC,uBAAsB;AAC/B,SAAS,aAAa;AACtB,SAAS,MAAMC,aAAY;AAWpB,IAAM,WAAN,MAA4C;AAAA;AAAA,EAEzC;AAAA;AAAA,EAGA,cAA2D,CAAC;AAAA;AAAA,EAG5D,qBAA6D,CAAC;AAAA,EAE9D,aAAa,IAAI,MAAM;AAAA,EAE/B,IAAI,YAAY;AACd,WAAOF;AAAA,MACLD,UAAS,KAAK,YAAY,MAAM,uDAAuD;AAAA,MACvF;AAAA,MACA,EAAE,UAAU,KAAK;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,cAAc,YAAyC;AAErD,UAAM,KAAKG,MAAK;AAGhB,SAAK,YAAY,EAAE,IAAI;AAGvB,eAAW,gBAAgB,EAAE;AAG7B,QAAI,oBAAoB,UAAU,GAAG;AACnC,WAAK,mBAAmB,UAAU;AAAA,IACpC,OAAO;AACL,YAAM,IAAI,MAAM,6CAA6C;AAAA,IAC/D;AACA,WAAO;AAAA,EACT;AAAA,EAEA,iBAAiB,cAAsB;AAErC,UAAM,aAAa,KAAK,YAAY,YAAY;AAChD,QAAI,CAAC,YAAY;AACf,YAAM,IAAI,MAAM,0BAA0B,YAAY;AAAA,IACxD;AAEA,QAAI,cAAc,oBAAoB,UAAU,GAAG;AACjD,WAAK,sBAAsB,UAAU;AAAA,IACvC;AAEA,WAAO,KAAK,YAAY,YAAY;AAAA,EACtC;AAAA,EAEA,MAAM,MAAM,YAAY,qBAAqB;AAC3C,WAAO,MAAM,KAAK,WAAW,aAAa,YAAY;AACpD,UAAI,KAAK,YAAY;AACnB,gBAAQ,KAAK,0BAA0B;AACvC,eAAO;AAAA,MACT;AAEA,WAAK,aAAa,MAAM,gBAAgB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,QAAQ,4BAA4B,EAAE,CAAC;AAKnH,WAAK,UAAU,GAAG,YAAY,CAAC,EAAE,SAAS,MAA4C;AAEpF,cAAM,gBAAgB,OAAO,UAAU,uBAAuB;AAE9D,YAAI,CAAC,cAAe;AAEpB,mBAAW,gBAAgB,KAAK,aAAa;AAC3C,gBAAM,aAAa,KAAK,YAAY,YAAY;AAEhD,cAAI,oBAAoB,UAAU,KAAK,WAAW,oBAAoB;AAEpE,uBAAW,CAAC,WAAW,QAAQ,KAAK,WAAW,mBAAmB,QAAQ,GAAG;AAE3E,kBAAI,cAAc,cAAc,KAAM;AAEtC,kBAAI,UAAU;AACZ,sBAAM,cAAc,YAAY,MAAM,SAAS,EAAE,SAAS,CAAC;AAC3D,uBAAO,YAAY,CAAC;AAAA,cACtB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEQ,mBAAmB,YAA+C;AAExE,eAAW,aAAa,WAAW,qBAAqB,CAAC,GAAG;AAE1D,YAAM,8BAAsD,OAAO,EAAE,SAAS,MAAM;AAElF,cAAM,QAAuB,EAAE,MAAM,WAAW,QAAQ,8BAA8B;AACtF,cAAM,gBAAgB,YAAY,CAAC;AACnC,cAAM,UAAU,MAAMD,gBAAe,WAAW,aAAa;AAE7D,YAAI;AACF,gBAAM,KAAK,UAAU,OAAO,CAAC,OAAO,GAAI,YAAY,CAAC,CAAE,CAAC;AAAA,QAC1D,SAAS,GAAG;AACV,kBAAQ,MAAM,wCAAwC,CAAC;AAAA,QACzD;AAAA,MACF;AAEA,iBAAW,GAAG,WAAW,2BAA2B;AAGpD,YAAM,aAAa,WAAW,KAAK;AACnC,WAAK,mBAAmB,UAAU,IAAI;AAAA,IACxC;AAAA,EACF;AAAA,EAEQ,sBAAsB,YAA+C;AAE3E,eAAW,CAAC,EAAE,KAAK,KAAK,WAAW,mBAAmB,QAAQ,KAAK,CAAC,GAAG;AAErE,YAAM,KAAK,WAAW,KAAK;AAC3B,YAAM,WAAW,KAAK,mBAAmB,EAAE;AAG3C,UAAI,SAAU,YAAW,IAAI,OAAO,QAAQ;AAAA,IAC9C;AAAA,EACF;AACF;;;ACjJO,IAAM,2BAAN,cACG,mBACqC;AAAA,EAC7C;AAAA,EACA;AAAA,EAEA,YAAY,SAA0C;AACpD,UAAM,OAAO;AACb,QAAI,QAAQ,SAAS,UAAU;AAC7B,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AACA,SAAK,oBAAoB,QAAQ;AACjC,SAAK,qBAAqB,QAAQ;AAAA,EACpC;AACF;;;ACvBO,IAAM,yBAAyB;AAEtC,IAAM,qCAAsE;AAAA,EAC1E,mBAAmB,CAAC,sBAAsB;AAAA,EAC1C,MAAM;AACR;AACO,IAAM,8BAA8B,MAAM,IAAI,yBAAyB,kCAAkC;;;ACNhH,IAAM,8BAA+D;AAAA,EACnE,mBAAmB,CAAC,YAAY;AAAA,EAChC,MAAM;AACR;AACO,IAAM,uBAAuB,MAAM,IAAI,yBAAyB,2BAA2B;;;ACJ3F,IAAM,yBAAyB;AAEtC,IAAM,8BAA+D;AAAA,EACnE,mBAAmB,CAAC,sBAAsB;AAAA,EAC1C,MAAM;AACR;AACO,IAAM,8BAA8B,MAAM,IAAI,yBAAyB,2BAA2B;;;ACNlG,IAAM,4BAA4B;AAEzC,IAAM,mCAAoE;AAAA,EACxE,mBAAmB,CAAC,yBAAyB;AAAA,EAC7C,MAAM;AACR;AAEO,IAAM,iCAAiC,MAAM,IAAI,yBAAyB,gCAAgC;;;ACP1G,IAAM,uBAAuB;AAEpC,IAAM,8BAA+D;AAAA,EACnE,mBAAmB,CAAC,oBAAoB;AAAA,EACxC,MAAM;AACR;AAEO,IAAM,4BAA4B,MAAM,IAAI,yBAAyB,2BAA2B;;;ACPhG,IAAM,+BAA+B;AAE5C,IAAM,sCAAuE;AAAA,EAC3E,mBAAmB,CAAC,4BAA4B;AAAA,EAChD,MAAM;AACR;AAEO,IAAM,oCAAoC,MAAM,IAAI,yBAAyB,mCAAmC;;;ACXvH,SAAS,qBAAAE,0BAAyB;AAClC,SAAS,qBAAqB;AAC9B,SAAS,gCAAgC;AAGlC,IAAM,gBAAgB,OAAO,YAA0B;AAC5D,MAAI,cAAc,aAAa,WAAW,GAAG;AAC3C,UAAM,mBAAmBA,mBAAkB,MAAM,SAAS,QAAQ,0CAA0C,CAAC;AAC7G,QAAI,kBAAkB;AACpB,YAAM,cAAc,IAAI,yBAAyB,kBAAkB,KAAK;AACxE,oBAAc,eAAe,CAAC,WAAW;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;;;ACfA,SAAS,gBAAgB;AAElB,SAAS,QAAQ,GAAY,GAAqB;AAEvD,MAAK,MAAe,EAAW,QAAO;AAEtC,MAAI,OAAO,MAAM,OAAO,EAAG,QAAO;AAElC,MAAI,SAAS,CAAC,KAAK,SAAS,CAAC,GAAG;AAC9B,UAAM,QAAQ,OAAO,KAAK,CAAC;AAC3B,UAAM,QAAQ,OAAO,KAAK,CAAC;AAE3B,QAAI,MAAM,WAAW,MAAM,QAAQ;AACjC,aAAO;AAAA,IACT;AAEA,eAAW,OAAO,OAAO;AAEvB,UAAI,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC,QAAS,EAAU,GAAG,GAAI,EAAU,GAAG,CAAC,GAAG;AACxE,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,GAAG;AACxC,QAAI,EAAE,WAAW,EAAE,QAAQ;AACzB,aAAO;AAAA,IACT;AAEA,eAAW,CAAC,GAAG,OAAO,KAAK,EAAE,QAAQ,GAAG;AACtC,UAAI,CAAC,QAAQ,SAAS,EAAE,CAAC,CAAC,GAAG;AAC3B,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;ACzCA,SAAS,uBAAuB;AAGzB,IAAMC,YAAW,CAAC,MAA+D;AACtF,SAAO,OAAO,MAAM,YAAY,CAAC,MAAM,QAAQ,CAAC;AAClD;AAEO,IAAM,eAAe,CAAC,QAAiC;AAC5D,MAAIA,UAAS,GAAG,GAAG;AACjB,WAAO,OAAO,IAAI,WAAW;AAAA,EAC/B;AACA,SAAO;AACT;AAEO,IAAM,YACT,CAAoB,WACpB,CAAC,QAA2B;AAC1B,MAAI,aAAa,GAAG,GAAG;AACrB,WAAO,OAAO,SAAS,IAAI,MAAM;AAAA,EACnC;AACA,SAAO;AACT;AAEG,IAAM,YAAY,CAAoB,WAAqB,gBAAgB,OAAO,UAAa,MAAM,CAAC;;;ACvBtG,IAAM,mBAAmB;AAEzB,IAAM,eAAe;;;ACArB,IAAM,iCAAyE;AAAA,EACpF,UAAU,EAAE,CAAC,gBAAgB,GAAG,MAAM;AAAA,EACtC,OAAO,EAAE,CAAC,gBAAgB,GAAG,MAAM;AAAA,EACnC,MAAM,EAAE,CAAC,gBAAgB,GAAG,MAAM;AACpC;AAEO,IAAM,oBAA4C;AAAA,EACvD,WAAW;AAAA,EACX,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,gCAAgC;AAAA,EAChC,8BAA8B;AAAA,EAC9B,4BAA4B;AAAA,EAC5B,6BAA6B;AAAA,EAC7B,CAAC,YAAY,GAAG;AAAA,EAChB,CAAC,gBAAgB,GAAG;AAAA,EACpB,+BAA+B;AACjC;;;ACtBO,IAAM,iBAAN,MAAM,gBAAe;AAAA,EAClB;AAAA,EACR,YAAY,OAAe;AACzB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,OAAO,OAAe;AAC3B,WAAO,MACJ,WAAW,KAAK,GAAG,EACnB,MAAM,GAAG,EACT,IAAI,UAAQ,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EACxD,KAAK,GAAG;AAAA,EACb;AAAA,EAEA,OAAO,WAAW,OAAe;AAC/B,WAAO,MAAM,WAAW,KAAK,EAAE;AAAA,EACjC;AAAA,EAEA,OAAO,KAAK,OAAe;AACzB,WAAO,MAAM,WAAW,KAAK,GAAG,EAAE,kBAAkB;AAAA,EACtD;AAAA,EAEA,SAAS;AACP,WAAO,gBAAe,OAAO,KAAK,KAAK;AAAA,EACzC;AAAA,EAEA,aAAa;AACX,WAAO,gBAAe,WAAW,KAAK,KAAK;AAAA,EAC7C;AAAA,EAEA,OAAO;AACL,WAAO,gBAAe,KAAK,KAAK,KAAK;AAAA,EACvC;AACF;;;ACpBO,IAAM,eAAN,MAAyE;AAAA,EAC9E,SAAc,CAAC;AAAA,EACP;AAAA,EACA,kBAAkF,CAAC;AAAA,EACnF,kBAAmF,CAAC;AAAA,EACpF,YAAwB,CAAC;AAAA,EAEzB,YAAY,WAA8B;AAChD,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,OAAoC;AAAA,IAC/C;AAAA,IAAW;AAAA,IAAW;AAAA,EACxB,GAA0B;AACxB,UAAM,WAAW,IAAI,KAAQ,SAAS;AAEtC,UAAM,iBAAiB,OAAO,EAAE,SAAS,MAA4C;AAEnF,UAAI,SAAS,KAAK,UAAU,GAAG;AAC7B,cAAM,SAAS,MAAM,UAAU;AAC/B,YAAI,QAAQ,QAAQ,SAAS,MAAM,EAAG;AACtC,iBAAS,SAAS;AAClB,iBAAS,WAAW;AAAA,MACtB;AAAA,IACF;AAGA,UAAM,iBAAiB,YAAY;AACjC,eAAS,SAAS,MAAM,UAAU;AAClC,eAAS,WAAW;AAAA,IACtB;AAEA,UAAM,wBAAwB,IAAI,QAAQ,cAAc;AACxD,UAAM,wBAAwB,IAAI,QAAQ,cAAc;AACxD,UAAM,oBAAoB,sBAAsB,MAAM;AACtD,UAAM,oBAAoB,sBAAsB,MAAM;AAEtD,QAAI,kBAAmB,UAAS,UAAU,GAAG,YAAY,iBAAiB;AAC1E,QAAI,kBAAmB,UAAS,UAAU,GAAG,WAAW,iBAAiB;AAEzE,aAAS,gBAAgB,KAAK,qBAAqB;AACnD,aAAS,gBAAgB,KAAK,qBAAqB;AAEnD,aAAS,SAAS,MAAM,UAAU;AAClC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB;AACjB,SAAK,gBAAgB,KAAK,iBAAiB,UAAU;AACrD,SAAK,gBAAgB,KAAK,iBAAiB,SAAS;AACpD,SAAK,kBAAkB,CAAC;AACxB,SAAK,kBAAkB,CAAC;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,cAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,eAAyB;AACjC,SAAK,UAAU,KAAK,aAAa;AACjC,WAAO,MAAM;AACX,WAAK,YAAY,KAAK,UAAU,OAAO,OAAK,MAAM,aAAa;AAAA,IACjE;AAAA,EACF;AAAA,EAEQ,aAAa;AACnB,eAAW,YAAY,KAAK,WAAW;AACrC,eAAS;AAAA,IACX;AAAA,EACF;AAAA;AAAA,EAGQ,gBAAgB,WAA2C,WAAmB;AACpF,eAAW,YAAY,WAAW;AAChC,YAAM,cAAc,SAAS,MAAM;AACnC,UAAI,YAAa,MAAK,UAAU,IAAI,WAAW,WAAW;AAAA,IAC5D;AAAA,EACF;AACF;;;ACzGA,SAAS,YAAAC,iBAAgB;AAElB,IAAM,mBAAmB,CAAC,OAAe,WAAqC;AACnF,EAAAA,UAAS,UAAU,GAAG,MAAM,uBAAuB;AACnD,QAAM,SAAS,OAAO,MAAM,KAAK,IAAI,MAAM,CAAC;AAC5C,QAAM,YAAY,QAAQ;AAC1B,QAAM,aAAa,QAAQ;AAC3B,SAAO,CAAC,YAAY,SAAS;AAC/B;AAEO,IAAM,yBAAyB,CAAC,OAA2B,WAA2B;AAC3F,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AACA,QAAM,CAAC,YAAY,SAAS,IAAI,iBAAiB,OAAO,MAAM;AAC9D,SAAO,GAAG,UAAU,IAAI,UAAU,SAAS,EAAE,SAAS,KAAK,IAAI,MAAM,GAAG,GAAG,CAAC;AAC9E;;;AChBA,SAAS,0BAA0B;AACnC,SAAS,+BAA+B;AAExC,SAAS,uBAAuB;AAChC,SAAS,wBAAAC,6BAA4B;AAQrC,IAAM,eAAe;AAErB,IAAM,0BAA0B,MAA4B;AAC1D,QAAM,UAAU,IAAIC,sBAAqB;AACzC,UAAQ,SAAS,mBAAmB,QAAQ,GAAG,EAAE,2CAA2C,SAAS,CAAC;AACtG,UAAQ,SAAS,wBAAwB,QAAQ,GAAG,EAAE,2CAA2C,SAAS,CAAC;AAC3G,SAAO;AACT;AAEO,IAAM,aAAa,OACxB,UACA,YACsC;AACtC,MAAI;AAEF,UAAM,eAAe,MAAM,SAAS,WAAW,YAAY;AAG3D,UAAM,gBAA8C,WAAW,wBAAwB;AACvF,UAAM,kBAAkB,IAAI,gBAAgB,0BAA0C,cAAc,aAAa;AAGjH,UAAM,UAAU,MAAM,gBAAgB,UAAU,GAAG,CAAC;AAEpD,WAAO,CAAC,MAAM;AAAA,EAChB,SAAS,GAAG;AACV,UAAM,QAAQ;AACd,YAAQ,MAAM,2BAA2B,MAAM,OAAO,EAAE;AACxD,YAAQ,MAAM,2BAA2B,MAAM,KAAK,EAAE;AACtD,UAAM,IAAI,MAAM,2BAA2B,MAAM,OAAO,EAAE;AAAA,EAC5D;AACF;;;AC3CA,SAAS,UAAAC,eAAc;AAEvB,SAAS,WAAW,gBAAgB;AACpC,SAAS,wBAAAC,6BAA4B;AAWrC;AAAA,EACE;AAAA,EACA,YAAAC;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACnBP,SAAS,6BAAAC,kCAAiC;AAI1C,SAAS,kBAAkB,gBAAgB;AAKpC,IAAM,mBAAN,MAAM,0BAAyB,eAAe;AAAA,EACnD,OAAO,aAAa;AAAA,EACpB,YAAY,SAAsB;AAChC,UAAM,OAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,YACL,cACA,QACA,cACA,aAAuB,SAAS,QAChC,QACY;AACZ,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,UAAU;AAAA,MAClB,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,YAAY,cAAc,SAAS;AAAA,MACnC,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,UAAU,IAAY,QAAyB,MAAgB;AACnE,UAAM,kBAAkB,MAAM,KAAK,uBAAuB;AAC1D,UAAM,YAAY,kBAAiB,YAAY,IAAI,QAAQ,IAAI;AAC/D,UAAM,gBAAgB,OAAO,CAAC,SAAS,CAAC;AAAA,EAC1C;AAAA;AAAA,EAGA,MAAM,aAAa;AACjB,UAAM,YAAY,MAAM,KAAK,uBAAuB;AACpD,WAAO,MAAM,UAAU,IAAI;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAM,eAAe;AACnB,UAAM,YAAY,MAAM,KAAK,uBAAuB;AACpD,YAAQ,MAAM,UAAU,IAAI,GAAG,GAAG,EAAE;AAAA,EACtC;AAAA;AAAA,EAGA,MAAM,wBAAwB,UAAkB;AAC9C,UAAM,UAAU,MAAM,KAAK,qCAAqC;AAChE,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQC;AAAA,MACR,cAAc;AAAA,IAChB;AAEA,WAAQ,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAAA,EACtC;AACF;;;ACzEA,SAAS,YAAAC,iBAAgB;AAEzB,SAAS,oBAAoB;AAQ7B,IAAM,aAAiB,CAAC;AAEjB,IAAM,qBAAN,cAAiC,eAAyD;AAAA,EACvF;AAAA,EACA;AAAA,EAER,YAAY,SAAsB;AAChC,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,IAAI,iBAAiB;AACnB,WAAOC,UAAS,KAAK,iBAAiB,MAAM,wBAAwB;AAAA,EACtE;AAAA,EAEA,IAAI,mBAAmB;AACrB,WAAOA,UAAS,KAAK,mBAAmB,MAAM,0BAA0B;AAAA,EAC1E;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO;AAAA,MACL,gBAAgB,CAAC,OAAiB,KAAK,eAAe,UAAU,EAAE;AAAA,MAClE,kBAAkB,CAAC,OAAiB,KAAK,iBAAiB,UAAU,EAAE;AAAA,IACxE;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,gBAAgB,MAAM,KAAK,eAAe,YAAY;AAAA,MACtD,kBAAkB,MAAM,KAAK,iBAAiB,YAAY;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,mBAAmB;AACjB,SAAK,iBAAiB,iBAAiB;AACvC,SAAK,eAAe,iBAAiB;AAAA,EACvC;AAAA,EAEA,MAAM,QAAQ;AACZ,UAAM,YAAY,MAAM,KAAK,uBAAuB;AAEpD,SAAK,kBAAkB,MAAM,aAAa,OAAmB;AAAA,MAC3D;AAAA,MACA,WAAW,YAAa,MAAM,UAAU,IAAI;AAAA,MAC5C,YAAY;AAAA,IACd,CAAC;AACD,SAAK,oBAAoB,MAAM,aAAa,OAAmB;AAAA,MAC7D;AAAA,MACA,WAAW,YAAY;AACrB,cAAM,MAAM,MAAM,UAAU,IAAI;AAChC,cAAM,SAAS,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;AAC/C,eAAO;AAAA,MACT;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACF;;;AC3DA,SAAS,kBAAAC,uBAAsB;AAE/B,OAAO,YAAY;;;ACPnB,SAAS,6BAAAC,kCAAiC;AAQ1C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAAC,uBAAsB;AAExB,IAAM,oBAAoB;AAAA,EAC/B,MAAM,cAAc,SAA0B,MAAc,SAAiB;AAC3E,UAAM,cAAc;AAAA,MAClB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,QAAQD;AAAA,MACR,SAAS,CAAC,4BAA4B;AAAA,MACtC;AAAA,IACF;AACA,WAAQ,MAAM,QAAQ,OAAO,CAAC,WAAW,CAAC;AAAA,EAC5C;AAAA,EACA,MAAM,gBAAgB,SAA0B,MAAc;AAC5D,UAAM,cAAc;AAAA,MAClB,OAAO;AAAA,MACP;AAAA,MACA,OAAO;AAAA,MACP,QAAQA;AAAA,MACR,SAAS,CAAC,gBAAgB;AAAA,IAC5B;AACA,UAAM,CAAC,UAAU,IAAK,MAAM,QAAQ,OAAO,CAAC,WAAW,CAAC;AACxD,WAAO;AAAA,EACT;AAAA,EACA,MAAM,cAAc,SAA0B,MAAc,SAAiB;AAC3E,UAAM,YAAY;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,MACP,QAAQA;AAAA,MACR,SAAS,CAAC,cAAc;AAAA,MACxB;AAAA,IACF;AACA,UAAM,CAAC,QAAQ,IAAK,MAAM,QAAQ,OAAO,CAAC,SAAS,CAAC;AACpD,WAAO;AAAA,EACT;AAAA,EACA,MAAM,iBAAiB,SAA0B,MAAc,SAA8C;AAC3G,UAAM,oBAAoB;AAAA,MACxB,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQA;AAAA,MACR,SAAS,CAAC,sBAAsB;AAAA,MAChC;AAAA,IACF;AACA,UAAM,gBAAiB,MAAM,QAAQ,OAAO,CAAC,iBAAiB,CAAC;AAE/D,UAAM,gBAAkD,CAAC;AACzD,eAAW,gBAAgB,eAAe;AACxC,YAAM,OAAO,MAAMC,gBAAe,SAAS,YAAY;AACvD,oBAAc,aAAa,QAAQ,IAAI,IAAI;AAAA,IAC7C;AAEA,WAAO,OAAO,OAAO,aAAa;AAAA,EACpC;AACF;;;AD9CO,IAAM,oBAAN,cAAgC,aAAa;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,mBAAoC,CAAC;AAAA,EAE7C,YACE,SACA,oBACA,oBACA,yBACA,SACA,iBACA;AACA,UAAM,OAAO;AACb,SAAK,qBAAqB;AAC1B,SAAK,qBAAqB;AAC1B,SAAK,0BAA0B;AAC/B,SAAK,UAAU;AACf,SAAK,kBAAkB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB,eAA8B;AAC7C,SAAK,iBAAiB,KAAK,aAAa;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAA8B;AAClC,UAAM,KAAK,eAAe;AAC1B,WAAO,MAAM,KAAK,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAc,aAAa,WAA6C;AACtE,UAAM,UAAU,OAAO,KAAK,kBAAkB;AAAA,EAChD;AAAA,EAEA,MAAc,iBAAmC;AAC/C,UAAM,YAAY,KAAK,kBAAkB,MAAM,KAAK,6BAA6B,IAAI,MAAM,KAAK,kBAAkB;AAClH,QAAI;AACF,YAAM,cAAe,MAAM,UAAU,IAAI;AACzC,UAAI,YAAY,WAAW,GAAG;AAC5B,cAAM,KAAK,aAAa,SAAS;AACjC,eAAO;AAAA,MACT;AAGA,iBAAW,qBAAqB,KAAK,oBAAoB;AACvD,YAAI;AACF,gBAAM,cAAc,OAAO,MAAM,kBAAkB,OAAO;AAC1D,cAAI,CAAC,YAAa,OAAM,IAAI,MAAM,+DAA+D;AAAA,QACnG,SAAS,GAAG;AACV,kBAAQ,MAAM,GAAG,kBAAkB,OAAO,+CAA+C,CAAC;AAC1F;AAAA,QACF;AACA,cAAM,CAAC,QAAQ,IAAI,MAAM,UAAU,IAAI,CAAC,MAAMC,gBAAe,SAAS,iBAAiB,CAAC,CAAC;AACzF,YAAI,SAAU;AACd,cAAM,UAAU,OAAO,CAAC,iBAAiB,CAAC;AAAA,MAC5C;AACA,aAAO;AAAA,IACT,SAAS,GAAG;AACV,cAAQ,MAAM,+BAA+B;AAC7C,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,aAAa;AACzB,UAAM,UAAU,KAAK,kBAAkB,MAAM,KAAK,2CAA2C,IAAI,MAAM,KAAK,gCAAgC;AAC5I,UAAM,WAAsB,CAAC;AAC7B,UAAM,iBAA+B,CAAC;AAEtC,eAAW,QAAQ,KAAK,oBAAoB;AAC1C,UAAI;AACF,cAAM,aAAa,MAAM,kBAAkB,gBAAgB,SAAS,IAAI;AACxE,YAAI,CAAC,YAAY;AACf,kBAAQ,MAAM,4BAA4B,IAAI,EAAE;AAChD;AAAA,QACF;AAEA,cAAM,WAAW,MAAM,kBAAkB,cAAc,SAAS,MAAM,WAAW,OAAO;AACxF,YAAI,CAAC,UAAU;AACb,kBAAQ,MAAM,0BAA0B,WAAW,IAAI,EAAE;AACzD,yBAAe,KAAK,UAAU;AAC9B;AAAA,QACF;AAEA,cAAM,aAAa,MAAM,kBAAkB,cAAc,SAAS,MAAM,WAAW,OAAO;AAE1F,cAAM,aAAa,KAAK,wBAAwB,WAAW,IAAI;AAC/D,YAAI,CAAC,YAAY;AACf,kBAAQ,MAAM,4BAA4B,WAAW,IAAI,8CAA8C;AACvG,yBAAe,KAAK,UAAU;AAC9B;AAAA,QACF;AAEA,cAAM,oBAAoB,MAAM,kBAAkB,iBAAiB,SAAS,MAAM,WAAW,OAAO;AAEpG,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,YACJ,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,eAAe;AAAA,UACjB;AAAA,QACF,CAAC;AAAA,MACH,QAAQ;AACN,gBAAQ,MAAM,wBAAwB,IAAI,EAAE;AAAA,MAC9C;AAAA,IACF;AAEA,QAAI,eAAe,SAAS,GAAG;AAC7B,iBAAW,MAAM,KAAK,iBAAkB,IAAG,cAAc;AAAA,IAC3D;AAEA,WAAO;AAAA,EACT;AACF;;;AEnJA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,mBAAAC,wBAAuB;AAChC,SAAS,wBAAAC,6BAA4B;AAKrC,SAAS,oCAAAC,yCAAwC;;;ACPjD;AAAA,EACE,SAAW;AAAA,EACX,OAAS;AAAA,IACP;AAAA,MACE,QAAU;AAAA,QACR,aAAe;AAAA,QACf,MAAQ;AAAA,QACR,QAAU;AAAA,MACZ;AAAA,MACA,SAAW;AAAA,QACT,SAAW,CAAC;AAAA,QACZ,QAAU;AAAA,UACR;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,WAAa;AAAA,cACb,QAAU;AAAA,gBACR,uCAAuC;AAAA,cACzC;AAAA,cACA,MAAQ;AAAA,cACR,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAU;AACZ;;;ACnCA,SAAS,YAAAC,iBAAgB;AAEzB,SAAS,eAAAC,oBAAmB;AAK5B,SAAS,wBAAAC,6BAA4B;AAQrC,SAAS,SAAAC,cAAa;AAUf,IAAM,kBAAN,cAA+EF,aAEpF;AAAA,EACU,aAAa,IAAIE,OAAM;AAAA,EACvB;AAAA,EACA;AAAA,EAEV,IAAI,OAA2C;AAC7C,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,IAAI,WAAoC;AACtC,WAAOH,UAAS,KAAK,OAAO,UAAU,MAAM,mBAAmB;AAAA,EACjE;AAAA,EAEA,IAAI,cAAwC;AAC1C,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AAAA,EAEA,IAAI,mBAA6C;AAC/C,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AAAA,EAEA,IAAI,iBAA2B;AAC7B,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,IAAI,SAA4C;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW;AACb,WAAOA,UAAS,KAAK,OAAO,UAAU,MAAM,kBAAkB;AAAA,EAChE;AAAA,EAEA,IAAI,kBAAwC;AAC1C,SAAK,mBAAmB,KAAK,oBAAoB,KAAK,OAAO,mBAAmB,IAAIE,sBAAqB;AACzG,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,eAAyC;AAC3C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,OAAqB;AACvB,WAAOF,UAAS,KAAK,OAAO,MAAM,6CAA6C;AAAA,EACjF;AAAA,EAEA,IAAI,eAAyB;AAC3B,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,IAAI,cAAc;AAChB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK,QAAQ,YAAY;AAAA,EAClC;AAAA,EAEA,IAAI,OAAe;AACjB,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAAA,EAEA,KAAK,SAAyB,UAAyD;AACrF,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAAA,EAEA,UAAU,WAAuC,SAA+C;AAC9F,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AAAA,EAEA,WAAW,SAA0D;AACnE,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AAAA,EAEA,cAAc,SAAyC;AACrD,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAAA,EAEA,SAAS,YAAsC;AAC7C,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAAA,EAEA,YAAY,SAAiB;AAC3B,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AAAA,EAEA,QAAW,KAAuB,cAGnB;AACb,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAAA,EAEA,WAAW;AACT,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAAA,EAEA,UAAU,SAA8C;AACtD,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AAAA,EAEA,SAAS,SAAiB;AACxB,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAAA,EAEA,cAAc,SAAiB;AAC7B,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AACF;;;AFlHO,IAAM,WAAN,cAAuB,gBAAkE;AAAA,EAC9F;AAAA,EAEA,YAAY,QAA+B;AACzC,UAAM,MAAM;AACZ,SAAK,OAAO,EAAE,GAAG,OAAO,KAAK;AAAA,EAC/B;AAAA,EAEA,IAAa,WAAW;AACtB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAa,cAAc;AACzB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAa,mBAAmB;AAC9B,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAa,SAAoC;AAC/C,WAAOI,UAAS,KAAK,OAAO,QAAQ,MAAM,gBAAgB;AAAA,EAC5D;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,IAAa,OAAO;AAClB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAe,KAAK,QAAwB,SAA0D;AACpG,WAAO,MAAM,KAAK,WAAW,aAAa,YAAY;AACpD,cAAQ,IAAI,uBAAuB,OAAO,SAAS,KAAK,KAAK,EAAE;AAC/D,MAAAA,UAAS,KAAK,UAAU,QAAW,MAAM,qBAAqB;AAE9D,YAAM,eACF,WAAW,KAAK,OAAO,WAAW,IAAIC,sBAAqB,GAAG,MAAM,OAAO,IAAK,KAAK,OAAO,WAAW,IAAIA,sBAAqB;AAEpI,cAAQ,IAAI,8BAA8B,YAAY;AAEtD,YAAM,mBAAmB,IAAIC,iBAAgB,EAAE,GAAG,KAAK,UAAU,QAAQC,kCAAiC,GAAG,QAAQ,YAAY;AACjI,YAAM,YAAY,MAAM,iBAAiB,UAAU;AAInD,YAAM,qBAAqB,MAAM,OAAO,WAAW,OAAO;AAC1D,mCAAmB,MAAM,CAAC,EAAE,OAAO,OAAO,KAAK,KAAK,OAAO;AAC3D,YAAM,UAAU,IAAID;AAAA,QAClB,EAAE,GAAG,8BAAoB,QAAQC,kCAAiC;AAAA,QAClE;AAAA,QACA;AAAA,MACF;AAEA,YAAM,OAAO,MAAM,QAAQ,kBAAkB,CAAC;AAC9C,iBAAW,YAAY,WAAW;AAChC,cAAM,KAAK,SAAS,QAAQ;AAC5B,cAAM,KAAK,OAAO,SAAS,SAAS,IAAI;AAAA,MAC1C;AAEA,WAAK,QAAQ;AACb,cAAQ,IAAI,wBAAwB,OAAO,SAAS,KAAK,KAAK,EAAE;AAChE,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAES,SAAS,WAAmB;AACnC,WAAO,KAAK,OAAO,SAAS,SAAS;AAAA,EACvC;AACF;;;AG7FA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,YAAAC,iBAAgB;;;ACRzB,SAAS,6BAA6B;AAE/B,IAAM,uBAAuB;AAQ7B,IAAM,mBAAmB,sBAAsC,oBAAoB;AAMnF,IAAM,wCAAwC;;;ACrBrD,SAAS,uBAAuB;AAEhC,SAAS,mBAAAC,kBAAiB,oCAAoC;AAC9D,SAAS,wBAAAC,6BAA4B;AAQrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,YAAAC,iBAAgB;;;AChBzB,SAAS,iBAAiB,gCAAgC;AAInD,IAAM,4BAAiE,EAAE,CAAC,eAAe,GAAG,yBAAyB;;;AD2BrH,IAAM,4BAAN,cAA2H,gBAIhI;AAAA,EACA,OAAgB,gBAAgB,CAAC,qCAAqC;AAAA,EAEtE,MAAyB,cAAc,UAAmF;AACxH,UAAM,eAAe,UAAU,OAAO,4BAA4B;AAClE,UAAM,YAAY,UAAU,OAAO,wBAAwB;AAC3D,UAAM,aAAa,KAAK,OAAO;AAE/B,QAAI,aAAa,SAAS,GAAG;AAC3B,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC7D;AAEA,QAAI,CAAC,gBAAgB,aAAa,WAAW,KAAK,WAAW,WAAW,GAAG;AACzE,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,sBAA8C,CAAC;AACrD,UAAM,kBAAoC,CAAC;AAE3C,eAAW,UAAU,WAAW;AAC9B,UAAI;AACF,YAAI,QAAQ;AACV,gBAAM,sBAAsB,0BAA0B,OAAO,IAAI;AACjE,cAAI,CAAC,qBAAqB;AACxB,oBAAQ,KAAK,iCAAiC,OAAO,IAAI;AACzD;AAAA,UACF;AAEA,gBAAM,qBAAqB,qCAAqC,aAAa,CAAC,CAAC;AAC/E,gBAAM,eAAe,MAAM,gBAAgB,oBAAoB,UAAU;AACzE,gBAAM,oBAAoB,MAAM,gBAAgB,oBAAoB,UAAU,UAAU;AACxF,gBAAM,QAAQ,gBAAgB,mBAAmB,YAAY;AAC7D,cAAI,OAAO;AACT,kBAAM,UAAgC;AAAA,cACpC,GAAG;AAAA,cACH,QAAQ;AAAA,cACR,WAAW,KAAK,IAAI;AAAA,YACtB;AACA,gCAAoB,KAAK,OAAO;AAAA,UAClC,OAAO;AACL,kBAAM,qBAAqC;AAAA,cACzC,UAAU;AAAA,cACV,cAAc;AAAA,cACd,QAAQ;AAAA,YACV;AACA,4BAAgB,KAAK,kBAAkB;AAAA,UACzC;AAAA,QACF;AAAA,MACF,SAAS,GAAG;AACV,wBAAgB;AAAA,UACd;AAAA,YACE,UAAU;AAAA,YAAQ,cAAe,EAAY;AAAA,YAAS,QAAQ;AAAA,UAChE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO,CAAC,GAAG,qBAAqB,GAAG,eAAe;AAAA,EACpD;AACF;AAEA,IAAM,kBAAkB,CAAC,mBAAqD,iBAAmD;AAC/H,SAAO,kBAAkB,MAAM,oBAC7B,OAAO,OAAO,cAAc,EAAE,MAAM,wBAClC,aAAa,KAAK,eAAa,OAAO,OAAO,SAAS,EAAE,SAAS,kBAAkB,CAAC,CAAC,CAAC;AAC5F;AAEA,IAAM,uCAAuC,CAAC,wBAA4E;AACxH,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,EACV;AACF;AAEA,IAAM,sBAAsB,OAAO,SAAuB;AACxD,QAAM,gBAAgB,MAAM,KAAK,MAAM,KAAK,CAAC;AAC7C,SAAO,aAAa,QAAQ;AAC9B;AAEA,IAAM,kBAAkB,OAAO,gBAAwC,eAA2B;AAChG,QAAM,YAAY,MAAM,cAAc,gBAAgB,UAAU;AAEhE,QAAM,WAA6C,CAAC;AACpD,aAAW,QAAQ,WAAW;AAC5B,UAAM,eAAe,MAAM,oBAAoB,IAAI;AACnD,QAAI,cAAc;AAChB,eAAS,KAAK,YAAY;AAAA,IAC5B;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,gBAAgB,OAAO,gBAAwC,eAA2B;AAC9F,QAAM,sBAAsB,IAAIC,iBAAgB,gBAAgB,MAAMC,UAAS,OAAO,GAAG,WAAW,WAAW,IAAIC,sBAAqB,CAAC;AACzI,SAAO,MAAM,oBAAoB,UAAU;AAC7C;;;AFvGO,IAAM,eAAN,MAAmB;AAAA,EAChB,eAAsD,oBAAI,IAAI;AAAA,EAC9D;AAAA,EAER,YAAY,0BAAoD;AAC9D,SAAK,2BAA2B;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAa,MAAyD;AAC1E,QAAI,MAAM;AACR,YAAM;AAAA,QACJ;AAAA,QAAkB;AAAA,QAAU;AAAA,QAAO;AAAA,QAAM;AAAA,QAAS;AAAA,QAAQ;AAAA,MAC5D,IAAI,KAAK,sBAAsB,IAAI;AAEnC,UAAI;AAOF,cAAM,WAAW,MAAM,KAAK,yBAAyB,aAAa,IAAI;AAEtE,cAAM,sBAAsB,MAAM,KAAK,2BAA2B,UAAU,KAAK,WAAW,MAAM;AAElG,cAAM,iBAAiC;AAAA,UACrC,WAAW;AAAA,UACX,QAAQ;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,YACR,OAAO,oBAAoB;AAAA,YAC3B;AAAA;AAAA,YAEA;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,YAAI,KAAK,aAAa,IAAI,IAAI,GAAG;AAC/B,kBAAQ,KAAK,kDAAkD,IAAI;AACnE,iBAAO;AAAA,QACT;AACA,aAAK,aAAa,IAAI,MAAM,cAAc;AAC1C,eAAO;AAAA,MACT,SAAS,GAAG;AACV,gBAAQ,MAAM,yBAAyB,CAAC;AACxC,eAAO;AAAA,MACT;AAAA,IACF,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,QAAc;AAC3B,SAAK,aAAa,OAAO,MAAM;AAAA,EACjC;AAAA,EAEQ,sBAAsB,MAAwB;AACpD,UAAM;AAAA,MACJ;AAAA,MAAQ;AAAA,MAAQ;AAAA,IAClB,IAAI;AACJ,UAAM;AAAA,MACJ;AAAA,MAAkB;AAAA,MAAU;AAAA,MAAO;AAAA,MAAM;AAAA,MAAS;AAAA,IACpD,IAAI;AAEJ,WAAO;AAAA,MACL;AAAA,MAAkB;AAAA,MAAU;AAAA,MAAO;AAAA,MAAM;AAAA,MAAQ;AAAA,MAAS;AAAA,MAAS;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,MAAc,2BAA2B,UAAsC,YAAsC,CAAC,GAAG,QAAoB;AAC3I,UAAM,qBAAqB,MAAM,0BAA0B,OAAO;AAAA,MAChE,SAAS,MAAMC,UAAS,OAAO;AAAA,MAC/B,QAAQ,EAAE,QAAQ,sCAAsC;AAAA,MACxD,YAAY;AAAA,IACd,CAAC;AACD,UAAM,WAAW,MAAM,mBAAmB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;AACzE,UAAM,kBAAkB,SAAS,OAAO,gBAAgB;AACxD,UAAM,sBAAsB,SAAS,OAAO,sBAAsB;AAElE,QAAI,gBAAgB,SAAS,GAAG;AAC9B,cAAQ,MAAM,yCAAyC,eAAe;AAAA,IACxE;AAEA,WAAO;AAAA,EACT;AACF;;;AR7FO,IAAM,0BAAN,MAA8B;AAAA;AAAA,EAEnC,aAA8C,CAAC;AAAA,EAE/C;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA,2BAAyD,oBAAI,IAAI;AAAA;AAAA,EAGjE,qBAAmD,oBAAI,IAAI;AAAA;AAAA,EAG3D,4BAA0D,oBAAI,IAAI;AAAA,EAE1D;AAAA,EAEA,8BAA8B,4BAA4B;AAAA,EAC1D;AAAA,EAEA,8BAA8B,4BAA4B;AAAA,EAE1D;AAAA,EAEA;AAAA,EAER,YACE,SACA,QACA,UAAwC,IAAIC,sBAAqB,GACjE,iBACA;AACA,SAAK,UAAU;AACf,SAAK,SAAS,UAAU;AAAA,MACtB,WAAW,CAAC;AAAA,MAAG,YAAY,CAAC;AAAA,MAAG,cAAc,CAAC;AAAA,IAChD;AACA,SAAK,UAAU;AACf,SAAK,kBAAkB;AAEvB,SAAK,oBAAoB,IAAI;AAAA,MAC3B;AAAA,MACA,KAAK,QAAQ,aAAa,CAAC;AAAA,MAC3B,KAAK,QAAQ,gBAAgB,CAAC;AAAA,MAC9B,KAAK,QAAQ,cAAc,CAAC;AAAA,MAC5B,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,SAAK,2BAA2B,IAAI,yBAAyB,SAAS,KAAK,QAAQ,aAAa,CAAC,CAAC;AAClG,SAAK,eAAe,IAAI,aAAa,KAAK,wBAAwB;AAElE,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EAEA,MAAM,UACJ,UACA,SAAS,eAAe,KAAK,SAAS,MAAM,CAAC,GAAG,OAAO,IAAI,GAC3D,OAAO,eAAe,WAAW,SAAS,MAAM,CAAC,GAAG,OAAO,IAAI,GACrC;AAC1B,UAAM,OAAO,IAAI,SAAS;AAAA,MACxB,MAAM,EAAE,IAAI,QAAQ,KAAK;AAAA,MACzB,SAAS,KAAK;AAAA,MACd;AAAA,MACA,QAAQ,KAAK;AAAA,MACb,MAAM,MAAM,KAAK,QAAQ;AAAA,IAC3B,CAAC;AACD,SAAK,WAAW,MAAM,IAAI;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,2BAA2B,QAAgB;AACzC,WAAO,KAAK,QAAQ,WAAW,MAAM;AAAA,EACvC;AAAA,EAEA,MAAM,QAA0C;AAC9C,UAAM,cAAc,MAAM,KAAK,QAAQ,QAAQ,YAAY,MAAM,KAAK,kBAAkB,QAAQ,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACnI,UAAM,cAAc,YAAY,OAAO,CAAC,EAAE,KAAK,MAAM,KAAK,KAAK,WAAW,IAAI;AAC9E,UAAM,UAAU,MAAM,QAAQ;AAAA,MAC5B,YAAY,IAAI,OAAO,YAAY;AACjC,cAAM,EAAE,KAAK,IAAI;AACjB,cAAM,iBAAiB,MAAM,KAAK,aAAa,aAAa,IAAI;AAChE,cAAM,SAAkC,EAAE,MAAM,gBAAgB,UAAU,KAAK,KAAK;AAGpF,cAAM,iBAAiB,YAAY;AACjC,cAAI;AACF,kBAAM,KAAK,yBAAyB,MAAM;AAAA,UAC5C,SAAS,GAAG;AACV,oBAAQ,MAAM,uCAAuC,CAAC;AAAA,UACxD;AAAA,QACF;AACA,QAAAC,QAAO,eAAe,CAAC;AAEvB,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AACA,UAAM,SAAS,QAAQ,OAAO,QAAQ,EAAE,IAAI,YAAU,OAAO,MAAM;AACnE,UAAM,YAAY,QAAQ,OAAO,SAAS,EAAE,IAAI,YAAU,OAAO,KAAK;AAEtE,eAAW,kBAAkB,UAAW,MAAK,mBAAmB,IAAI,cAAc;AAElF,WAAO,EAAE,QAAQ,UAAU;AAAA,EAC7B;AAAA,EAEQ,wBAAwB;AAC9B,SAAK,QAAQ,SAAS,cAAc,KAAK,2BAA2B;AACpE,SAAK,QAAQ,SAAS,cAAc,KAAK,2BAA2B;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,UAA2C;AACjD,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,MAAc,yBAAyB,gBAAyC;AAC9E,QAAI,eAAe,MAAM;AACvB,UAAI,+BAA+B,cAAc,GAAG;AAElD,aAAK,0BAA0B,IAAI,cAAc;AAEjD,cAAM,eAAe,iBAAiB;AAAA,UACpC,iBAAiB;AAAA,UACjB,gBAAgB;AAAA,UAChB,eAAe,KAAK,OAAO;AAAA,UAC3BC,UAAS;AAAA,QACX;AAEA,cAAM,KAAK,4BAA4B,KAAK,wBAAwB,EAAE,UAAU,CAAC,eAAe,KAAK,QAAQ,YAAY,EAAE,CAAC;AAAA,MAC9H;AACA,UAAI,8BAA8B,cAAc,GAAG;AAEjD,aAAK,yBAAyB,IAAI,cAAc;AAEhD,cAAM,KAAK,4BAA4B,KAAK,wBAAwB,EAAE,UAAU,eAAe,KAAK,UAAU,CAAC;AAAA,MACjH;AAAA,IACF;AAAA,EACF;AACF;;;AYlLA,SAAS,YAAAC,kBAAgB;AASzB,SAAS,YAAAC,iBAAgB;AAElB,IAAM,UAAN,MAAyC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,OAA8B,aAAoC;AAC5E,SAAK,SAAS;AACd,SAAK,eAAe;AACpB,SAAK,kBAAkB,oBAAI,IAAI;AAAA,EACjC;AAAA,EAEA,IAAY,QAA+B;AACzC,WAAOD,WAAS,KAAK,QAAQ,MAAM,uBAAuB;AAAA,EAC5D;AAAA,EAEA,IAAY,iBAAkD;AAC5D,WAAOA,WAAS,KAAK,iBAAiB,MAAM,iCAAiC;AAAA,EAC/E;AAAA,EAEA,IAAY,cAAqC;AAC/C,WAAOA,WAAS,KAAK,cAAc,MAAM,8BAA8B;AAAA,EACzE;AAAA,EAEA,UAAU,YAAwB,QAA6C;AAC7E,WAAO,KAAK,eAAe,IAAI,UAAU,GAAG,IAAI,MAAM;AAAA,EACxD;AAAA,EAEA,oBAAoB,YAAoD;AACtE,WAAO,KAAK,eAAe,IAAI,UAAU;AAAA,EAC3C;AAAA,EAEA,MAAM,aAAa;AACjB,eAAW,CAAC,gBAAgB,WAAW,KAAK,KAAK,OAAO;AACtD,iBAAW,CAAC,YAAY,UAAU,KAAK,YAAY,QAAQ,GAAG;AAC5D,cAAM,KAAK,kBAAkB,gBAAgB,YAAY,UAAU;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,kBAAkB,gBAA4B,YAAoB,MAAc;AAE5F,IAAAA,WAAS,YAAY,MAAM,gCAAgC;AAC3D,IAAAA,WAAS,MAAM,MAAM,gCAAgC;AAGrD,UAAM,SAASA,WAAS,MAAM,KAAK,YAAY,IAAI,cAAc,GAAG,MAAM,qBAAqB,cAAc,EAAE;AAE/G,QAAI,MAAM;AAER,YAAM,YAAY,KAAK,eAAe,IAAI,cAAc,KAAK,oBAAI,IAAI;AAGrE,YAAM,SAAS,MAAMC,UAAS,WAAW,MAAM;AAC/C,YAAM,gBAAgB,MAAM,OAAO,WAAW,IAAI;AAGlD,gBAAU,IAAI,YAAY,aAAa;AAGvC,WAAK,eAAe,IAAI,gBAAgB,SAAS;AAAA,IACnD;AAAA,EACF;AACF;;;ACzEA,SAAS,YAAAC,kBAAgB;AAEzB,SAAS,eAAAC,oBAAmB;AAC5B,SAAS,UAAAC,eAAc;AAGvB,SAAS,wBAAwB;AAEjC,SAAS,gCAAgC;AAUlC,IAAM,YAAN,cAAwBD,aAAqE;AAAA;AAAA,EAElG,cAAc;AAAA;AAAA,EAGN;AAAA,EAEA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA,mBAA6C,CAAC;AAAA;AAAA,EAI9C,YAKF,CAAC;AAAA,EAEP,YAAY,SAAsB,YAA+B,mBAAqC;AACpG,UAAM,CAAC,CAAC;AACR,SAAK,WAAW;AAChB,SAAK,cAAc,WAAWD,WAAS,KAAK,QAAQ,QAAQ,wBAAwB,CAAC;AACrF,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,IAAI,aAA4B;AAC9B,WAAOA,WAAS,KAAK,aAAa,MAAM,GAAG,KAAK,iBAAiB,2BAA2B;AAAA,EAC9F;AAAA,EAEA,IAAI,UAAuB;AACzB,WAAOA,WAAS,KAAK,UAAU,MAAM,GAAG,KAAK,iBAAiB,gCAAgC;AAAA,EAChG;AAAA,EAEA,IAAI,QAAgC;AAClC,WAAOA,WAAS,KAAK,QAAQ,MAAM,GAAG,KAAK,iBAAiB,6BAA6B;AAAA,EAC3F;AAAA,EAEA,IAAI,oBAAsC;AACxC,WAAOA,WAAS,KAAK,oBAAoB,MAAM,8CAA8C;AAAA,EAC/F;AAAA,EAEA,aAAa;AACX,SAAK,YAAY;AAEjB,eAAW,WAAW,KAAK,YAAY;AAErC,YAAM,sBAAsB,OAAO,EAAE,KAAK,MAA4C,MAAM,KAAK,kBAAkB,IAAI;AACvH,cAAQ,GAAG,eAAe,mBAAmB;AAC7C,WAAK,UAAU,KAAK;AAAA,QAClB;AAAA,QAAkB,WAAW;AAAA,QAAe,UAAU;AAAA,MACxD,CAAC;AAGD,YAAM,sBAAsB,OAAO,EAAE,MAAM,MAA4C;AACrF,gBAAQ,MAAM,kBAAkB,KAAK,iBAAiB,eAAe,KAAK;AAC1E,cAAM,KAAK,KAAK,eAAe,EAAE,MAAM,CAAC;AAAA,MAC1C;AACA,cAAQ,GAAG,eAAe,mBAAmB;AAC7C,WAAK,UAAU,KAAK;AAAA,QAClB;AAAA,QAAkB,WAAW;AAAA,QAAe,UAAU;AAAA,MACxD,CAAC;AAGD,YAAM,eAAe,YAAY,MAAM,QAAQ,MAAM;AACrD,MAAAE,QAAO,aAAa,CAAC;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO;AACL,eAAW;AAAA,MACT;AAAA,MAAW;AAAA,MAAU;AAAA,IACvB,KAAK,KAAK,WAAW;AAEnB,cAAQ,IAAI,WAAW,QAAQ;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,mBAAmB,MAA8B;AAE7D,UAAM,YAAY,MAAM,KAAK,aAAa;AAG1C,UAAM,iBAAiB,MAAM,UAAU,QAAQ,KAAK,SAAS,EAAE,WAAW,OAAO,CAAC;AAClF,QAAI,iBAAiB,cAAc,EAAG;AAGtC,UAAM,UAAU,WAAW,IAAI;AAC/B,UAAM,UAAU,SAAS,KAAK,SAAS,IAAI;AAAA,EAC7C;AAAA,EAEQ,cAAc;AACpB,UAAM,SAAS,YAAY;AACzB,YAAM,YAAY,MAAM,KAAK,aAAa;AAC1C,WAAK,SAAS;AAAA,IAChB;AACA,IAAAA,QAAO,OAAO,CAAC;AAAA,EACjB;AAAA,EAEA,MAAc,eAAe;AAC3B,UAAM,MAAMF,WAAS,MAAM,KAAK,QAAQ,KAAK,QAAQ,KAAK,iBAAiB,GAAG,MAAM,GAAG,KAAK,iBAAiB,YAAY;AACzH,WAAO,yBAAyB,KAAK,MAAM,GAAG,KAAK,iBAAiB,uBAAuB,EAAE,UAAU,KAAK,CAAC;AAAA,EAC/G;AAAA,EAEA,MAAc,kBAAkB,MAA8B;AAC5D,QAAI;AAEF,YAAM,KAAK,KAAK,eAAe,EAAE,KAAK,CAAC;AAEvC,YAAM,KAAK,mBAAmB,IAAI;AAElC,YAAM,KAAK,0BAA0B,IAAI;AAAA,IAC3C,SAAS,OAAO;AACd,cAAQ,MAAM,kBAAkB,KAAK,iBAAiB,eAAe,KAAK,IAAI,KAAK;AACnF,YAAM,KAAK,KAAK,cAAc,EAAE,MAAsB,CAAC;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAc,0BAA0B,MAA8B;AAEpE,SAAK,iBAAiB,KAAK,IAAI;AAG/B,SAAK,cAAc,KAAK,WAAW,MAAM,OAAK,EAAE,WAAW;AAG3D,QAAI,KAAK,aAAa;AACpB,YAAM,KAAK,KAAK,eAAe,EAAE,OAAO,MAAM,KAAK,aAAa,EAAE,CAAC;AAAA,IACrE;AAAA,EACF;AACF;;;ACtJO,IAAM,eAAN,MAAmB;AAAA,EAChB,uBAAsD,oBAAI,IAAI;AAAA,EAC9D;AAAA,EAER,YAAY,UAAiC;AAC3C,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,OAAO,KAAK,KAAK,oBAAoB;AAAA,EAC9C;AAAA,EAEA,IAAY,oBAAoB;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAA6B,KAAa;AACxC,WAAO,KAAK,qBAAqB,IAAI,GAAG;AAAA,EAC1C;AAAA,EAEA,WAAW,SAAsB;AAC/B,eAAW,CAAC,KAAK,QAAQ,KAAK,OAAO,QAAQ,KAAK,QAAQ,GAAG;AAC3D,cAAQ,IAAI,oBAAoB,GAAG;AACnC,YAAM,EAAE,OAAO,OAAO,UAAU,kBAAkB,IAAI;AACtD,YAAM,mBAAmB,IAAI,MAAM,SAAS,iBAAiB;AAC7D,uBAAiB,WAAW;AAC5B,WAAK,kBAAkB,IAAI,KAAK,gBAAgB;AAAA,IAClD;AAAA,EACF;AAAA,EAEA,OAAO;AACL,eAAW,SAAS,KAAK,kBAAkB,OAAO,GAAG;AACnD,YAAM,KAAK;AAAA,IACb;AAAA,EACF;AACF;;;AChDA,SAAS,0BAA0B,gCAAgC;;;ACFnE,SAAS,YAAAG,kBAAgB;AAEzB,SAAS,eAAAC,oBAAmB;AAC5B,SAAS,UAAAC,eAAc;AAEvB,SAAS,uBAAAC,4BAA2B;AAEpC,SAAS,4BAAAC,iCAAgC;AAGzC,SAAS,MAAMC,aAAY;AAQpB,IAAM,kBAAN,cAA8BJ,aAAsE;AAAA,EACzG,cAAc;AAAA,EAEN,MAAc;AAAA,EACd;AAAA,EACA;AAAA,EAER,YACE,QACA,YACA;AACA,UAAM,CAAC,CAAC;AACR,SAAK,MAAMI,MAAK;AAChB,SAAK,SAAS;AACd,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,KAAK;AACP,WAAOL,WAAS,KAAK,KAAK,MAAM,oCAAoC;AAAA,EACtE;AAAA,EAEA,MAAM,QAAQ;AACZ,QAAI;AAEF,YAAM,+BAA+B,CAAC,EAAE,SAAS,MAA4C;AAC3F,cAAM,sBAAsB,KAAK,wBAAwB,QAAQ;AAGjE,mBAAW,WAAW,qBAAqB;AAEzC,cAAI,QAAQ,SAAS,KAAK,YAAY;AACpC,iBAAK,wBAAwB;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAEA,YAAM,kBAAkB,MAAM,KAAK,mBAAmB;AAGtD,YAAM,wBAAwB,IAAI,QAAQ,4BAA4B;AACtE,YAAM,oBAAoB,sBAAsB,MAAM;AAGtD,UAAI,kBAAmB,iBAAgB,GAAG,YAAY,iBAAiB;AAGvE,YAAM,OAAO,KAAK,wBAAwB;AAC1C,UAAI,KAAM,QAAO;AAGjB,WAAK,cAAc;AAAA,IACrB,SAAS,OAAO;AAEd,YAAM,KAAK,KAAK,eAAe,EAAE,MAAsB,CAAC;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,wBAAwB,UAAqB;AACnD,WAAO,SAAS,OAAO,CAAC,YAAY;AAClC,YAAM,gBAAgB;AACtB,aAAO,cAAc,UAAU,iBAAiB,cAAc,WAAW;AAAA,IAC3E,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,qBAAqB;AACjC,UAAM,MAAMA,WAAS,OAAO,MAAM,KAAK,OAAO,QAAQ,GAAG,QAAQ,yBAAyB,GAAG,MAAM,mCAAmC;AACtI,WAAOG,qBAAoB,KAAK,MAAM,GAAG,IAAI,EAAE,wBAAwB,EAAE,UAAU,KAAK,CAAC;AAAA,EAC3F;AAAA,EAEQ,0BAA0B;AAChC,UAAM,MAAM,KAAK,OAAO,YAAY,KAAK,UAAU;AACnD,QAAI,KAAK;AAEP,YAAM,OAAOC,0BAAyB,KAAK,MAAM,GAAG,IAAI,EAAE,kBAAkB,EAAE,UAAU,KAAK,CAAC;AAG9F,WAAK,cAAc;AAGnB,YAAM,OAAO,YAAY,MAAM,KAAK,KAAK,eAAe,EAAE,KAAK,CAAC;AAChE,MAAAF,QAAO,KAAK,CAAC;AAEb,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AC9FO,IAAM,iBAAN,cAA6B,gBAA8C;AAAA,EAChF;AAAA,EAEA,YAAY,QAAwB,YAAoB;AACtD,UAAM,QAAQ,UAAU;AACxB,SAAK,GAAG,eAAe,CAAC,EAAE,KAAK,MAAM;AACnC,WAAK,cAAc;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,aAAa;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO,CAAC,CAAC,KAAK;AAAA,EAChB;AAAA,EAEA,mBAAmB;AACjB,SAAK,cAAc;AAAA,EACrB;AACF;;;ACtBO,IAAM,kBAAN,cAA8B,gBAAgB;AAAA,EAC3C,YAAgD;AAAA,EAExD,YAAY,QAAwB,YAAoB;AACtD,UAAM,QAAQ,UAAU;AACxB,SAAK,GAAG,eAAe,CAAC,EAAE,KAAK,MAAM;AACnC,WAAK,YAAY;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,cAAc;AAChB,WAAO,CAAC,CAAC,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,iBAAiB;AACf,SAAK,YAAY;AAAA,EACnB;AACF;;;AHvBO,IAAM,gCAAmD,CAAC,WAA2B;AAAA,EAC1F,IAAI,eAAe,QAAQ,wBAAwB;AAAA,EACnD,IAAI,eAAe,QAAQ,wBAAwB;AACrD;;;AIPA,SAAS,0BAA0B;AAI5B,IAAM,qBAAwC,CAAC,WAA2B,CAAC,IAAI,gBAAgB,QAAQ,kBAAkB,CAAC;;;ACJjI,SAAS,yBAAyB;AAI3B,IAAM,6BAAgD,CAAC,WAA2B;AAAA,EACvF,IAAI,eAAe,QAAQ,iBAAiB;AAC9C;;;ACRA,SAAS,YAAAI,kBAAgB;AAEzB,SAAS,4BAAAC,2BAA0B,sBAAsB;AAEzD,SAAS,4BAAAC,2BAA0B,4BAAAC,iCAAgC;AAO5D,IAAM,uBAAN,cAAmC,UAAU;AAAA,EACxC;AAAA,EACA;AAAA,EAEF,gBAA0C,+BAA+B;AAAA,EAEjF,YAAY,SAAsB,UAA6B;AAC7D,UAAM,SAAS,UAAU,0BAA0B;AAAA,EACrD;AAAA,EAEA,IAAI,cAAc;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,mBAAmB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EAES,aAAa;AACpB,UAAM,WAAW;AAEjB,SAAK,QAAQ,SAAS,cAAc,KAAK,aAAa;AACtD,SAAK,GAAG,eAAe,MAAM,KAAK,cAAc,KAAK,2BAA2B,CAAC,CAAC,CAAC;AAGnF,UAAM,GAAG,eAAe,OAAO,EAAE,KAAK,MAAM;AAC1C,UAAI,KAAK,OAAOC,2BAA0B;AACxC,cAAM,aAAaC,WAAS,MAAM,KAAK,QAAQ,cAAc,GAAG,MAAM,sBAAsB;AAC5F,cAAM,UAAU,eAAe,MAAM,WAAW,QAAQ,KAAK,CAAC;AAE9D,YAAI,SAAS;AACX,gBAAM,iBAAiB,MAAM,cAAc,OAAO;AAClD,kBAAQ,IAAI,QAAQ,cAAc,EAAE;AAAA,QACtC,OAAO;AACL,kBAAQ,IAAI,iCAAiC;AAAA,QAC/C;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,GAAG,eAAe,OAAO,EAAE,KAAK,MAAM;AAC1C,UAAI,KAAK,OAAOC,2BAA0B;AACxC,aAAK,oBAAoB;AACzB,cAAM,MAAMD,WAAS,MAAM,KAAK,QAAQ,aAAa,GAAG,MAAM,uBAAuB;AACrF,cAAM,cAAcE,0BAAyB,KAAK,MAAM,2BAA2B;AACnF,aAAK,eAAe;AAAA,MACtB;AAAA,IACF,CAAC;AACD,UAAM,GAAG,eAAe,WAAS,QAAQ,MAAM,+CAA+C,KAAK,CAAC;AAAA,EACtG;AAAA,EAES,OAAO;AACd,UAAM,KAAK;AACX,SAAK,eAAe;AACpB,SAAK,oBAAoB;AAEzB,QAAI,KAAK,cAAc;AACrB,WAAK,QAAQ,SAAS,iBAAiB,KAAK,cAAc,EAAE;AAAA,EAChE;AACF;;;AC/DO,IAAM,kBAAN,cAA8B,UAAU;AAAA,EACrC,gBAA0C,0BAA0B;AAAA,EAE5E,YAAY,SAAsB,UAA6B;AAC7D,UAAM,SAAS,UAAU,qBAAqB;AAAA,EAChD;AAAA,EAES,aAAa;AACpB,UAAM,WAAW;AAEjB,SAAK,QAAQ,SAAS,cAAc,KAAK,aAAa;AACtD,SAAK,GAAG,eAAe,MAAM,KAAK,cAAc,KAAK,sBAAsB,CAAC,CAAC,CAAC;AAAA,EAChF;AAAA,EAES,OAAO;AACd,UAAM,KAAK;AAAA,EACb;AACF;;;ACtBA,SAAS,qBAAAC,0BAAyB;AAM3B,IAAM,wBAAN,cAAoC,UAAU;AAAA,EAC3C,gBAA0C,kCAAkC;AAAA,EAEpF,YAAY,SAAsB,UAA6B;AAC7D,UAAM,SAAS,UAAU,6BAA6B;AAAA,EACxD;AAAA,EAES,aAAa;AACpB,UAAM,WAAW;AAEjB,SAAK,QAAQ,SAAS,cAAc,KAAK,aAAa;AACtD,SAAK,GAAG,eAAe,MAAM,KAAK,cAAc,KAAK,8BAA8B,CAAC,CAAC,CAAC;AAEtF,SAAK,GAAG,eAAe,CAAC,EAAE,KAAK,MAAM;AACnC,UAAI,KAAK,OAAOC,oBAAmB;AACjC,gBAAQ,IAAI,qBAAqB;AAAA,MACnC;AAAA,IACF,CAAC;AACD,SAAK,GAAG,eAAe,WAAS,QAAQ,MAAM,wBAAwB,KAAK,CAAC;AAAA,EAC9E;AAAA,EAES,OAAO;AACd,UAAM,KAAK;AAAA,EACb;AACF;;;ACvBO,IAAM,aAAoC;AAAA,EAC/C,sBAAsB;AAAA,IACpB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,uBAAuB;AAAA,IACrB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,iBAAiB;AAAA,IACf,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;;;A3CmBO,IAAM,OAAN,MAAM,cAAa,gBAAmD;AAAA,EACjE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACF;AAAA,EAER,YAAY;AAAA,IACV,SAAS;AAAA,IACT,WAAW,IAAI,SAAS;AAAA,IACxB,SAAS,IAAI,OAAO,EAAE,OAAO,CAAC;AAAA,IAC9B,UAAU,IAAIC,sBAAqB;AAAA,IACnC;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,GAAG;AAAA,EACL,IAAgB,CAAC,GAAG;AAClB,UAAM;AAAA,MACJ;AAAA,MAAU;AAAA,MAAQ;AAAA,MAAS,GAAG;AAAA,IAChC,CAAC;AACD,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,eAAe,IAAI,aAAa,QAAQ;AAC7C,SAAK,0BAA0B,IAAI,wBAAwB,MAAM,oBAAoB,KAAK,SAAS,eAAe;AAClH,QAAI,KAAK,eAAe,KAAK,QAAQ,MAAM,gBAAiB,MAAK,UAAU,IAAI,QAAQ,KAAK,aAAa,KAAK,QAAQ,MAAM,eAAe;AAAA,EAC7I;AAAA,EAEA,WAAW,aAAsC;AAC/C;AAAA,EACF;AAAA,EAEA,WAAW,aAAyB;AAClC,WAAO,cAAc;AAAA,EACvB;AAAA,EAEA,IAAa,OAA2C;AACtD,WAAOC,WAAS,KAAK,OAAO,QAAQ,MAAM,MAAM,cAAc;AAAA,EAChE;AAAA,EAEA,IAAa,cAAc;AACzB,WAAO,KAAK,aAAa,SAA+B,sBAAsB,GAAG;AAAA,EACnF;AAAA,EAEA,IAAa,mBAAmB;AAC9B,WAAO,KAAK,aAAa,SAA+B,sBAAsB,GAAG;AAAA,EACnF;AAAA,EAEA,IAAa,SAA4C;AACvD,WAAOA,WAAS,KAAK,OAAO,QAAQ,MAAM,gBAAgB;AAAA,EAC5D;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,IAAa,OAAO;AAClB,WAAO,EAAE,SAAS,KAAK,SAAS,oBAAoB,MAAM,EAAE;AAAA,EAC9D;AAAA,EAEA,aAAa,QAAW,IAAsB,aAA6C;AACzF,UAAM,EAAE,MAAM,qBAAqB,IAAI;AACvC,UAAM,UAAU,KAAK;AACrB,aAAS,WAAW,IAAI;AACxB,UAAM,SAAS,MAAM,GAAG;AACxB,aAAS,UAAU,EAAE,sBAAsB,KAAK,CAAC;AAEjD,WAAO;AAAA,EACT;AAAA,EAEA,MAAe,KAAK,QAAwB,UAAwC,IAAID,sBAAqB,GAAG;AAC9G,YAAQ,KAAK,aAAa,OAAO,OAAO;AACxC,UAAM,cAAc,KAAK,SAAS,MAAM,OAAO;AAC/C,WAAO,MAAM,KAAK,WAAW,aAAa,YAAY;AACpD,YAAM,KAAK,SAAS,MAAM;AAC1B,UAAI,KAAK,QAAQ,WAAW,WAAW;AACrC,cAAM,KAAK,OAAO,KAAK,MAAM,KAAK,GAAG,EAAE,SAAS,aAAa,eAAe,CAAC,EAAE,CAAC;AAAA,MAClF;AACA,UAAI,KAAK,QAAQ,WAAW,UAAU;AACpC,cAAM,IAAI,MAAM,mBAAmB;AAAA,MACrC;AACA,MAAAC,WAAS,KAAK,UAAU,QAAW,MAAM,qBAAqB;AAC9D,YAAM,CAAC,IAAI,IAAI,MAAM,MAAK,QAAQ,YAAY,MAAM,WAAW,QAAQ,WAAW,GAAG,EAAE,MAAM,YAAY,CAAC;AAC1G,WAAK,QAAQ;AAEb,WAAK,aAAa,WAAW,IAAI;AACjC,UAAI,KAAK,QAAS,OAAM,KAAK,QAAQ,WAAW;AAChD,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAES,UACP,UACA,SAAS,eAAe,KAAK,SAAS,MAAM,CAAC,GAAG,OAAO,IAAI,GAC3D,OAAO,eAAe,WAAW,SAAS,MAAM,CAAC,GAAG,OAAO,IAAI,GAClC;AAC7B,WAAO,KAAK,wBAAwB,UAAU,UAAU,QAAQ,IAAI;AAAA,EACtE;AAAA,EAES,WAAW,QAAyD;AAC3E,WAAO,KAAK,wBAAwB,WAAW,MAAM;AAAA,EACvD;AAAA,EAES,cAAc,QAA4B;AACjD,WAAO,KAAK,wBAAwB,2BAA2B,MAAM;AAAA,EACvE;AAAA,EAES,SAAS,WAAqC;AACrD,WAAOA,WAAS,KAAK,aAAa,SAAS,SAAS,GAAG,MAAM,oBAAoB,SAAS,EAAE;AAAA,EAC9F;AAAA,EAEA,MAAe,QAAW,IAAsB,aAA6C;AAC3F,WAAO,MAAM,MAAK,QAAW,IAAI,WAAW;AAAA,EAC9C;AAAA,EAES,WAAW;AAClB,IAAAA,WAAS,KAAK,UAAU,QAAW,MAAM,iBAAiB;AAC1D,SAAK,QAAQ;AACb,SAAK,aAAa,KAAK;AAAA,EACzB;AACF;;;AZ5JA,IAAM,oBAAoB,IAAIC,OAAM;AAK7B,IAAM,mBAAN,MAAM,kBAAiB;AAAA,EAC5B,OAAe,SAA+C,CAAC;AAAA,EAE/D,aAAa,aACX,MACA,MACA,cACA,YACA,YAC4B;AAC5B,UAAM,SAAS,KAAK,OAAO;AAE3B,WAAO,MAAM,KAAK;AAAA,MAChB,YACE,MAAM,kBAAkB,aAAa,YAAY;AAC/C,cAAM,wBAAwB,kBAAiB,IAAI,MAAM;AACzD,YAAI,uBAAuB;AACzB,kBAAQ,MAAM,WAAW,6CAA6C,MAAM,EAAE;AAC9E,gBAAM,sBAAsBC,WAAS,sBAAsB,SAAS,MAAM,wCAAwC;AAClH,gBAAM,mBAAmB,mBAAmB,qBAAqB,MAAM,MAAM;AAC7E,iBAAO;AAAA,QACT;AACA,gBAAQ,MAAM,WAAW,6BAA6B,MAAM;AAC5D,cAAM,gBAAgB,MAAM,kBAAkB,MAAM,MAAM,cAAc,YAAY,UAAU;AAC9F,0BAAiB,IAAI,QAAQ,aAAa;AAE1C,eAAO;AAAA,MACT,CAAC;AAAA,MACH,EAAE,sBAAsB,EAAE,OAAO,GAAG,MAAM,eAAe;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,OAAO,IAAI,KAA4C;AACrD,WAAO,KAAK,OAAO,GAAG;AAAA,EACxB;AAAA,EAEA,OAAO,IAAI,KAAc;AACvB,WAAO,MAAM,CAAC,CAAC,KAAK,OAAO,GAAG,IAAI;AAAA,EACpC;AAAA,EAEA,OAAO,IAAI,KAAa,OAA0B;AAChD,SAAK,OAAO,GAAG,IAAI;AAAA,EACrB;AACF;;;AwDnDO,IAAM,yBAAN,MAA6B;AAAA,EAClC,OAAe,SAA0C,CAAC;AAAA,EAE1D,OAAO,IAAI,KAAa;AACtB,WAAO,KAAK,OAAO,GAAG;AAAA,EACxB;AAAA,EAEA,OAAO,IAAI,KAAc;AACvB,WAAO,MAAM,CAAC,CAAC,KAAK,OAAO,GAAG,IAAI;AAAA,EACpC;AAAA,EAEA,OAAO,IAAI,KAAa,OAAqB;AAC3C,SAAK,OAAO,GAAG,IAAI;AAAA,EACrB;AACF;;;A1DKO,IAAM,mBAAN,cAA+B,aAAgD;AAAA,EAC5E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YACE,SACA,iBACA,cACA,YACA,YACA,kBAAkB,IAAIC,sBAAqB,GAC3C;AACA,UAAM,OAAO;AACb,SAAK,kBAAkB;AACvB,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,MAAM,QAAQ;AACZ,UAAM,+BAA+B,KAAK,gBAAgB,OAAOC,8BAA6B;AAC9F,eAAW,qBAAqB,8BAA8B;AAC5D,YAAM,UAAU,MAAM,KAAK,sBAAsB,mBAAmB,KAAK,YAAY;AAErF,iBAAW,gBAAgB,kBAAkB,KAAK,WAAW;AAC3D,cAAM,KAAK,gBAAgB,cAAc,OAAO;AAChD,cAAM,KAAK,6BAA6B,YAAY;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,sBAAsB,mBAAsC,cAAwB;AAChG,UAAM,EAAE,QAAQ,IAAI,MAAM,iBAAiB,aAAa,kBAAkB,MAAM,KAAK,SAAS,cAAc,KAAK,YAAY,KAAK,UAAU;AAC5I,QAAI,CAAC,QAAS,OAAM,IAAI,MAAM,wBAAwB;AACtD,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,gBAAgB,cAAoC,SAAsB;AACtF,UAAM,eAAe,aAAa;AAClC,UAAM,mBAAmBC,WAAS,MAAM,QAAQ,KAAK,QAAQ,YAAY,GAAG,MAAM,8BAA8B;AAChH,UAAM,aAAaC,gBAAe,kBAAkB,MAAM,4CAA4C,EAAE,UAAU,KAAK,CAAC;AAExH,2BAAuB,IAAI,aAAa,mBAAmB,UAAU;AAAA,EACvE;AAAA,EAEA,MAAc,6BAA6B,sBAA4C;AACrF,UAAM,YAAY,MAAM,KAAK,qCAAqC;AAElE,UAAM,OAAO,MAAMC,gBAAe,SAAS,oBAAoB;AAC/D,UAAM,CAAC,QAAQ,IAAI,MAAM,UAAU,IAAI,CAAC,IAAI,CAAC;AAC7C,QAAI,SAAU;AAEd,UAAM,UAAU,OAAO,CAAC,oBAAoB,CAAC;AAC7C,YAAQ,MAAM,aAAa,cAAc,qBAAqB,iBAAiB,SAAS,qBAAqB,IAAI,YAAY;AAAA,EAC/H;AACF;;;A2DpFA,SAAS,YAAAC,kBAAgB;AACzB,SAAS,uBAAAC,4BAA2B;AAQ7B,IAAM,oBAAN,MAAwB;AAAA,EACnB;AAAA,EACF;AAAA,EACA;AAAA,EAER,YACE,aACA,eACA,sBACA;AACA,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,uBAAuB;AAAA,EAC9B;AAAA,EAEA,IAAI,6BAA6B;AAC/B,WAAOC,WAAS,uBAAuB,IAAI,KAAK,qBAAqB,iBAAiB,GAAG,MAAM,sBAAsB;AAAA,EACvH;AAAA;AAAA,EAGA,MAAM,UAAU;AACd,UAAM,YAAY,MAAM,KAAK,yBAAyB;AACtD,UAAM,UAAU,MAAM;AACtB,UAAM,KAAK,IAAI;AACf,YAAQ,IAAI,WAAW;AAAA,EACzB;AAAA;AAAA,EAGA,MAAM,MAAM;AACV,UAAM,WAAW,MAAM,KAAK,0BAA0B;AACtD,UAAM,KAAK,8CAA8C,QAAQ;AACjE,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,2BAA2B;AACvC,UAAM,gBAAgB,KAAK,eAAe,wBAAwB;AAClE,UAAM,MAAMA,WAAS,MAAM,KAAK,YAAY,KAAK,QAAQ,aAAa,GAAG,MAAM,+BAA+B,aAAa,EAAE;AAC7H,WAAOC,qBAAoB,KAAK,MAAM,aAAa,aAAa,wBAAwB,EAAE,UAAU,KAAK,CAAC;AAAA,EAC5G;AAAA,EAEA,MAAc,4BAA4B;AACxC,UAAM,0BAA0B,MAAM,KAAK,+BAA+B;AAC1E,WAAO,MAAM,wBAAwB,IAAI;AAAA,EAC3C;AAAA,EAEA,MAAc,8CAA8C,UAAqB;AAC/E,UAAM,YAAY,MAAM,KAAK,yBAAyB;AACtD,UAAM,UAAU,MAAM;AACtB,UAAM,UAAU,OAAO,QAAQ;AAAA,EACjC;AAAA,EAEA,MAAc,iCAAiC;AAC7C,UAAM,YAAYD;AAAA,MAChB,MAAM,KAAK,2BAA2B,QAAQ,oBAAoB;AAAA,MAClE,MAAM;AAAA,IACR;AACA,WAAOC,qBAAoB,WAAW,MAAM,0CAA0C,EAAE,UAAU,KAAK,CAAC;AAAA,EAC1G;AACF;;;ACnEA,SAAS,YAAAC,kBAAgB;AACzB,SAAS,uBAAAC,4BAA2B;AACpC,SAAS,qBAAAC,0BAAyB;AAG3B,IAAM,uCAAuC;AAC7C,IAAM,yBAAyB;AAC/B,IAAM,sCAAsC;AAE5C,IAAe,oBAAf,MAAiC;AAAA,EAC5B;AAAA,EACV,YAAY,SAAsB;AAChC,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,YAAqB;AACzC,UAAM,qBAAqB,aAAa,GAAG,UAAU,IAAI,sBAAsB,KAAK;AACpF,UAAM,MAAMF,WAAS,MAAM,KAAK,QAAQ,KAAK,QAAQ,kBAAkB,GAAG,MAAM,GAAG,kBAAkB,YAAY;AACjH,WAAOC,qBAAoB,KAAK,MAAM,GAAG,kBAAkB,wBAAwB,EAAE,UAAU,KAAK,CAAC;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,8BAA8B,YAAqB;AACvD,UAAM,qBAAqB,aAAa,GAAG,UAAU,IAAI,oCAAoC,KAAK;AAClG,UAAM,MAAMD,WAAS,MAAM,KAAK,QAAQ,KAAK,QAAQ,kBAAkB,GAAG,MAAM,GAAG,kBAAkB,YAAY;AACjH,WAAOE,mBAAkB,KAAK,MAAM,GAAG,kBAAkB,sBAAsB,EAAE,UAAU,KAAK,CAAC;AAAA,EACnG;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,6BAA6B,YAAqB;AACtD,UAAM,qBAAqB,aAAa,GAAG,UAAU,IAAI,mCAAmC,KAAK;AACjG,UAAM,MAAMF,WAAS,MAAM,KAAK,QAAQ,KAAK,QAAQ,kBAAkB,GAAG,MAAM,GAAG,kBAAkB,YAAY;AACjH,WAAOC,qBAAoB,KAAK,MAAM,GAAG,kBAAkB,wBAAwB,EAAE,UAAU,KAAK,CAAC;AAAA,EACvG;AACF;;;ACzCA,SAAS,YAAAE,kBAAgB;AACzB,SAAS,4CAA4C;;;ACCrD,SAAS,6BAAAC,kCAAiC;AAC1C,SAAS,gDAAgD;AAIlD,IAAM,kCAAkC;AAAA,EAC7C,qBAAqB,OAAO,YAA6B;AACvD,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQA;AAAA,MACR,SAAS,CAAC,wCAAwC;AAAA,IACpD;AAEA,WAAQ,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAAA,EACtC;AAAA,EAEA,wBAAwB,OAAO,cAAiC;AAC9D,YAAQ,MAAM,UAAU,IAAI,GAAG,WAAW;AAAA,EAC5C;AACF;;;ADTO,IAAM,2BAAN,cAAuC,kBAAkE;AAAA,EACpG;AAAA,EACF;AAAA,EAER,YACE,SACA,YACA;AACA,UAAM,OAAO;AACb,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,mBAAmB;AACrB,WAAOC,WAAS,KAAK,iBAAiB;AAAA,EACxC;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO,EAAE,kBAAkB,CAAC,OAAiB,KAAK,iBAAiB,UAAU,EAAE,EAAE;AAAA,EACnF;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,EAAE,kBAAkB,MAAM,KAAK,iBAAiB,YAAY,EAAE;AAAA,EACvE;AAAA,EAEA,mBAAmB;AACjB,SAAK,iBAAiB,iBAAiB;AAAA,EACzC;AAAA,EAEA,MAAM,QAAQ;AACZ,UAAM,6BAA6B,MAAM,KAAK,8BAA8B,KAAK,UAAU;AAC3F,UAAM,eAAe,MAAM,KAAK,gBAAgB,KAAK,UAAU;AAE/D,SAAK,oBAAoB,MAAM,aAAa,OAAsD;AAAA,MAChG,WAAW;AAAA,MACX,WAAW,YAAY,MAAM,gCAAgC,oBAAoB,0BAA0B;AAAA,MAC3G,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACF;;;AElDA,SAAS,6BAAAC,kCAAiC;AAE1C,SAAS,yBAAyB,8BAAAC,mCAAkC;AAGpE,IAAM,YAAuB,CAAC;AAEvB,IAAM,2BAA2B;AAAA,EACtC,MAAM,kBAAkB,SAA0B;AAChD,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP,QAAQD;AAAA,MACR,SAAS,CAAC,uBAAuB;AAAA,IACnC;AAEA,UAAM,UAAW,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAE7C,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EACA,MAAM,wBAAwB,SAA0B;AACtD,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP,QAAQA;AAAA,MACR,SAAS,CAACC,2BAA0B;AAAA,IACtC;AAEA,UAAM,UAAW,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAE7C,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AACF;;;ACrCA,SAAS,YAAAC,kBAAgB;AAIzB,SAAS,6BAA6B,0BAAAC,+BAA8B;AAS7D,IAAM,4BAAN,cAAwC,eAAgE;AAAA,EACrG;AAAA,EACA;AAAA,EAER,YAAY,SAAsB;AAChC,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,IAAI,wBAAwB;AAC1B,WAAOC,WAAS,KAAK,wBAAwB,MAAM,2BAA2B;AAAA,EAChF;AAAA,EAEA,IAAI,+BAA+B;AACjC,WAAOA,WAAS,KAAK,+BAA+B,MAAM,iCAAiC;AAAA,EAC7F;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO;AAAA,MACL,gBAAgB,CAAC,OAAiB,KAAK,sBAAsB,UAAU,EAAE;AAAA,MACzE,sBAAsB,CAAC,OAAiB,KAAK,6BAA6B,UAAU,EAAE;AAAA,IACxF;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,gBAAgB,MAAM,KAAK,sBAAsB,YAAY;AAAA,MAC7D,sBAAsB,MAAM,KAAK,6BAA6B,YAAY;AAAA,IAC5E;AAAA,EACF;AAAA,EAEA,mBAAyB;AACvB,SAAK,sBAAsB,iBAAiB;AAAA,EAC9C;AAAA;AAAA,EAGA,MAAM,QAAQ;AACZ,UAAM,YAAY,MAAM,KAAK,iBAAiB;AAC9C,UAAM,UAAU,MAAM,KAAK,+BAA+B;AAE1D,SAAK,yBAAyB,MAAM,aAAa,OAA0B;AAAA,MACzE;AAAA,MACA,WAAW,YAAY,MAAM,yBAAyB,kBAAkB,OAAO;AAAA,MAC/E,YAAY;AAAA,IACd,CAAC;AAED,SAAK,gCAAgC,MAAM,aAAa,OAA6B;AAAA,MACnF;AAAA,MACA,WAAW,YAAY,MAAM,yBAAyB,wBAAwB,OAAO;AAAA,MACrF,YAAYC;AAAA,IACd,CAAC;AAAA,EACH;AACF;;;AChEA,SAAS,YAAAC,kBAAgB;AAKzB,SAAS,6BAAAC,kCAAiC;AAS1C;AAAA,EACE,2BAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,8BAAAC;AAAA,OACK;AACP,SAAS,kBAAAC,uBAAsB;;;ACpB/B,SAAS,6BAAAC,kCAAiC;AAE1C,SAAS,4BAA4B,oBAAAC,yBAAwB;AAGtD,IAAM,8BAA8B;AAAA,EACzC,MAAM,iCAAiC,SAA0B;AAC/D,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQD;AAAA,MACR,SAAS,CAAC,0BAA0B;AAAA,MACpC,QAAQ;AAAA,IACV;AACA,WAAQ,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAAA,EACtC;AAAA,EACA,MAAM,cAAc,SAA0B;AAC5C,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQA;AAAA,MACR,SAAS,CAACC,iBAAgB;AAAA,IAC5B;AACA,WAAQ,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAAA,EACtC;AACF;;;ADEO,IAAM,aAAN,cAAyB,eAAe;AAAA,EAC7C,YAAY,SAAsB;AAChC,UAAM,OAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,2BAA2B,WAAsB,CAAC,GAAG,QAAiB,OAAO;AACjF,UAAM,gBAAgB,MAAM,KAAK,iBAAiB;AAClD,QAAI,OAAO;AACT,YAAM,cAAc,OAAO,QAAQ;AAAA,IACrC,OAAO;AACL,iBAAW,WAAW,UAAU;AAC9B,cAAM,OAAO,MAAMC,gBAAe,SAAS,OAAO;AAClD,cAAM,CAAC,QAAQ,IAAI,MAAM,cAAc,IAAI,CAAC,IAAI,CAAC;AACjD,YAAI,SAAU;AACd,cAAM,cAAc,OAAO,CAAC,OAAO,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,MAAiC,0BAAgC,kBAA0B,sBAA+B;AAC3I,UAAM,gBAAmC;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQC;AAAA,MACR,WAAW,KAAK,IAAI;AAAA,IACtB;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBAAwB;AAC5B,UAAM,UAAU,MAAM,KAAK,+BAA+B;AAC1D,UAAM,QAAoC;AAAA,MACxC,OAAO;AAAA,MACP,QAAQC;AAAA,MACR,SAAS,CAACC,2BAA0B;AAAA,IACtC;AAEA,WAAO,QAAQ,OAAO,CAAC,KAAK,CAAC;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,0BAAuE;AAC3E,UAAM,UAAU,MAAM,KAAK,+BAA+B;AAE1D,WAAO,MAAM,4BAA4B,iCAAiC,OAAO;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,8BAA8B,MAAc;AAChD,UAAM,UAAU,MAAM,KAAK,+BAA+B;AAC1D,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP;AAAA,MACA,QAAQD;AAAA,MACR,SAAS,CAACC,2BAA0B;AAAA,IACtC;AAEA,UAAM,CAAC,OAAO,IAAIC,WAAS,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,uCAAuC;AACvG,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,UAA+C;AAE5D,UAAM,UAAU,KAAK,QAAQ,KAAK,SAAS,IAAI,QAAQ;AAEvD,QAAI,SAAS;AACX,aAAO;AAAA,IACT,OAAO;AACL,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAoD;AAClD,WAAO,CAAC,GAAG,KAAK,QAAQ,KAAK,SAAS,OAAO,KAAK,CAAC,CAAC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,sBACJ,kBACA,0BACA,MACA,sBACA;AACA,UAAM,YAAY,MAAM,KAAK,iBAAiB;AAC9C,UAAM,8BAA8B,MAAM,UAAU,IAAI,CAAC,wBAAwB,CAAC;AAClF,QAAI,CAAC,6BAA6B;AAChC,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AACA,UAAM,gBAAgB,KAAK,mBAAmB,MAAM,0BAA0B,kBAAkB,oBAAoB;AACpH,UAAM,UAAU,OAAO,CAAC,aAAa,CAAC;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,sBACJ,cACA,cACA,SAA0BC,iBAAgB,QAC1C,OAAiBC,UAAS,QAC1B,QACA;AACA,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI,MAAM,+DAA+D;AAAA,IACjF;AACA,UAAM,YAAY,MAAM,KAAK,iBAAiB;AAC9C,UAAM,aAAyB,iBAAiB,YAAY,cAAc,QAAQ,cAAc,MAAM,MAAM;AAC5G,WAAO,MAAM,UAAU,OAAO,CAAC,UAAU,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,6BAA6B,eAAgC,IAAI,gBAAgB,GAAG,UAAiC;AACzH,UAAM,gBAAgB,MAAM,KAAK,iBAAiB;AAElD,UAAM,SAAyC,CAAC;AAChD,eAAW,CAAC,KAAK,KAAK,KAAK,aAAa,QAAQ,GAAG;AACjD,aAAO,GAAG,IAAI;AAAA,IAChB;AAEA,UAAM,UAAgC;AAAA,MACpC;AAAA,MACA,MAAM;AAAA,MACN,QAAQC;AAAA,MACR,QAAQ;AAAA,MACR,WAAW,KAAK,IAAI;AAAA,IACtB;AAEA,UAAM,cAAc,OAAO,CAAC,OAAO,CAAC;AAAA,EACtC;AACF;;;AEzMA,SAAS,YAAAC,kBAAgB;AAIzB,SAAS,wBAAwB,oBAAoB;AAY9C,IAAM,uBAAN,cAAmC,eAAmE;AAAA,EACnG;AAAA,EACA;AAAA,EAER,YAAY,SAAsB;AAChC,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,IAAI,wCAAwC;AAC1C,WAAOC,WAAS,KAAK,wCAAwC,MAAM,gCAAgC;AAAA,EACrG;AAAA,EAEA,IAAI,qBAAqB;AACvB,WAAOA,WAAS,KAAK,qBAAqB,MAAM,sBAAsB;AAAA,EACxE;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO;AAAA,MACL,+BAA+B,CAAC,OAAiB,KAAK,sCAAsC,UAAU,EAAE;AAAA,MACxG,YAAY,CAAC,OAAiB,KAAK,mBAAmB,UAAU,EAAE;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,+BAA+B,MAAM,KAAK,sCAAsC,YAAY;AAAA,MAC5F,YAAY,MAAM,KAAK,mBAAmB,YAAY;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,mBAAmB;AACjB,SAAK,mBAAmB,iBAAiB;AAAA,EAC3C;AAAA,EAEA,MAAM,QAAQ;AACZ,UAAM,YAAY,MAAM,KAAK,iBAAiB;AAC9C,UAAM,UAAU,MAAM,KAAK,+BAA+B;AAE1D,SAAK,sBAAsB,MAAM,aAAa,OAAmB;AAAA,MAC/D;AAAA,MACA,WAAW,YAAY,MAAM,4BAA4B,cAAc,OAAO;AAAA,MAC9E,YAAY;AAAA,IACd,CAAC;AAED,SAAK,yCAAyC,MAAM,aAAa,OAA6B;AAAA,MAC5F;AAAA,MACA,WAAW,YAAY,MAAM,4BAA4B,iCAAiC,OAAO;AAAA,MACjG,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACF;;;AClEA,SAAS,6BAAAC,kCAAiC;AAM1C;AAAA,EACE,8BAAAC;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAAC,uBAAsB;AAKxB,IAAM,iBAAN,cAA6B,WAAW;AAAA,EAC7C,YAAY,SAAsB;AAChC,UAAM,OAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,IAAI,UAAqB,QAAQ,OAAO;AAC5C,UAAM,gBAAgB,MAAM,KAAK,iBAAiB;AAElD,eAAW,WAAW,UAAU;AAC9B,YAAM,OAAO,MAAMC,gBAAe,SAAS,OAAO;AAClD,YAAM,CAAC,QAAQ,IAAI,MAAM,cAAc,IAAI,CAAC,IAAI,CAAC;AACjD,UAAI,CAAC,YAAY,OAAO;AACtB,cAAM,cAAc,OAAO,QAAQ;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBAAmE;AACvE,UAAM,UAAU,MAAM,KAAK,+BAA+B;AAC1D,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQC;AAAA,MACR,SAAS,CAAC,0BAA0B;AAAA,IACtC;AAEA,WAAQ,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,qBAAqB,MAAc,sBAA8C;AACrF,UAAM,gBAAgB,MAAM,KAAK,iBAAiB;AAClD,UAAM,UAAgC;AAAA,MACpC;AAAA,MACA,QAAQ;AAAA,MACR,WAAW,KAAK,IAAI;AAAA,IACtB;AACA,UAAM,cAAc,OAAO,CAAC,OAAO,CAAC;AAEpC,QAAI,sBAAsB;AACxB,YAAM,mBAAyC;AAAA,QAC7C,QAAQ,CAAC;AAAA,QACT,MAAM;AAAA,QACN,QAAQC;AAAA,QACR,QAAQ;AAAA,QACR,WAAW,KAAK,IAAI;AAAA,MACtB;AACA,YAAM,cAAc,OAAO,CAAC,gBAAgB,CAAC;AAAA,IAC/C;AAAA,EACF;AACF;;;AC5EA,SAAS,YAAAC,kBAAgB;AAIzB,SAAS,wBAAwB,2BAA2B;;;ACF5D,SAAS,6BAAAC,kCAAiC;AAM1C;AAAA,EACE;AAAA,EACA,8BAAAC;AAAA,EACA;AAAA,OACK;AAGP,IAAM,WAAsB,CAAC;AAEtB,IAAM,kBAAkB;AAAA,EAC7B,MAAM,eAAe,SAAqE;AACxF,UAAM,QAAoC;AAAA,MACxC,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQD;AAAA,MACR,SAAS,CAAC,uBAAuB;AAAA,IACnC;AACA,WAAQ,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAAA,EACtC;AAAA,EAEA,MAAM,aAAa,SAA0B;AAC3C,UAAM,QAAoC;AAAA,MACxC,OAAO;AAAA,MACP,QAAQA;AAAA,MACR,SAAS,CAAC,iBAAiB;AAAA,IAC7B;AAEA,UAAM,UAAW,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAC7C,WAAO,QAAQ,SAAS,IAAI,UAAW;AAAA,EACzC;AAAA,EAEA,MAAM,qBAAqB,SAA0B;AACnD,UAAM,QAAoC;AAAA,MACxC,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQA;AAAA,MACR,SAAS,CAACC,2BAA0B;AAAA,IACtC;AACA,UAAM,UAAW,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAC7C,WAAO,QAAQ,SAAS,IAAI,UAAW;AAAA,EACzC;AAAA,EAEA,MAAM,oBAAoB,SAA0B;AAClD,UAAM,QAAoC;AAAA,MACxC,OAAO;AAAA,MACP,QAAQD;AAAA,MACR,SAAS,CAAC,iBAAiB;AAAA,IAC7B;AACA,UAAM,UAAW,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAC7C,WAAO,QAAQ,OAAO,cAAY,SAAS,WAAW,IAAI,EAAE,SAAS,CAAC,GAAG,OAAQ,EAAE,UAAU,MAAM,EAAE,UAAU,KAAK,IAAI,EAAG;AAAA,EAC7H;AACF;;;ADxCO,IAAM,mBAAN,cAA+B,WAA2D;AAAA,EACvF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,aAA0B;AACpC,UAAM,WAAW;AAAA,EACnB;AAAA,EAEA,IAAI,qBAAqB;AACvB,WAAOE,WAAS,KAAK,qBAAqB,MAAM,+BAA+B;AAAA,EACjF;AAAA,EAEA,IAAI,mBAAmB;AACrB,WAAOA,WAAS,KAAK,mBAAmB,MAAM,6BAA6B;AAAA,EAC7E;AAAA,EAEA,IAAI,4BAA4B;AAC9B,WAAOA,WAAS,KAAK,4BAA4B,MAAM,sCAAsC;AAAA,EAC/F;AAAA,EAEA,IAAI,0BAA0B;AAC5B,WAAOA,WAAS,KAAK,0BAA0B,MAAM,oCAAoC;AAAA,EAC3F;AAAA;AAAA,EAGA,IAAI,gBAAgB;AAClB,WAAO;AAAA,MACL,aAAa,CAAC,OAAiB,KAAK,mBAAmB,UAAU,EAAE;AAAA,MACnE,oBAAoB,CAAC,OAAiB,KAAK,0BAA0B,UAAU,EAAE;AAAA,MACjF,WAAW,CAAC,OAAiB,KAAK,iBAAiB,UAAU,EAAE;AAAA,MAC/D,kBAAkB,CAAC,OAAiB,KAAK,wBAAwB,UAAU,EAAE;AAAA,IAC/E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,aAAa,MAAM,KAAK,mBAAmB,YAAY;AAAA,MACvD,oBAAoB,MAAM,KAAK,0BAA0B,YAAY;AAAA,MACrE,WAAW,MAAM,KAAK,iBAAiB,YAAY;AAAA,MACnD,kBAAkB,MAAM,KAAK,wBAAwB,YAAY;AAAA,IACnE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB;AACjB,SAAK,mBAAmB,iBAAiB;AACzC,SAAK,iBAAiB,iBAAiB;AACvC,SAAK,0BAA0B,iBAAiB;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAuB;AAC3B,UAAM,gBAAgB,MAAM,KAAK,iBAAiB;AAClD,UAAM,8BAA8B,MAAM,KAAK,+BAA+B;AAE9E,SAAK,sBAAsB,MAAM,aAAa,OAA0B;AAAA,MACtE,WAAW;AAAA,MACX,WAAW,YAAY,MAAM,gBAAgB,eAAe,2BAA2B;AAAA,MACvF,YAAY;AAAA,IACd,CAAC;AACD,SAAK,oBAAoB,MAAM,aAAa,OAAoB;AAAA,MAC9D,WAAW;AAAA,MACX,WAAW,YAAY,MAAM,gBAAgB,aAAa,2BAA2B;AAAA,MACrF,YAAY;AAAA,IACd,CAAC;AACD,SAAK,2BAA2B,MAAM,aAAa,OAAoB;AAAA,MACrE,WAAW;AAAA,MACX,WAAW,YAAY,MAAM,gBAAgB,oBAAoB,2BAA2B;AAAA,MAC5F,YAAY;AAAA,IACd,CAAC;AACD,SAAK,6BAA6B,MAAM,aAAa,OAA6B;AAAA,MAChF,WAAW;AAAA,MACX,WAAW,YAAY,MAAM,gBAAgB,qBAAqB,2BAA2B;AAAA,MAC7F,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACF;;;AEvGA,SAAS,iBAAAC,sBAAqB;;;ACD9B,SAAS,YAAAC,kBAAgB;AACzB,SAAS,uBAAAC,4BAA2B;AACpC,SAAS,qBAAAC,0BAAyB;AAGlC,IAAM,gCAAgC;AACtC,IAAM,8CAA8C;AAE7C,IAAM,uBAAN,MAA2B;AAAA,EACtB;AAAA,EACV,YAAY,SAAsB;AAChC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,yBAAyB;AAC7B,UAAM,MAAMF,WAAS,MAAM,KAAK,QAAQ,KAAK,QAAQ,6BAA6B,GAAG,MAAM,GAAG,6BAA6B,YAAY;AACvI,WAAOC,qBAAoB,KAAK,MAAM,GAAG,6BAA6B,wBAAwB,EAAE,UAAU,KAAK,CAAC;AAAA,EAClH;AAAA,EAEA,MAAM,8BAA8B;AAClC,UAAM,MAAMD;AAAA,MACV,MAAM,KAAK,QAAQ,KAAK,QAAQ,2CAA2C;AAAA,MAC3E,MAAM,GAAG,2CAA2C;AAAA,IACtD;AACA,WAAOE,mBAAkB,KAAK,MAAM,GAAG,2CAA2C,qBAAqB,EAAE,UAAU,KAAK,CAAC;AAAA,EAC3H;AACF;;;ACzBA,SAAS,6BAAAC,mCAAiC;AAE1C,SAAS,qBAAqB;AAGvB,IAAM,iBAAiB;AAAA,EAC5B,UAAU,OAAO,aAAqB,YAA6B;AACjE,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQA;AAAA,MACR,SAAS,CAAC,aAAa;AAAA,IACzB;AAEA,WAAQ,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAAA,EACtC;AACF;;;AFZO,IAAM,gBAAN,cAA4B,qBAAqB;AAAA;AAAA;AAAA;AAAA,EAItD,MAAM,SAAS,aAAkC;AAC/C,UAAM,UAAU,MAAM,KAAK,4BAA4B;AACvD,UAAM,UAAU,MAAM,eAAe,SAAS,aAAa,OAAO;AAClE,WAAO,QAAQ,CAAC,KAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,aAAkC;AAChD,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA,QAAQC;AAAA,MACR,WAAW,KAAK,IAAI;AAAA,IACtB;AAEA,UAAM,YAAY,MAAM,KAAK,uBAAuB;AACpD,WAAO,MAAM,UAAU,OAAO,CAAC,KAAK,CAAC;AAAA,EACvC;AACF;;;AG7BA,SAAS,YAAAC,kBAAgB;AAEzB,SAAS,uBAAuB;AASzB,IAAM,kBAAN,cAA8B,qBAAoE;AAAA,EACvG,OAAgB,QAAgC,CAAC,iBAAiB;AAAA,EAE1D;AAAA,EAER,YAAY,aAA0B;AACpC,UAAM,WAAW;AAAA,EACnB;AAAA,EAEA,IAAI,kBAAkB;AACpB,WAAOC,WAAS,KAAK,kBAAkB,MAAM,oCAAoC;AAAA,EACnF;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO,EAAE,iBAAiB,CAAC,OAAmB,KAAK,gBAAgB,UAAU,EAAE,EAAE;AAAA,EACnF;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,EAAE,iBAAiB,MAAM,KAAK,gBAAgB,OAAO;AAAA,EAC9D;AAAA,EAEA,mBAAmB;AACjB,SAAK,gBAAgB,iBAAiB;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ;AACZ,UAAM,UAAU,MAAM,KAAK,4BAA4B;AACvD,UAAM,YAAY,MAAM,KAAK,uBAAuB;AAEpD,SAAK,mBAAmB,MAAM,aAAa,OAAgB;AAAA,MACzD;AAAA,MACA,WAAW,YAAY,MAAM,eAAe,SAAS,mBAAmB,OAAO;AAAA,MAC/E,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACF;;;ACjDA,SAAS,YAAAC,kBAAgB;;;ACEzB,SAAS,8BAA8B;AACvC,SAAS,kBAAAC,uBAAsB;AAE/B,IAAM,WAAW;AACjB,IAAM,WAAW;AAKV,IAAM,kBAAkB;AAaxB,IAAM,+BAA+B,OAAO,UAAkB,WAG/D;AACJ,QAAM,SAAS;AAAA,IACb,UAAU;AAAA,MACR;AAAA,MAAU,UAAU,SAAS,MAAM,GAAG;AAAA,MAAG;AAAA,IAC3C;AAAA,IACA;AAAA,IACA,YAAY,KAAK,IAAI;AAAA,EACvB;AACA,QAAM,UAAU,IAAIA,gBAAiC,EAAE,QAAQ,uBAAuB,CAAC,EAAE,OAAO,MAAM,EAAE,MAAM;AAC9G,QAAM,WAAW,MAAMA,gBAAe,KAAK,OAAO;AAClD,SAAO,EAAE,SAAS,SAAS;AAC7B;AAOO,IAAM,mCAAmC,CAAC,aAG3C;AACJ,SAAO,6BAA6B,UAAU,eAAe;AAC/D;;;AClDA,IAAM,eAAe,CAAC,OAAkD,cAAkC;AACxG,MAAI,cAAc,QAAW;AAC3B,WAAO;AAAA,EACT;AACA,MAAI,UAAU,aAAa;AACzB,WAAO;AAAA,EACT;AACA,MAAI,UAAU,QAAQ;AACpB,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACNO,IAAM,eAAe,CAA8D,QAAW,QAAiB,WAAmB;AACvI,QAAM,aAAa,OAAO,KAAK,MAAM;AAErC,QAAM,SAAS,WAAW;AAAA,IACxB,CAAC,KAAK,QAAQ;AACZ,UAAI,QAAQ,QAAQ;AAClB,YAAI,MAAM,IAAI,OAAO,MAAM;AAAA,MAC7B,OAAO;AACL,YAAI,GAAa,IAAI,OAAO,GAAG;AAAA,MACjC;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;ACnBA,SAAS,6BAAAC,mCAAiC;AAE1C,SAAS,sBAAsB,0BAAAC,+BAA8B;AAC7D,SAAS,kBAAAC,uBAAsB;AAG/B,IAAMC,cAA8C,CAAC;AAE9C,IAAM,oBAAoB;AAAA,EAC/B,MAAM,oBAAoB,SAA0B,WAA4D;AAC9G,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQH;AAAA,MACR,SAAS,CAACC,uBAAsB;AAAA,IAClC;AACA,UAAM,UAAW,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAC7C,UAAM,SAAS,QAAQ,KAAK,aAAW,QAAQ,WAAW,YAAY;AACtE,QAAI,OAAQ,QAAO,CAAC,MAAM;AAG1B,UAAM,eAAe,QAAQ,KAAK,aAAY,QAAgB,MAAM,UAAU,YAAY;AAC1F,QAAI,gBAAgB,WAAW;AAE7B,YAAM,aAAc,aAAqB;AACzC,YAAM,yBAAyB;AAAA,QAC7B,UAAU,aAAa;AAAA,QACvB,QAAQ,WAAW;AAAA,QACnB,YAAY,WAAW;AAAA,MACzB;AACA,YAAM,UAAU,IAAIC,gBAAiC,EAAE,QAAQD,wBAAuB,CAAC,EAAE,OAAO,sBAAsB,EAAE,MAAM;AAC9H,YAAM,UAAU,OAAO,CAAC,OAAO,CAAC;AAChC,aAAO,CAAC,OAAO;AAAA,IACjB;AACA,WAAOE;AAAA,EACT;AAAA,EACA,MAAM,kBAAkB,SAA0B;AAChD,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQH;AAAA,MACR,SAAS,CAAC,oBAAoB;AAAA,IAChC;AACA,WAAQ,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAAA,EACtC;AAAA,EACA,MAAM,WAAW,SAA0B;AACzC,UAAM,QAAQ;AAAA,MACZ,OAAO;AAAA,MACP,QAAQA;AAAA,MACR,SAAS,CAACC,uBAAsB;AAAA,IAClC;AACA,WAAQ,MAAM,QAAQ,OAAO,CAAC,KAAK,CAAC;AAAA,EACtC;AACF;;;AJ7CO,IAAM,mBAAN,cAA+B,qBAAqB;AAAA,EACzD,YAAY,SAAsB;AAChC,UAAM,OAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,kBAAkB,SAAyB;AAC/C,UAAM,YAAY,MAAM,KAAK,uBAAuB;AACpD,UAAM,UAAU,OAAO,CAAC,OAAO,CAAC;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,oBAAoB,SAA2B;AAOnD,UAAM,YAAY,MAAM,KAAK,uBAAuB;AACpD,UAAM,UAAU,OAAO,CAAC,OAAO,CAAC;AAGhC,UAAM,SAAS,QAAQ,SAAS,SAAS,KAAK,GAAG;AACjD,UAAM,KAAK,QAAQ,QAAQ,MAAM,gBAAgB,IAAI,QAAQ,MAAM;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,0BAA0D;AAC9D,UAAM,UAAU,MAAM,KAAK,4BAA4B;AACvD,UAAM,CAAC,MAAM,IAAK,MAAM,kBAAkB,kBAAkB,OAAO;AACnE,WAAO,UAAU;AAAA,EACnB;AAAA,EAEA,MAAM,sBAAiD;AAErD,UAAM,UAAU,MAAM,KAAK,4BAA4B;AACvD,UAAM,YAAY,MAAM,KAAK,uBAAuB;AACpD,UAAM,2BAA2B,MAAM,kBAAkB,oBAAoB,SAAS,SAAS,GAAG,IAAI;AAEtG,UAAM,uBAAuBG,WAAS,MAAM,KAAK,QAAQ,QAAQ,MAAM,gBAAgB,IAAI,MAAM,GAAG,MAAM,qCAAqC;AAC/I,UAAM,4BAA4B,qBAAqB,MAAM,GAAG;AAEhE,QAAI,CAAC,yBAAyB,UAAU,UAAU;AAEhD,YAAM,EAAE,SAAS,sBAAsB,IAAI,MAAM,iCAAiC,oBAAoB;AAEtG,YAAM,KAAK,oBAAoB,qBAAqB;AAEpD,aAAO;AAAA,IACT,WAAW,CAAC,QAAQ,wBAAwB,SAAS,UAAU,yBAAyB,GAAG;AAGzF,YAAM,wBAAwB,wBAAwB,SAAS,SAAS,KAAK,GAAG;AAChF,YAAM,KAAK,QAAQ,QAAQ,MAAM,gBAAgB,IAAI,QAAQ,qBAAqB;AAAA,IACpF;AAEA,WAAO;AAAA,EACT;AACF;;;AK7EA,SAAS,YAAAC,kBAAgB;AAIzB,SAAS,kBAAkB,0BAA0B;AAS9C,IAAM,qBAAN,cAAiC,qBAAuE;AAAA,EACrG;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,SAAsB;AAChC,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,IAAI,2BAA2B;AAC7B,WAAOC,WAAS,KAAK,2BAA2B,MAAM,qCAAqC;AAAA,EAC7F;AAAA,EAEA,IAAI,yBAAyB;AAC3B,WAAOA,WAAS,KAAK,yBAAyB,MAAM,kCAAkC;AAAA,EACxF;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO;AAAA,MACL,kBAAkB,CAAC,OAAiB,KAAK,gBAAgB,UAAU,EAAE;AAAA,MACrE,gBAAgB,CAAC,OAAiB,KAAK,uBAAuB,UAAU,EAAE;AAAA,MAC1E,SAAS,CAAC,OAAiB,KAAK,gBAAgB,UAAU,EAAE;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,kBAAkB,MAAM,KAAK,yBAAyB;AAAA,MACtD,gBAAgB,MAAM,KAAK,uBAAuB;AAAA,MAClD,SAAS,MAAM,KAAK,gBAAgB;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,IAAI,kBAAkB;AACpB,WAAOA,WAAS,KAAK,kBAAkB,MAAM,0BAA0B;AAAA,EACzE;AAAA,EAEA,mBAAmB;AACjB,SAAK,gBAAgB,iBAAiB;AACtC,SAAK,yBAAyB,iBAAiB;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ;AACZ,UAAM,YAAY,MAAM,KAAK,uBAAuB;AACpD,UAAM,UAAU,MAAM,KAAK,4BAA4B;AAEvD,SAAK,mBAAmB,MAAM,aAAa,OAAyB;AAAA,MAClE;AAAA,MACA,WAAW,YAAY,MAAM,kBAAkB,WAAW,OAAO;AAAA,MACjE,YAAY;AAAA,IACd,CAAC;AAED,SAAK,4BAA4B,MAAM,aAAa,OAAyB;AAAA,MAC3E;AAAA,MACA,WAAW,YAAY,MAAM,kBAAkB,oBAAoB,OAAO;AAAA,MAC1E,YAAY;AAAA,IACd,CAAC;AAED,SAAK,0BAA0B,MAAM,aAAa,OAAuB;AAAA,MACvE;AAAA,MACA,WAAW,YAAY,MAAM,kBAAkB,kBAAkB,OAAO;AAAA,MACxE,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACF;;;ACrEA,IAAM,gCAAgC;AAEtC,WAAW,gBACP,WAAW,kBACP,MAAkB;AACpB,SAAO,EAAE,UAAU,EAAE,YAAY,CAAC,QAAgB,gBAA0C,KAAK,CAAC,EAAE,EAAE;AACxG;AAGJ,IAAM,aAAa,WAAW,cAAc;AAErC,IAAe,cAAf,MAAe,aAAY;AAAA,EAChC,OAAO,aAAa,WAAW,SAAS;AAAA,EAEhC,oBAAoB,oBAAI,IAAoB;AAAA,EAEpD,WAAW,MAAoB;AAC7B,SAAK,kBAAkB,IAAI,MAAM,YAAY,IAAI,CAAC;AAAA,EACpD;AAAA,EAEA,UAAU,aAAuC;AAC/C,UAAM,EAAE,sBAAsB,KAAK,IAAI;AACvC,UAAM,QAAQ,KAAK,kBAAkB,IAAI,IAAI;AAC7C,QAAI,OAAO;AACT,YAAM,MAAM,YAAY,IAAI;AAC5B,YAAM,WAAW,MAAM;AACvB,WAAK,kBAAkB,OAAO,IAAI;AAClC,YAAM,aAAa,KAAK,WAAW;AACnC,mBAAY,WAAW,+BAA+B;AAAA,QACpD,mBAAmB,YAAY;AAAA,QAC/B,UAAU,SAAS,SAAS;AAAA,QAC5B,0BAA0B,YAAY;AAAA,QACtC;AAAA,QACA,eAAe,YAAY;AAAA,QAC3B,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,EACF;AAGF;;;ACnDA,SAAS,YAAAC,kBAAgB;AAiBlB,IAAM,kBAAN,MAAiE;AAAA,EAC9D;AAAA,EAER,YAAY,QAA+B;AACzC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,IAAI,SAAS;AACX,WAAOC,WAAS,KAAK,SAAS,MAAM,IAAI,MAAM,iBAAiB,CAAC;AAAA,EAClE;AAAA,EAEA,MAAM,UAAsC;AAC1C,UAAM,mBAAmB,MAAM,KAAK,kBAAkB;AAEtD,WAAO,MAAM,KAAK,sBAAsB,gBAAgB;AAAA,EAC1D;AAAA,EAEA,MAAc,sBAAsB,kBAAiD;AACnF,UAAM;AAAA,MACJ;AAAA,MAAc;AAAA,MAAY;AAAA,MAAY;AAAA,IACxC,IAAI,KAAK;AAET,WAAO,MAAM,iBAAiB,aAAa,kBAAkB,MAAM,gBAAgB,CAAC,GAAG,YAAY,UAAU;AAAA,EAC/G;AAAA,EAEA,MAAc,oBAAgC;AAC5C,UAAM,EAAE,MAAM,KAAK,IAAI,KAAK;AAC5B,UAAM,2BAA2B,IAAI,yBAAyB,MAAM,CAAC,KAAK,OAAO,IAAI,CAAC;AACtF,UAAM,WAAW,MAAM,yBAAyB,aAAa,KAAK,OAAO,IAAI;AAG7E,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,QACN,GAAG,KAAK;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACrDA,SAAS,kBAAAC,wBAAsB;AAE/B,IAAM,gCAAgC;AAO/B,IAAM,cAAkD,CAAC;AAEzD,IAAM,sBAAsB,CAAC,QAAwB;AAC1D,QAAM,SAAS,IAAI,QAAQ,GAAG;AAC9B,MAAI,MAAM,OAAO,WAAW,SAAS;AACnC,UAAMC,OAAM,OAAO,MAAM;AACzB,QAAIA,MAAK;AACP,YAAM,OAAO,YAAYA,KAAI,OAAO,KAAK,EAAE,eAAe,GAAG,aAAa,CAAC,EAAE;AAC7E,kBAAYA,KAAI,OAAO,IAAI;AAC3B,WAAK,iBAAiB;AACtB,WAAK,YAAY,SAAS,KAAK,KAAK,YAAY,SAAS,KAAK,KAAK;AACnE,UAAI,cAAc,oBAAoB;AACpC,cAAM,EAAE,OAAO,WAAW,CAAC,EAAE,IAAI;AACjC,cAAM,QAAQ,MAAMD,iBAAe,cAAc,QAAQ;AACzD,cAAM,YAAY,MAAM,KAAK,CAAC,CAAC,EAAE,IAAI,MAAM,SAAS,MAAM,KAAK;AAC/D,YAAI,WAAW;AACb,gBAAM,CAAC,OAAO,IAAI;AAClB,kBAAQ,IAAI,qBAAqB,QAAQ,MAAM,EAAE;AAAA,QACnD;AAAA,MACF;AACA,UAAI,cAAc,qBAAqB;AACrC,cAAM,EAAE,MAAM,IAAI;AAClB,gBAAQ,IAAI,sBAAsB,MAAM,KAAK,EAAE;AAAA,MACjD;AACA,UAAI,KAAK,gBAAgB,kCAAkC,GAAG;AAC5D,gBAAQ,IAAI,eAAeC,KAAI,EAAE,gBAAgB;AACjD,gBAAQ,IAAI,KAAK,WAAW;AAAA,MAC9B;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC1CA,SAAS,YAAAC,kBAAgB;AAGzB,SAAS,wBAAwB;AAEjC,SAAS,+BAA+B;AAEjC,IAAM,qBAAN,MAAyB;AAAA,EACtB;AAAA,EACR,YAAY,MAAoB;AAC9B,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,gBAAgB,WAAsB,SAA+B;AACzE,UAAM,eAAe,MAAM,KAAK,gBAAgB;AAChD,eAAW,WAAW,WAAW;AAC/B,cAAQ,IAAI,aAAa,OAAO,EAAE;AAClC,YAAM,aAAa,OAAO,SAAS,OAAO;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,WAAsB;AAC5C,UAAM,eAAe,MAAM,KAAK,gBAAgB;AAChD,eAAW,WAAW,WAAW;AAC/B,YAAM,aAAa,WAAW,OAAO;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAc,kBAAkB;AAC9B,UAAM,MAAMA,WAAS,MAAM,KAAK,KAAK,QAAQ,uBAAuB,GAAG,MAAM,GAAG,uBAAuB,YAAY;AACnH,WAAO,iBAAiB,KAAK,MAAM,GAAG,uBAAuB,oBAAoB,EAAE,UAAU,KAAK,CAAC;AAAA,EACrG;AACF;","names":["assertEx","ModuleFactoryLocator","asNodeInstance","isRegisteredDappAccessDappSet","PayloadBuilder","assertEx","Mutex","ModuleFactoryLocator","HDWallet","existingPayload","assertEx","asArchivistInstance","assertEx","asArchivistInstance","asDivinerInstance","assertEx","asArchivistInstance","dapp","ModuleFactoryLocator","HDWallet","assertEx","ModuleFactoryLocator","assertEx","assertEx","asArchivistInstance","PayloadBuilder","uuid","asDivinerInstance","isObject","assertEx","ModuleFactoryLocator","ModuleFactoryLocator","forget","ModuleFactoryLocator","DappMode","PayloadDivinerQuerySchema","PayloadDivinerQuerySchema","assertEx","assertEx","PayloadBuilder","PayloadDivinerQuerySchema","PayloadBuilder","PayloadBuilder","assertEx","ManifestWrapper","ModuleFactoryLocator","DappPackageManifestPayloadSchema","assertEx","BaseEmitter","ModuleFactoryLocator","Mutex","assertEx","ModuleFactoryLocator","ManifestWrapper","DappPackageManifestPayloadSchema","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","Mutex","assertEx","ModuleFactoryLocator","isRegisteredDappAccessDappSet","assertEx","asNodeInstance","PayloadBuilder","assertEx","asArchivistInstance","assertEx","asArchivistInstance","assertEx","asArchivistInstance","asDivinerInstance","assertEx","PayloadDivinerQuerySchema","assertEx","PayloadDivinerQuerySchema","RegisteredDappAccessSchema","assertEx","isRegisteredDappAccess","assertEx","isRegisteredDappAccess","assertEx","PayloadDivinerQuerySchema","DappAccessRequestSchema","DappInjectableParamsSchema","DappIntentTypes","DappMode","RegisteredDappAccessSchema","PayloadBuilder","PayloadDivinerQuerySchema","NodeOsInfoSchema","PayloadBuilder","DappAccessRequestSchema","PayloadDivinerQuerySchema","RegisteredDappAccessSchema","assertEx","DappIntentTypes","DappMode","DappInjectableParamsSchema","assertEx","assertEx","PayloadDivinerQuerySchema","DappInjectableParamsSchema","PayloadBuilder","PayloadBuilder","PayloadDivinerQuerySchema","DappInjectableParamsSchema","assertEx","PayloadDivinerQuerySchema","DappNavItemSelectionSchema","assertEx","OsBadgeSchema","assertEx","asArchivistInstance","asDivinerInstance","PayloadDivinerQuerySchema","OsBadgeSchema","assertEx","assertEx","assertEx","PayloadBuilder","PayloadDivinerQuerySchema","WalletSeedPhraseSchema","PayloadBuilder","NO_RESULTS","assertEx","assertEx","assertEx","assertEx","assertEx","PayloadBuilder","mod","assertEx"]}
|