@xyo-network/node-abstract 2.93.0-rc.2 → 2.93.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.
@@ -67,7 +67,7 @@ var AbstractNode = class extends import_module_abstract.AbstractModuleInstance {
67
67
  async attached() {
68
68
  return (await this.attachedModules()).map((module2) => module2.address);
69
69
  }
70
- async attachedModules(maxDepth = 2) {
70
+ async attachedModules(maxDepth = 3) {
71
71
  return (await (this.downResolver.resolve("*", {
72
72
  maxDepth
73
73
  }) ?? [])).filter((module2) => module2.address !== this.address);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/AbstractNode.ts"],"sourcesContent":["export * from './AbstractNode'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport {\n duplicateModules,\n Module,\n ModuleConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryHandlerResult,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport {\n NodeAttachedQuerySchema,\n NodeAttachQuerySchema,\n NodeConfigSchema,\n NodeDetachQuerySchema,\n NodeModule,\n NodeModuleEventData,\n NodeParams,\n NodeQueries,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends AbstractModuleInstance<TParams, TEventData>\n implements NodeModule<TParams, TEventData>, Module<TParams, TEventData>\n{\n static override readonly configSchemas: string[] = [NodeConfigSchema]\n\n protected readonly privateResolver = new CompositeModuleResolver()\n\n private readonly isNode = true\n\n override get queries(): string[] {\n return [NodeAttachQuerySchema, NodeDetachQuerySchema, NodeAttachedQuerySchema, NodeRegisteredQuerySchema, ...super.queries]\n }\n\n protected override get _queryAccountPaths(): Record<NodeQueries['schema'], string> {\n return {\n 'network.xyo.query.node.attach': '1/1',\n 'network.xyo.query.node.attached': '1/2',\n 'network.xyo.query.node.detach': '1/3',\n 'network.xyo.query.node.registered': '1/4',\n }\n }\n\n static isNode(module: unknown) {\n return (module as AbstractNode).isNode\n }\n\n async attached(): Promise<Address[]> {\n return (await this.attachedModules()).map((module) => module.address)\n }\n\n async attachedModules(maxDepth = 2): Promise<ModuleInstance[]> {\n return (await (this.downResolver.resolve('*', { maxDepth }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n override async manifest(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n return await this.manifestHandler(maxDepth, ignoreAddresses)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(\n idOrFilter: ModuleFilter | ModuleIdentifier = '*',\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n //checking type of nameOrAddressOrFilter before calling other functions since TS seems\n //to need help here narrowing before the call\n if (idOrFilter === '*') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate('*', options)\n }\n case 'all': {\n return await this.resolveAll('*', options)\n }\n default: {\n return await super.resolve('*', options)\n }\n }\n }\n if (typeof idOrFilter === 'string') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n } else {\n switch (options?.visibility) {\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n }\n }\n\n protected override async discoverHandler(maxDepth = 5): Promise<Payload[]> {\n const childMods = await this.attachedModules(maxDepth)\n //console.log(`childMods: ${toJsonString(childMods)}`)\n const childModAddresses = await Promise.all(\n childMods.map((mod) =>\n new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address: mod.address, name: mod.config.name }).build(),\n ),\n )\n\n return [...(await super.discoverHandler(maxDepth)), ...childModAddresses]\n }\n\n protected override async manifestHandler(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n const manifest: NodeManifestPayload = { ...(await super.manifestHandler(maxDepth, ignoreAddresses)), schema: NodeManifestPayloadSchema }\n const newIgnoreAddresses = [...ignoreAddresses, this.address]\n\n const notThisModule = (module: ModuleInstance) => module.address !== this.address && !ignoreAddresses.includes(module.address)\n const toManifest = (module: ModuleInstance) => module.manifest(maxDepth - 1, newIgnoreAddresses)\n\n /*const privateModules = await Promise.all((await this.privateResolver.resolve()).filter(notThisModule).map(toManifest))\n if (privateModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.private = privateModules\n }*/\n\n const publicModules = await Promise.all((await this.resolve('*')).filter(notThisModule).map(toManifest))\n if (publicModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.public = publicModules\n }\n\n return manifest\n }\n\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads?: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrapper = await QueryBoundWitnessWrapper.parseQuery<NodeQueries>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n switch (queryPayload.schema) {\n case NodeAttachQuerySchema: {\n const address = await this.attach(queryPayload.nameOrAddress, queryPayload.external)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeDetachQuerySchema: {\n const address = await this.detach(queryPayload.nameOrAddress)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeAttachedQuerySchema: {\n const addresses = await this.attached()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeRegisteredQuerySchema: {\n const addresses = await this.registered()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n default: {\n return await super.queryHandler(query, payloads)\n }\n }\n return resultPayloads\n }\n\n private async resolveAll(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolveAll(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n if (idOrFilter === '*') {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return (await this.resolvePrivate(idOrFilter, options)) ?? (await super.resolve(idOrFilter, options))\n }\n default: {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n }\n }\n\n private async resolvePrivate(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolvePrivate(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n const direction = options?.direction ?? 'all'\n const down = direction === 'down' || direction === 'all'\n if (idOrFilter === '*') {\n return down ? await this.privateResolver.resolve(idOrFilter) : []\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n default: {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n }\n }\n\n abstract attach(id: ModuleIdentifier, external?: boolean): Promisable<Address | undefined>\n abstract detach(id: ModuleIdentifier): Promisable<Address | undefined>\n abstract registered(): Promisable<Address[]>\n}\n"],"mappings":"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","names":["AbstractNode","AbstractModuleInstance","configSchemas","NodeConfigSchema","privateResolver","CompositeModuleResolver","isNode","queries","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeAttachedQuerySchema","NodeRegisteredQuerySchema","_queryAccountPaths","module","attached","attachedModules","map","address","maxDepth","downResolver","resolve","filter","manifest","ignoreAddresses","manifestHandler","idOrFilter","options","visibility","resolvePrivate","resolveAll","discoverHandler","childMods","childModAddresses","Promise","all","mod","PayloadBuilder","schema","AddressSchema","fields","name","config","build","NodeManifestPayloadSchema","newIgnoreAddresses","notThisModule","includes","toManifest","publicModules","length","modules","public","queryHandler","query","payloads","queryConfig","wrapper","QueryBoundWitnessWrapper","parseQuery","queryPayload","getQuery","assertEx","queryable","resultPayloads","attach","nameOrAddress","external","payload","push","detach","addresses","registered","duplicateModules","direction","down","undefined"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/AbstractNode.ts"],"sourcesContent":["export * from './AbstractNode'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport {\n duplicateModules,\n Module,\n ModuleConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryHandlerResult,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport {\n NodeAttachedQuerySchema,\n NodeAttachQuerySchema,\n NodeConfigSchema,\n NodeDetachQuerySchema,\n NodeModule,\n NodeModuleEventData,\n NodeParams,\n NodeQueries,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends AbstractModuleInstance<TParams, TEventData>\n implements NodeModule<TParams, TEventData>, Module<TParams, TEventData>\n{\n static override readonly configSchemas: string[] = [NodeConfigSchema]\n\n protected readonly privateResolver = new CompositeModuleResolver()\n\n private readonly isNode = true\n\n override get queries(): string[] {\n return [NodeAttachQuerySchema, NodeDetachQuerySchema, NodeAttachedQuerySchema, NodeRegisteredQuerySchema, ...super.queries]\n }\n\n protected override get _queryAccountPaths(): Record<NodeQueries['schema'], string> {\n return {\n 'network.xyo.query.node.attach': '1/1',\n 'network.xyo.query.node.attached': '1/2',\n 'network.xyo.query.node.detach': '1/3',\n 'network.xyo.query.node.registered': '1/4',\n }\n }\n\n static isNode(module: unknown) {\n return (module as AbstractNode).isNode\n }\n\n async attached(): Promise<Address[]> {\n return (await this.attachedModules()).map((module) => module.address)\n }\n\n async attachedModules(maxDepth = 3): Promise<ModuleInstance[]> {\n return (await (this.downResolver.resolve('*', { maxDepth }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n override async manifest(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n return await this.manifestHandler(maxDepth, ignoreAddresses)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(\n idOrFilter: ModuleFilter | ModuleIdentifier = '*',\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n //checking type of nameOrAddressOrFilter before calling other functions since TS seems\n //to need help here narrowing before the call\n if (idOrFilter === '*') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate('*', options)\n }\n case 'all': {\n return await this.resolveAll('*', options)\n }\n default: {\n return await super.resolve('*', options)\n }\n }\n }\n if (typeof idOrFilter === 'string') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n } else {\n switch (options?.visibility) {\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n }\n }\n\n protected override async discoverHandler(maxDepth = 5): Promise<Payload[]> {\n const childMods = await this.attachedModules(maxDepth)\n //console.log(`childMods: ${toJsonString(childMods)}`)\n const childModAddresses = await Promise.all(\n childMods.map((mod) =>\n new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address: mod.address, name: mod.config.name }).build(),\n ),\n )\n\n return [...(await super.discoverHandler(maxDepth)), ...childModAddresses]\n }\n\n protected override async manifestHandler(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n const manifest: NodeManifestPayload = { ...(await super.manifestHandler(maxDepth, ignoreAddresses)), schema: NodeManifestPayloadSchema }\n const newIgnoreAddresses = [...ignoreAddresses, this.address]\n\n const notThisModule = (module: ModuleInstance) => module.address !== this.address && !ignoreAddresses.includes(module.address)\n const toManifest = (module: ModuleInstance) => module.manifest(maxDepth - 1, newIgnoreAddresses)\n\n /*const privateModules = await Promise.all((await this.privateResolver.resolve()).filter(notThisModule).map(toManifest))\n if (privateModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.private = privateModules\n }*/\n\n const publicModules = await Promise.all((await this.resolve('*')).filter(notThisModule).map(toManifest))\n if (publicModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.public = publicModules\n }\n\n return manifest\n }\n\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads?: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrapper = await QueryBoundWitnessWrapper.parseQuery<NodeQueries>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n switch (queryPayload.schema) {\n case NodeAttachQuerySchema: {\n const address = await this.attach(queryPayload.nameOrAddress, queryPayload.external)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeDetachQuerySchema: {\n const address = await this.detach(queryPayload.nameOrAddress)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeAttachedQuerySchema: {\n const addresses = await this.attached()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeRegisteredQuerySchema: {\n const addresses = await this.registered()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n default: {\n return await super.queryHandler(query, payloads)\n }\n }\n return resultPayloads\n }\n\n private async resolveAll(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolveAll(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n if (idOrFilter === '*') {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return (await this.resolvePrivate(idOrFilter, options)) ?? (await super.resolve(idOrFilter, options))\n }\n default: {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n }\n }\n\n private async resolvePrivate(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolvePrivate(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n const direction = options?.direction ?? 'all'\n const down = direction === 'down' || direction === 'all'\n if (idOrFilter === '*') {\n return down ? await this.privateResolver.resolve(idOrFilter) : []\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n default: {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n }\n }\n\n abstract attach(id: ModuleIdentifier, external?: boolean): Promisable<Address | undefined>\n abstract detach(id: ModuleIdentifier): Promisable<Address | undefined>\n abstract registered(): Promisable<Address[]>\n}\n"],"mappings":"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","names":["AbstractNode","AbstractModuleInstance","configSchemas","NodeConfigSchema","privateResolver","CompositeModuleResolver","isNode","queries","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeAttachedQuerySchema","NodeRegisteredQuerySchema","_queryAccountPaths","module","attached","attachedModules","map","address","maxDepth","downResolver","resolve","filter","manifest","ignoreAddresses","manifestHandler","idOrFilter","options","visibility","resolvePrivate","resolveAll","discoverHandler","childMods","childModAddresses","Promise","all","mod","PayloadBuilder","schema","AddressSchema","fields","name","config","build","NodeManifestPayloadSchema","newIgnoreAddresses","notThisModule","includes","toManifest","publicModules","length","modules","public","queryHandler","query","payloads","queryConfig","wrapper","QueryBoundWitnessWrapper","parseQuery","queryPayload","getQuery","assertEx","queryable","resultPayloads","attach","nameOrAddress","external","payload","push","detach","addresses","registered","duplicateModules","direction","down","undefined"]}
@@ -43,7 +43,7 @@ var AbstractNode = class extends AbstractModuleInstance {
43
43
  async attached() {
44
44
  return (await this.attachedModules()).map((module) => module.address);
45
45
  }
46
- async attachedModules(maxDepth = 2) {
46
+ async attachedModules(maxDepth = 3) {
47
47
  return (await (this.downResolver.resolve("*", {
48
48
  maxDepth
49
49
  }) ?? [])).filter((module) => module.address !== this.address);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AbstractNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport {\n duplicateModules,\n Module,\n ModuleConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryHandlerResult,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport {\n NodeAttachedQuerySchema,\n NodeAttachQuerySchema,\n NodeConfigSchema,\n NodeDetachQuerySchema,\n NodeModule,\n NodeModuleEventData,\n NodeParams,\n NodeQueries,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends AbstractModuleInstance<TParams, TEventData>\n implements NodeModule<TParams, TEventData>, Module<TParams, TEventData>\n{\n static override readonly configSchemas: string[] = [NodeConfigSchema]\n\n protected readonly privateResolver = new CompositeModuleResolver()\n\n private readonly isNode = true\n\n override get queries(): string[] {\n return [NodeAttachQuerySchema, NodeDetachQuerySchema, NodeAttachedQuerySchema, NodeRegisteredQuerySchema, ...super.queries]\n }\n\n protected override get _queryAccountPaths(): Record<NodeQueries['schema'], string> {\n return {\n 'network.xyo.query.node.attach': '1/1',\n 'network.xyo.query.node.attached': '1/2',\n 'network.xyo.query.node.detach': '1/3',\n 'network.xyo.query.node.registered': '1/4',\n }\n }\n\n static isNode(module: unknown) {\n return (module as AbstractNode).isNode\n }\n\n async attached(): Promise<Address[]> {\n return (await this.attachedModules()).map((module) => module.address)\n }\n\n async attachedModules(maxDepth = 2): Promise<ModuleInstance[]> {\n return (await (this.downResolver.resolve('*', { maxDepth }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n override async manifest(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n return await this.manifestHandler(maxDepth, ignoreAddresses)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(\n idOrFilter: ModuleFilter | ModuleIdentifier = '*',\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n //checking type of nameOrAddressOrFilter before calling other functions since TS seems\n //to need help here narrowing before the call\n if (idOrFilter === '*') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate('*', options)\n }\n case 'all': {\n return await this.resolveAll('*', options)\n }\n default: {\n return await super.resolve('*', options)\n }\n }\n }\n if (typeof idOrFilter === 'string') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n } else {\n switch (options?.visibility) {\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n }\n }\n\n protected override async discoverHandler(maxDepth = 5): Promise<Payload[]> {\n const childMods = await this.attachedModules(maxDepth)\n //console.log(`childMods: ${toJsonString(childMods)}`)\n const childModAddresses = await Promise.all(\n childMods.map((mod) =>\n new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address: mod.address, name: mod.config.name }).build(),\n ),\n )\n\n return [...(await super.discoverHandler(maxDepth)), ...childModAddresses]\n }\n\n protected override async manifestHandler(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n const manifest: NodeManifestPayload = { ...(await super.manifestHandler(maxDepth, ignoreAddresses)), schema: NodeManifestPayloadSchema }\n const newIgnoreAddresses = [...ignoreAddresses, this.address]\n\n const notThisModule = (module: ModuleInstance) => module.address !== this.address && !ignoreAddresses.includes(module.address)\n const toManifest = (module: ModuleInstance) => module.manifest(maxDepth - 1, newIgnoreAddresses)\n\n /*const privateModules = await Promise.all((await this.privateResolver.resolve()).filter(notThisModule).map(toManifest))\n if (privateModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.private = privateModules\n }*/\n\n const publicModules = await Promise.all((await this.resolve('*')).filter(notThisModule).map(toManifest))\n if (publicModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.public = publicModules\n }\n\n return manifest\n }\n\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads?: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrapper = await QueryBoundWitnessWrapper.parseQuery<NodeQueries>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n switch (queryPayload.schema) {\n case NodeAttachQuerySchema: {\n const address = await this.attach(queryPayload.nameOrAddress, queryPayload.external)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeDetachQuerySchema: {\n const address = await this.detach(queryPayload.nameOrAddress)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeAttachedQuerySchema: {\n const addresses = await this.attached()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeRegisteredQuerySchema: {\n const addresses = await this.registered()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n default: {\n return await super.queryHandler(query, payloads)\n }\n }\n return resultPayloads\n }\n\n private async resolveAll(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolveAll(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n if (idOrFilter === '*') {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return (await this.resolvePrivate(idOrFilter, options)) ?? (await super.resolve(idOrFilter, options))\n }\n default: {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n }\n }\n\n private async resolvePrivate(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolvePrivate(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n const direction = options?.direction ?? 'all'\n const down = direction === 'down' || direction === 'all'\n if (idOrFilter === '*') {\n return down ? await this.privateResolver.resolve(idOrFilter) : []\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n default: {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n }\n }\n\n abstract attach(id: ModuleIdentifier, external?: boolean): Promisable<Address | undefined>\n abstract detach(id: ModuleIdentifier): Promisable<Address | undefined>\n abstract registered(): Promisable<Address[]>\n}\n"],"mappings":"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","names":["assertEx","AddressSchema","QueryBoundWitnessWrapper","NodeManifestPayloadSchema","AbstractModuleInstance","duplicateModules","CompositeModuleResolver","NodeAttachedQuerySchema","NodeAttachQuerySchema","NodeConfigSchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","PayloadBuilder","AbstractNode","AbstractModuleInstance","configSchemas","NodeConfigSchema","privateResolver","CompositeModuleResolver","isNode","queries","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeAttachedQuerySchema","NodeRegisteredQuerySchema","_queryAccountPaths","module","attached","attachedModules","map","address","maxDepth","downResolver","resolve","filter","manifest","ignoreAddresses","manifestHandler","idOrFilter","options","visibility","resolvePrivate","resolveAll","discoverHandler","childMods","childModAddresses","Promise","all","mod","PayloadBuilder","schema","AddressSchema","fields","name","config","build","NodeManifestPayloadSchema","newIgnoreAddresses","notThisModule","includes","toManifest","publicModules","length","modules","public","queryHandler","query","payloads","queryConfig","wrapper","QueryBoundWitnessWrapper","parseQuery","queryPayload","getQuery","assertEx","queryable","resultPayloads","attach","nameOrAddress","external","payload","push","detach","addresses","registered","duplicateModules","direction","down","undefined"]}
1
+ {"version":3,"sources":["../../src/AbstractNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport {\n duplicateModules,\n Module,\n ModuleConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryHandlerResult,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport {\n NodeAttachedQuerySchema,\n NodeAttachQuerySchema,\n NodeConfigSchema,\n NodeDetachQuerySchema,\n NodeModule,\n NodeModuleEventData,\n NodeParams,\n NodeQueries,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends AbstractModuleInstance<TParams, TEventData>\n implements NodeModule<TParams, TEventData>, Module<TParams, TEventData>\n{\n static override readonly configSchemas: string[] = [NodeConfigSchema]\n\n protected readonly privateResolver = new CompositeModuleResolver()\n\n private readonly isNode = true\n\n override get queries(): string[] {\n return [NodeAttachQuerySchema, NodeDetachQuerySchema, NodeAttachedQuerySchema, NodeRegisteredQuerySchema, ...super.queries]\n }\n\n protected override get _queryAccountPaths(): Record<NodeQueries['schema'], string> {\n return {\n 'network.xyo.query.node.attach': '1/1',\n 'network.xyo.query.node.attached': '1/2',\n 'network.xyo.query.node.detach': '1/3',\n 'network.xyo.query.node.registered': '1/4',\n }\n }\n\n static isNode(module: unknown) {\n return (module as AbstractNode).isNode\n }\n\n async attached(): Promise<Address[]> {\n return (await this.attachedModules()).map((module) => module.address)\n }\n\n async attachedModules(maxDepth = 3): Promise<ModuleInstance[]> {\n return (await (this.downResolver.resolve('*', { maxDepth }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n override async manifest(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n return await this.manifestHandler(maxDepth, ignoreAddresses)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(\n idOrFilter: ModuleFilter | ModuleIdentifier = '*',\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n //checking type of nameOrAddressOrFilter before calling other functions since TS seems\n //to need help here narrowing before the call\n if (idOrFilter === '*') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate('*', options)\n }\n case 'all': {\n return await this.resolveAll('*', options)\n }\n default: {\n return await super.resolve('*', options)\n }\n }\n }\n if (typeof idOrFilter === 'string') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n } else {\n switch (options?.visibility) {\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n }\n }\n\n protected override async discoverHandler(maxDepth = 5): Promise<Payload[]> {\n const childMods = await this.attachedModules(maxDepth)\n //console.log(`childMods: ${toJsonString(childMods)}`)\n const childModAddresses = await Promise.all(\n childMods.map((mod) =>\n new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address: mod.address, name: mod.config.name }).build(),\n ),\n )\n\n return [...(await super.discoverHandler(maxDepth)), ...childModAddresses]\n }\n\n protected override async manifestHandler(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n const manifest: NodeManifestPayload = { ...(await super.manifestHandler(maxDepth, ignoreAddresses)), schema: NodeManifestPayloadSchema }\n const newIgnoreAddresses = [...ignoreAddresses, this.address]\n\n const notThisModule = (module: ModuleInstance) => module.address !== this.address && !ignoreAddresses.includes(module.address)\n const toManifest = (module: ModuleInstance) => module.manifest(maxDepth - 1, newIgnoreAddresses)\n\n /*const privateModules = await Promise.all((await this.privateResolver.resolve()).filter(notThisModule).map(toManifest))\n if (privateModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.private = privateModules\n }*/\n\n const publicModules = await Promise.all((await this.resolve('*')).filter(notThisModule).map(toManifest))\n if (publicModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.public = publicModules\n }\n\n return manifest\n }\n\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads?: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrapper = await QueryBoundWitnessWrapper.parseQuery<NodeQueries>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n switch (queryPayload.schema) {\n case NodeAttachQuerySchema: {\n const address = await this.attach(queryPayload.nameOrAddress, queryPayload.external)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeDetachQuerySchema: {\n const address = await this.detach(queryPayload.nameOrAddress)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeAttachedQuerySchema: {\n const addresses = await this.attached()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeRegisteredQuerySchema: {\n const addresses = await this.registered()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n default: {\n return await super.queryHandler(query, payloads)\n }\n }\n return resultPayloads\n }\n\n private async resolveAll(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolveAll(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n if (idOrFilter === '*') {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return (await this.resolvePrivate(idOrFilter, options)) ?? (await super.resolve(idOrFilter, options))\n }\n default: {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n }\n }\n\n private async resolvePrivate(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolvePrivate(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n const direction = options?.direction ?? 'all'\n const down = direction === 'down' || direction === 'all'\n if (idOrFilter === '*') {\n return down ? await this.privateResolver.resolve(idOrFilter) : []\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n default: {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n }\n }\n\n abstract attach(id: ModuleIdentifier, external?: boolean): Promisable<Address | undefined>\n abstract detach(id: ModuleIdentifier): Promisable<Address | undefined>\n abstract registered(): Promisable<Address[]>\n}\n"],"mappings":"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","names":["assertEx","AddressSchema","QueryBoundWitnessWrapper","NodeManifestPayloadSchema","AbstractModuleInstance","duplicateModules","CompositeModuleResolver","NodeAttachedQuerySchema","NodeAttachQuerySchema","NodeConfigSchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","PayloadBuilder","AbstractNode","AbstractModuleInstance","configSchemas","NodeConfigSchema","privateResolver","CompositeModuleResolver","isNode","queries","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeAttachedQuerySchema","NodeRegisteredQuerySchema","_queryAccountPaths","module","attached","attachedModules","map","address","maxDepth","downResolver","resolve","filter","manifest","ignoreAddresses","manifestHandler","idOrFilter","options","visibility","resolvePrivate","resolveAll","discoverHandler","childMods","childModAddresses","Promise","all","mod","PayloadBuilder","schema","AddressSchema","fields","name","config","build","NodeManifestPayloadSchema","newIgnoreAddresses","notThisModule","includes","toManifest","publicModules","length","modules","public","queryHandler","query","payloads","queryConfig","wrapper","QueryBoundWitnessWrapper","parseQuery","queryPayload","getQuery","assertEx","queryable","resultPayloads","attach","nameOrAddress","external","payload","push","detach","addresses","registered","duplicateModules","direction","down","undefined"]}
@@ -66,7 +66,7 @@ var _AbstractNode = class _AbstractNode extends import_module_abstract.AbstractM
66
66
  async attached() {
67
67
  return (await this.attachedModules()).map((module2) => module2.address);
68
68
  }
69
- async attachedModules(maxDepth = 2) {
69
+ async attachedModules(maxDepth = 3) {
70
70
  return (await (this.downResolver.resolve("*", {
71
71
  maxDepth
72
72
  }) ?? [])).filter((module2) => module2.address !== this.address);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/AbstractNode.ts"],"sourcesContent":["export * from './AbstractNode'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport {\n duplicateModules,\n Module,\n ModuleConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryHandlerResult,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport {\n NodeAttachedQuerySchema,\n NodeAttachQuerySchema,\n NodeConfigSchema,\n NodeDetachQuerySchema,\n NodeModule,\n NodeModuleEventData,\n NodeParams,\n NodeQueries,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends AbstractModuleInstance<TParams, TEventData>\n implements NodeModule<TParams, TEventData>, Module<TParams, TEventData>\n{\n static override readonly configSchemas: string[] = [NodeConfigSchema]\n\n protected readonly privateResolver = new CompositeModuleResolver()\n\n private readonly isNode = true\n\n override get queries(): string[] {\n return [NodeAttachQuerySchema, NodeDetachQuerySchema, NodeAttachedQuerySchema, NodeRegisteredQuerySchema, ...super.queries]\n }\n\n protected override get _queryAccountPaths(): Record<NodeQueries['schema'], string> {\n return {\n 'network.xyo.query.node.attach': '1/1',\n 'network.xyo.query.node.attached': '1/2',\n 'network.xyo.query.node.detach': '1/3',\n 'network.xyo.query.node.registered': '1/4',\n }\n }\n\n static isNode(module: unknown) {\n return (module as AbstractNode).isNode\n }\n\n async attached(): Promise<Address[]> {\n return (await this.attachedModules()).map((module) => module.address)\n }\n\n async attachedModules(maxDepth = 2): Promise<ModuleInstance[]> {\n return (await (this.downResolver.resolve('*', { maxDepth }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n override async manifest(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n return await this.manifestHandler(maxDepth, ignoreAddresses)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(\n idOrFilter: ModuleFilter | ModuleIdentifier = '*',\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n //checking type of nameOrAddressOrFilter before calling other functions since TS seems\n //to need help here narrowing before the call\n if (idOrFilter === '*') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate('*', options)\n }\n case 'all': {\n return await this.resolveAll('*', options)\n }\n default: {\n return await super.resolve('*', options)\n }\n }\n }\n if (typeof idOrFilter === 'string') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n } else {\n switch (options?.visibility) {\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n }\n }\n\n protected override async discoverHandler(maxDepth = 5): Promise<Payload[]> {\n const childMods = await this.attachedModules(maxDepth)\n //console.log(`childMods: ${toJsonString(childMods)}`)\n const childModAddresses = await Promise.all(\n childMods.map((mod) =>\n new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address: mod.address, name: mod.config.name }).build(),\n ),\n )\n\n return [...(await super.discoverHandler(maxDepth)), ...childModAddresses]\n }\n\n protected override async manifestHandler(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n const manifest: NodeManifestPayload = { ...(await super.manifestHandler(maxDepth, ignoreAddresses)), schema: NodeManifestPayloadSchema }\n const newIgnoreAddresses = [...ignoreAddresses, this.address]\n\n const notThisModule = (module: ModuleInstance) => module.address !== this.address && !ignoreAddresses.includes(module.address)\n const toManifest = (module: ModuleInstance) => module.manifest(maxDepth - 1, newIgnoreAddresses)\n\n /*const privateModules = await Promise.all((await this.privateResolver.resolve()).filter(notThisModule).map(toManifest))\n if (privateModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.private = privateModules\n }*/\n\n const publicModules = await Promise.all((await this.resolve('*')).filter(notThisModule).map(toManifest))\n if (publicModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.public = publicModules\n }\n\n return manifest\n }\n\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads?: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrapper = await QueryBoundWitnessWrapper.parseQuery<NodeQueries>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n switch (queryPayload.schema) {\n case NodeAttachQuerySchema: {\n const address = await this.attach(queryPayload.nameOrAddress, queryPayload.external)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeDetachQuerySchema: {\n const address = await this.detach(queryPayload.nameOrAddress)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeAttachedQuerySchema: {\n const addresses = await this.attached()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeRegisteredQuerySchema: {\n const addresses = await this.registered()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n default: {\n return await super.queryHandler(query, payloads)\n }\n }\n return resultPayloads\n }\n\n private async resolveAll(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolveAll(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n if (idOrFilter === '*') {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return (await this.resolvePrivate(idOrFilter, options)) ?? (await super.resolve(idOrFilter, options))\n }\n default: {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n }\n }\n\n private async resolvePrivate(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolvePrivate(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n const direction = options?.direction ?? 'all'\n const down = direction === 'down' || direction === 'all'\n if (idOrFilter === '*') {\n return down ? await this.privateResolver.resolve(idOrFilter) : []\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n default: {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n }\n }\n\n abstract attach(id: ModuleIdentifier, external?: boolean): Promisable<Address | undefined>\n abstract detach(id: ModuleIdentifier): Promisable<Address | undefined>\n abstract registered(): Promisable<Address[]>\n}\n"],"mappings":"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","names":["AbstractNode","AbstractModuleInstance","privateResolver","CompositeModuleResolver","isNode","queries","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeAttachedQuerySchema","NodeRegisteredQuerySchema","_queryAccountPaths","module","attached","attachedModules","map","address","maxDepth","downResolver","resolve","filter","manifest","ignoreAddresses","manifestHandler","idOrFilter","options","visibility","resolvePrivate","resolveAll","discoverHandler","childMods","childModAddresses","Promise","all","mod","PayloadBuilder","schema","AddressSchema","fields","name","config","build","NodeManifestPayloadSchema","newIgnoreAddresses","notThisModule","includes","toManifest","publicModules","length","modules","public","queryHandler","query","payloads","queryConfig","wrapper","QueryBoundWitnessWrapper","parseQuery","queryPayload","getQuery","assertEx","queryable","resultPayloads","attach","nameOrAddress","external","payload","push","detach","addresses","registered","duplicateModules","direction","down","undefined","configSchemas","NodeConfigSchema"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/AbstractNode.ts"],"sourcesContent":["export * from './AbstractNode'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport {\n duplicateModules,\n Module,\n ModuleConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryHandlerResult,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport {\n NodeAttachedQuerySchema,\n NodeAttachQuerySchema,\n NodeConfigSchema,\n NodeDetachQuerySchema,\n NodeModule,\n NodeModuleEventData,\n NodeParams,\n NodeQueries,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends AbstractModuleInstance<TParams, TEventData>\n implements NodeModule<TParams, TEventData>, Module<TParams, TEventData>\n{\n static override readonly configSchemas: string[] = [NodeConfigSchema]\n\n protected readonly privateResolver = new CompositeModuleResolver()\n\n private readonly isNode = true\n\n override get queries(): string[] {\n return [NodeAttachQuerySchema, NodeDetachQuerySchema, NodeAttachedQuerySchema, NodeRegisteredQuerySchema, ...super.queries]\n }\n\n protected override get _queryAccountPaths(): Record<NodeQueries['schema'], string> {\n return {\n 'network.xyo.query.node.attach': '1/1',\n 'network.xyo.query.node.attached': '1/2',\n 'network.xyo.query.node.detach': '1/3',\n 'network.xyo.query.node.registered': '1/4',\n }\n }\n\n static isNode(module: unknown) {\n return (module as AbstractNode).isNode\n }\n\n async attached(): Promise<Address[]> {\n return (await this.attachedModules()).map((module) => module.address)\n }\n\n async attachedModules(maxDepth = 3): Promise<ModuleInstance[]> {\n return (await (this.downResolver.resolve('*', { maxDepth }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n override async manifest(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n return await this.manifestHandler(maxDepth, ignoreAddresses)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(\n idOrFilter: ModuleFilter | ModuleIdentifier = '*',\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n //checking type of nameOrAddressOrFilter before calling other functions since TS seems\n //to need help here narrowing before the call\n if (idOrFilter === '*') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate('*', options)\n }\n case 'all': {\n return await this.resolveAll('*', options)\n }\n default: {\n return await super.resolve('*', options)\n }\n }\n }\n if (typeof idOrFilter === 'string') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n } else {\n switch (options?.visibility) {\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n }\n }\n\n protected override async discoverHandler(maxDepth = 5): Promise<Payload[]> {\n const childMods = await this.attachedModules(maxDepth)\n //console.log(`childMods: ${toJsonString(childMods)}`)\n const childModAddresses = await Promise.all(\n childMods.map((mod) =>\n new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address: mod.address, name: mod.config.name }).build(),\n ),\n )\n\n return [...(await super.discoverHandler(maxDepth)), ...childModAddresses]\n }\n\n protected override async manifestHandler(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n const manifest: NodeManifestPayload = { ...(await super.manifestHandler(maxDepth, ignoreAddresses)), schema: NodeManifestPayloadSchema }\n const newIgnoreAddresses = [...ignoreAddresses, this.address]\n\n const notThisModule = (module: ModuleInstance) => module.address !== this.address && !ignoreAddresses.includes(module.address)\n const toManifest = (module: ModuleInstance) => module.manifest(maxDepth - 1, newIgnoreAddresses)\n\n /*const privateModules = await Promise.all((await this.privateResolver.resolve()).filter(notThisModule).map(toManifest))\n if (privateModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.private = privateModules\n }*/\n\n const publicModules = await Promise.all((await this.resolve('*')).filter(notThisModule).map(toManifest))\n if (publicModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.public = publicModules\n }\n\n return manifest\n }\n\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads?: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrapper = await QueryBoundWitnessWrapper.parseQuery<NodeQueries>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n switch (queryPayload.schema) {\n case NodeAttachQuerySchema: {\n const address = await this.attach(queryPayload.nameOrAddress, queryPayload.external)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeDetachQuerySchema: {\n const address = await this.detach(queryPayload.nameOrAddress)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeAttachedQuerySchema: {\n const addresses = await this.attached()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeRegisteredQuerySchema: {\n const addresses = await this.registered()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n default: {\n return await super.queryHandler(query, payloads)\n }\n }\n return resultPayloads\n }\n\n private async resolveAll(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolveAll(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n if (idOrFilter === '*') {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return (await this.resolvePrivate(idOrFilter, options)) ?? (await super.resolve(idOrFilter, options))\n }\n default: {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n }\n }\n\n private async resolvePrivate(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolvePrivate(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n const direction = options?.direction ?? 'all'\n const down = direction === 'down' || direction === 'all'\n if (idOrFilter === '*') {\n return down ? await this.privateResolver.resolve(idOrFilter) : []\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n default: {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n }\n }\n\n abstract attach(id: ModuleIdentifier, external?: boolean): Promisable<Address | undefined>\n abstract detach(id: ModuleIdentifier): Promisable<Address | undefined>\n abstract registered(): Promisable<Address[]>\n}\n"],"mappings":"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","names":["AbstractNode","AbstractModuleInstance","privateResolver","CompositeModuleResolver","isNode","queries","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeAttachedQuerySchema","NodeRegisteredQuerySchema","_queryAccountPaths","module","attached","attachedModules","map","address","maxDepth","downResolver","resolve","filter","manifest","ignoreAddresses","manifestHandler","idOrFilter","options","visibility","resolvePrivate","resolveAll","discoverHandler","childMods","childModAddresses","Promise","all","mod","PayloadBuilder","schema","AddressSchema","fields","name","config","build","NodeManifestPayloadSchema","newIgnoreAddresses","notThisModule","includes","toManifest","publicModules","length","modules","public","queryHandler","query","payloads","queryConfig","wrapper","QueryBoundWitnessWrapper","parseQuery","queryPayload","getQuery","assertEx","queryable","resultPayloads","attach","nameOrAddress","external","payload","push","detach","addresses","registered","duplicateModules","direction","down","undefined","configSchemas","NodeConfigSchema"]}
@@ -42,7 +42,7 @@ var _AbstractNode = class _AbstractNode extends AbstractModuleInstance {
42
42
  async attached() {
43
43
  return (await this.attachedModules()).map((module) => module.address);
44
44
  }
45
- async attachedModules(maxDepth = 2) {
45
+ async attachedModules(maxDepth = 3) {
46
46
  return (await (this.downResolver.resolve("*", {
47
47
  maxDepth
48
48
  }) ?? [])).filter((module) => module.address !== this.address);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AbstractNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport {\n duplicateModules,\n Module,\n ModuleConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryHandlerResult,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport {\n NodeAttachedQuerySchema,\n NodeAttachQuerySchema,\n NodeConfigSchema,\n NodeDetachQuerySchema,\n NodeModule,\n NodeModuleEventData,\n NodeParams,\n NodeQueries,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends AbstractModuleInstance<TParams, TEventData>\n implements NodeModule<TParams, TEventData>, Module<TParams, TEventData>\n{\n static override readonly configSchemas: string[] = [NodeConfigSchema]\n\n protected readonly privateResolver = new CompositeModuleResolver()\n\n private readonly isNode = true\n\n override get queries(): string[] {\n return [NodeAttachQuerySchema, NodeDetachQuerySchema, NodeAttachedQuerySchema, NodeRegisteredQuerySchema, ...super.queries]\n }\n\n protected override get _queryAccountPaths(): Record<NodeQueries['schema'], string> {\n return {\n 'network.xyo.query.node.attach': '1/1',\n 'network.xyo.query.node.attached': '1/2',\n 'network.xyo.query.node.detach': '1/3',\n 'network.xyo.query.node.registered': '1/4',\n }\n }\n\n static isNode(module: unknown) {\n return (module as AbstractNode).isNode\n }\n\n async attached(): Promise<Address[]> {\n return (await this.attachedModules()).map((module) => module.address)\n }\n\n async attachedModules(maxDepth = 2): Promise<ModuleInstance[]> {\n return (await (this.downResolver.resolve('*', { maxDepth }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n override async manifest(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n return await this.manifestHandler(maxDepth, ignoreAddresses)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(\n idOrFilter: ModuleFilter | ModuleIdentifier = '*',\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n //checking type of nameOrAddressOrFilter before calling other functions since TS seems\n //to need help here narrowing before the call\n if (idOrFilter === '*') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate('*', options)\n }\n case 'all': {\n return await this.resolveAll('*', options)\n }\n default: {\n return await super.resolve('*', options)\n }\n }\n }\n if (typeof idOrFilter === 'string') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n } else {\n switch (options?.visibility) {\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n }\n }\n\n protected override async discoverHandler(maxDepth = 5): Promise<Payload[]> {\n const childMods = await this.attachedModules(maxDepth)\n //console.log(`childMods: ${toJsonString(childMods)}`)\n const childModAddresses = await Promise.all(\n childMods.map((mod) =>\n new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address: mod.address, name: mod.config.name }).build(),\n ),\n )\n\n return [...(await super.discoverHandler(maxDepth)), ...childModAddresses]\n }\n\n protected override async manifestHandler(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n const manifest: NodeManifestPayload = { ...(await super.manifestHandler(maxDepth, ignoreAddresses)), schema: NodeManifestPayloadSchema }\n const newIgnoreAddresses = [...ignoreAddresses, this.address]\n\n const notThisModule = (module: ModuleInstance) => module.address !== this.address && !ignoreAddresses.includes(module.address)\n const toManifest = (module: ModuleInstance) => module.manifest(maxDepth - 1, newIgnoreAddresses)\n\n /*const privateModules = await Promise.all((await this.privateResolver.resolve()).filter(notThisModule).map(toManifest))\n if (privateModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.private = privateModules\n }*/\n\n const publicModules = await Promise.all((await this.resolve('*')).filter(notThisModule).map(toManifest))\n if (publicModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.public = publicModules\n }\n\n return manifest\n }\n\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads?: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrapper = await QueryBoundWitnessWrapper.parseQuery<NodeQueries>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n switch (queryPayload.schema) {\n case NodeAttachQuerySchema: {\n const address = await this.attach(queryPayload.nameOrAddress, queryPayload.external)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeDetachQuerySchema: {\n const address = await this.detach(queryPayload.nameOrAddress)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeAttachedQuerySchema: {\n const addresses = await this.attached()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeRegisteredQuerySchema: {\n const addresses = await this.registered()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n default: {\n return await super.queryHandler(query, payloads)\n }\n }\n return resultPayloads\n }\n\n private async resolveAll(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolveAll(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n if (idOrFilter === '*') {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return (await this.resolvePrivate(idOrFilter, options)) ?? (await super.resolve(idOrFilter, options))\n }\n default: {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n }\n }\n\n private async resolvePrivate(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolvePrivate(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n const direction = options?.direction ?? 'all'\n const down = direction === 'down' || direction === 'all'\n if (idOrFilter === '*') {\n return down ? await this.privateResolver.resolve(idOrFilter) : []\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n default: {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n }\n }\n\n abstract attach(id: ModuleIdentifier, external?: boolean): Promisable<Address | undefined>\n abstract detach(id: ModuleIdentifier): Promisable<Address | undefined>\n abstract registered(): Promisable<Address[]>\n}\n"],"mappings":"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","names":["assertEx","AddressSchema","QueryBoundWitnessWrapper","NodeManifestPayloadSchema","AbstractModuleInstance","duplicateModules","CompositeModuleResolver","NodeAttachedQuerySchema","NodeAttachQuerySchema","NodeConfigSchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","PayloadBuilder","AbstractNode","AbstractModuleInstance","privateResolver","CompositeModuleResolver","isNode","queries","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeAttachedQuerySchema","NodeRegisteredQuerySchema","_queryAccountPaths","module","attached","attachedModules","map","address","maxDepth","downResolver","resolve","filter","manifest","ignoreAddresses","manifestHandler","idOrFilter","options","visibility","resolvePrivate","resolveAll","discoverHandler","childMods","childModAddresses","Promise","all","mod","PayloadBuilder","schema","AddressSchema","fields","name","config","build","NodeManifestPayloadSchema","newIgnoreAddresses","notThisModule","includes","toManifest","publicModules","length","modules","public","queryHandler","query","payloads","queryConfig","wrapper","QueryBoundWitnessWrapper","parseQuery","queryPayload","getQuery","assertEx","queryable","resultPayloads","attach","nameOrAddress","external","payload","push","detach","addresses","registered","duplicateModules","direction","down","undefined","configSchemas","NodeConfigSchema"]}
1
+ {"version":3,"sources":["../../src/AbstractNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload, NodeManifestPayload, NodeManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { AbstractModuleInstance } from '@xyo-network/module-abstract'\nimport {\n duplicateModules,\n Module,\n ModuleConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleQueryHandlerResult,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport {\n NodeAttachedQuerySchema,\n NodeAttachQuerySchema,\n NodeConfigSchema,\n NodeDetachQuerySchema,\n NodeModule,\n NodeModuleEventData,\n NodeParams,\n NodeQueries,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends AbstractModuleInstance<TParams, TEventData>\n implements NodeModule<TParams, TEventData>, Module<TParams, TEventData>\n{\n static override readonly configSchemas: string[] = [NodeConfigSchema]\n\n protected readonly privateResolver = new CompositeModuleResolver()\n\n private readonly isNode = true\n\n override get queries(): string[] {\n return [NodeAttachQuerySchema, NodeDetachQuerySchema, NodeAttachedQuerySchema, NodeRegisteredQuerySchema, ...super.queries]\n }\n\n protected override get _queryAccountPaths(): Record<NodeQueries['schema'], string> {\n return {\n 'network.xyo.query.node.attach': '1/1',\n 'network.xyo.query.node.attached': '1/2',\n 'network.xyo.query.node.detach': '1/3',\n 'network.xyo.query.node.registered': '1/4',\n }\n }\n\n static isNode(module: unknown) {\n return (module as AbstractNode).isNode\n }\n\n async attached(): Promise<Address[]> {\n return (await this.attachedModules()).map((module) => module.address)\n }\n\n async attachedModules(maxDepth = 3): Promise<ModuleInstance[]> {\n return (await (this.downResolver.resolve('*', { maxDepth }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n override async manifest(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n return await this.manifestHandler(maxDepth, ignoreAddresses)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n override async resolve(\n idOrFilter: ModuleFilter | ModuleIdentifier = '*',\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n //checking type of nameOrAddressOrFilter before calling other functions since TS seems\n //to need help here narrowing before the call\n if (idOrFilter === '*') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate('*', options)\n }\n case 'all': {\n return await this.resolveAll('*', options)\n }\n default: {\n return await super.resolve('*', options)\n }\n }\n }\n if (typeof idOrFilter === 'string') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n } else {\n switch (options?.visibility) {\n case 'all': {\n return await this.resolveAll(idOrFilter, options)\n }\n case 'private': {\n return await this.resolvePrivate(idOrFilter, options)\n }\n default: {\n return await super.resolve(idOrFilter, options)\n }\n }\n }\n }\n\n protected override async discoverHandler(maxDepth = 5): Promise<Payload[]> {\n const childMods = await this.attachedModules(maxDepth)\n //console.log(`childMods: ${toJsonString(childMods)}`)\n const childModAddresses = await Promise.all(\n childMods.map((mod) =>\n new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address: mod.address, name: mod.config.name }).build(),\n ),\n )\n\n return [...(await super.discoverHandler(maxDepth)), ...childModAddresses]\n }\n\n protected override async manifestHandler(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {\n const manifest: NodeManifestPayload = { ...(await super.manifestHandler(maxDepth, ignoreAddresses)), schema: NodeManifestPayloadSchema }\n const newIgnoreAddresses = [...ignoreAddresses, this.address]\n\n const notThisModule = (module: ModuleInstance) => module.address !== this.address && !ignoreAddresses.includes(module.address)\n const toManifest = (module: ModuleInstance) => module.manifest(maxDepth - 1, newIgnoreAddresses)\n\n /*const privateModules = await Promise.all((await this.privateResolver.resolve()).filter(notThisModule).map(toManifest))\n if (privateModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.private = privateModules\n }*/\n\n const publicModules = await Promise.all((await this.resolve('*')).filter(notThisModule).map(toManifest))\n if (publicModules.length > 0) {\n manifest.modules = manifest.modules ?? {}\n manifest.modules.public = publicModules\n }\n\n return manifest\n }\n\n protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(\n query: T,\n payloads?: Payload[],\n queryConfig?: TConfig,\n ): Promise<ModuleQueryHandlerResult> {\n const wrapper = await QueryBoundWitnessWrapper.parseQuery<NodeQueries>(query, payloads)\n const queryPayload = await wrapper.getQuery()\n assertEx(await this.queryable(query, payloads, queryConfig))\n const resultPayloads: Payload[] = []\n switch (queryPayload.schema) {\n case NodeAttachQuerySchema: {\n const address = await this.attach(queryPayload.nameOrAddress, queryPayload.external)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeDetachQuerySchema: {\n const address = await this.detach(queryPayload.nameOrAddress)\n if (address) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeAttachedQuerySchema: {\n const addresses = await this.attached()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n case NodeRegisteredQuerySchema: {\n const addresses = await this.registered()\n for (const address of addresses) {\n const payload = await new PayloadBuilder<AddressPayload>({ schema: AddressSchema }).fields({ address }).build()\n resultPayloads.push(payload)\n }\n break\n }\n default: {\n return await super.queryHandler(query, payloads)\n }\n }\n return resultPayloads\n }\n\n private async resolveAll(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolveAll(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolveAll(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n if (idOrFilter === '*') {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return (await this.resolvePrivate(idOrFilter, options)) ?? (await super.resolve(idOrFilter, options))\n }\n default: {\n return [...(await this.resolvePrivate(idOrFilter, options)), ...(await super.resolve(idOrFilter, options))].filter(duplicateModules)\n }\n }\n }\n\n private async resolvePrivate(all: '*', options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(filter: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n private async resolvePrivate(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n private async resolvePrivate(\n idOrFilter: ModuleFilter | ModuleIdentifier,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n const direction = options?.direction ?? 'all'\n const down = direction === 'down' || direction === 'all'\n if (idOrFilter === '*') {\n return down ? await this.privateResolver.resolve(idOrFilter) : []\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n default: {\n return down ? await this.privateResolver.resolve(idOrFilter) : undefined\n }\n }\n }\n\n abstract attach(id: ModuleIdentifier, external?: boolean): Promisable<Address | undefined>\n abstract detach(id: ModuleIdentifier): Promisable<Address | undefined>\n abstract registered(): Promisable<Address[]>\n}\n"],"mappings":"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","names":["assertEx","AddressSchema","QueryBoundWitnessWrapper","NodeManifestPayloadSchema","AbstractModuleInstance","duplicateModules","CompositeModuleResolver","NodeAttachedQuerySchema","NodeAttachQuerySchema","NodeConfigSchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","PayloadBuilder","AbstractNode","AbstractModuleInstance","privateResolver","CompositeModuleResolver","isNode","queries","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeAttachedQuerySchema","NodeRegisteredQuerySchema","_queryAccountPaths","module","attached","attachedModules","map","address","maxDepth","downResolver","resolve","filter","manifest","ignoreAddresses","manifestHandler","idOrFilter","options","visibility","resolvePrivate","resolveAll","discoverHandler","childMods","childModAddresses","Promise","all","mod","PayloadBuilder","schema","AddressSchema","fields","name","config","build","NodeManifestPayloadSchema","newIgnoreAddresses","notThisModule","includes","toManifest","publicModules","length","modules","public","queryHandler","query","payloads","queryConfig","wrapper","QueryBoundWitnessWrapper","parseQuery","queryPayload","getQuery","assertEx","queryable","resultPayloads","attach","nameOrAddress","external","payload","push","detach","addresses","registered","duplicateModules","direction","down","undefined","configSchemas","NodeConfigSchema"]}
package/package.json CHANGED
@@ -13,16 +13,16 @@
13
13
  "@xylabs/assert": "^3.0.24",
14
14
  "@xylabs/hex": "^3.0.24",
15
15
  "@xylabs/promise": "^3.0.24",
16
- "@xyo-network/address-payload-plugin": "~2.93.0-rc.2",
17
- "@xyo-network/boundwitness-model": "~2.93.0-rc.2",
18
- "@xyo-network/boundwitness-wrapper": "~2.93.0-rc.2",
19
- "@xyo-network/manifest-model": "~2.93.0-rc.2",
20
- "@xyo-network/module-abstract": "~2.93.0-rc.2",
21
- "@xyo-network/module-model": "~2.93.0-rc.2",
22
- "@xyo-network/module-resolver": "~2.93.0-rc.2",
23
- "@xyo-network/node-model": "~2.93.0-rc.2",
24
- "@xyo-network/payload-builder": "~2.93.0-rc.2",
25
- "@xyo-network/payload-model": "~2.93.0-rc.2"
16
+ "@xyo-network/address-payload-plugin": "~2.93.1",
17
+ "@xyo-network/boundwitness-model": "~2.93.1",
18
+ "@xyo-network/boundwitness-wrapper": "~2.93.1",
19
+ "@xyo-network/manifest-model": "~2.93.1",
20
+ "@xyo-network/module-abstract": "~2.93.1",
21
+ "@xyo-network/module-model": "~2.93.1",
22
+ "@xyo-network/module-resolver": "~2.93.1",
23
+ "@xyo-network/node-model": "~2.93.1",
24
+ "@xyo-network/payload-builder": "~2.93.1",
25
+ "@xyo-network/payload-model": "~2.93.1"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@xylabs/ts-scripts-yarn3": "^3.5.2",
@@ -68,7 +68,6 @@
68
68
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
69
69
  },
70
70
  "sideEffects": false,
71
- "version": "2.93.0-rc.2",
72
- "type": "module",
73
- "stableVersion": "2.92.11"
71
+ "version": "2.93.1",
72
+ "type": "module"
74
73
  }
@@ -62,7 +62,7 @@ export abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEve
62
62
  return (await this.attachedModules()).map((module) => module.address)
63
63
  }
64
64
 
65
- async attachedModules(maxDepth = 2): Promise<ModuleInstance[]> {
65
+ async attachedModules(maxDepth = 3): Promise<ModuleInstance[]> {
66
66
  return (await (this.downResolver.resolve('*', { maxDepth }) ?? [])).filter((module) => module.address !== this.address)
67
67
  }
68
68