@xyo-network/node-abstract 2.93.1 → 2.93.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/AbstractNode.d.cts +2 -3
- package/dist/browser/AbstractNode.d.cts.map +1 -1
- package/dist/browser/AbstractNode.d.mts +2 -3
- package/dist/browser/AbstractNode.d.mts.map +1 -1
- package/dist/browser/AbstractNode.d.ts +2 -3
- package/dist/browser/AbstractNode.d.ts.map +1 -1
- package/dist/browser/index.cjs +36 -19
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +36 -19
- package/dist/browser/index.js.map +1 -1
- package/dist/node/AbstractNode.d.cts +2 -3
- package/dist/node/AbstractNode.d.cts.map +1 -1
- package/dist/node/AbstractNode.d.mts +2 -3
- package/dist/node/AbstractNode.d.mts.map +1 -1
- package/dist/node/AbstractNode.d.ts +2 -3
- package/dist/node/AbstractNode.d.ts.map +1 -1
- package/dist/node/index.cjs +36 -19
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +36 -19
- package/dist/node/index.js.map +1 -1
- package/package.json +10 -11
- package/src/AbstractNode.ts +27 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractNode.d.ts","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAEnE,OAAO,EAAE,qBAAqB,EAAkD,MAAM,6BAA6B,CAAA;AACnH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAEL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,wBAAwB,EACzB,MAAM,2BAA2B,CAAA;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"AbstractNode.d.ts","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,18 +4,15 @@ import { QueryBoundWitness } from '@xyo-network/boundwitness-model';
|
|
|
4
4
|
import { ModuleManifestPayload } from '@xyo-network/manifest-model';
|
|
5
5
|
import { AbstractModuleInstance } from '@xyo-network/module-abstract';
|
|
6
6
|
import { Module, ModuleConfig, ModuleFilter, ModuleFilterOptions, ModuleIdentifier, ModuleInstance, ModuleQueryHandlerResult } from '@xyo-network/module-model';
|
|
7
|
-
import { CompositeModuleResolver } from '@xyo-network/module-resolver';
|
|
8
7
|
import { NodeModule, NodeModuleEventData, NodeParams, NodeQueries } from '@xyo-network/node-model';
|
|
9
8
|
import { Payload } from '@xyo-network/payload-model';
|
|
10
9
|
export declare abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData> extends AbstractModuleInstance<TParams, TEventData> implements NodeModule<TParams, TEventData>, Module<TParams, TEventData> {
|
|
11
10
|
static readonly configSchemas: string[];
|
|
12
|
-
protected readonly privateResolver: CompositeModuleResolver;
|
|
13
11
|
private readonly isNode;
|
|
14
12
|
get queries(): string[];
|
|
15
13
|
protected get _queryAccountPaths(): Record<NodeQueries['schema'], string>;
|
|
16
14
|
static isNode(module: unknown): boolean;
|
|
17
15
|
attached(): Promise<Address[]>;
|
|
18
|
-
attachedModules(maxDepth?: number): Promise<ModuleInstance[]>;
|
|
19
16
|
manifest(maxDepth?: number, ignoreAddresses?: Address[]): Promise<ModuleManifestPayload>;
|
|
20
17
|
/** @deprecated do not pass undefined. If trying to get all, pass '*' */
|
|
21
18
|
resolve(): Promise<ModuleInstance[]>;
|
|
@@ -24,6 +21,8 @@ export declare abstract class AbstractNode<TParams extends NodeParams = NodePara
|
|
|
24
21
|
resolve(id: ModuleIdentifier, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>;
|
|
25
22
|
/** @deprecated do not pass undefined. If trying to get all, pass '*' */
|
|
26
23
|
resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>;
|
|
24
|
+
protected attachedPrivateModules(maxDepth?: number): Promise<ModuleInstance[]>;
|
|
25
|
+
protected attachedPublicModules(maxDepth?: number): Promise<ModuleInstance[]>;
|
|
27
26
|
protected discoverHandler(maxDepth?: number): Promise<Payload[]>;
|
|
28
27
|
protected manifestHandler(maxDepth?: number, ignoreAddresses?: Address[]): Promise<ModuleManifestPayload>;
|
|
29
28
|
protected queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(query: T, payloads?: Payload[], queryConfig?: TConfig): Promise<ModuleQueryHandlerResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractNode.d.ts","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAEnE,OAAO,EAAE,qBAAqB,EAAkD,MAAM,6BAA6B,CAAA;AACnH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAEL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,wBAAwB,EACzB,MAAM,2BAA2B,CAAA;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"AbstractNode.d.ts","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"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"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -37,11 +37,9 @@ var import_boundwitness_wrapper = require("@xyo-network/boundwitness-wrapper");
|
|
|
37
37
|
var import_manifest_model = require("@xyo-network/manifest-model");
|
|
38
38
|
var import_module_abstract = require("@xyo-network/module-abstract");
|
|
39
39
|
var import_module_model = require("@xyo-network/module-model");
|
|
40
|
-
var import_module_resolver = require("@xyo-network/module-resolver");
|
|
41
40
|
var import_node_model = require("@xyo-network/node-model");
|
|
42
41
|
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
43
42
|
var _AbstractNode = class _AbstractNode extends import_module_abstract.AbstractModuleInstance {
|
|
44
|
-
privateResolver = new import_module_resolver.CompositeModuleResolver();
|
|
45
43
|
isNode = true;
|
|
46
44
|
get queries() {
|
|
47
45
|
return [
|
|
@@ -64,58 +62,73 @@ var _AbstractNode = class _AbstractNode extends import_module_abstract.AbstractM
|
|
|
64
62
|
return module2.isNode;
|
|
65
63
|
}
|
|
66
64
|
async attached() {
|
|
67
|
-
return
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
maxDepth
|
|
72
|
-
}) ?? [])).filter((module2) => module2.address !== this.address);
|
|
65
|
+
return [
|
|
66
|
+
...(await this.attachedPublicModules()).map((module2) => module2.address),
|
|
67
|
+
...(await this.attachedPrivateModules()).map((module2) => module2.address)
|
|
68
|
+
];
|
|
73
69
|
}
|
|
74
70
|
async manifest(maxDepth = 5, ignoreAddresses = []) {
|
|
75
71
|
return await this.manifestHandler(maxDepth, ignoreAddresses);
|
|
76
72
|
}
|
|
77
73
|
async resolve(idOrFilter = "*", options) {
|
|
74
|
+
const { visibility = "all" } = options ?? {};
|
|
75
|
+
const mutatedOptions = {
|
|
76
|
+
...options,
|
|
77
|
+
visibility
|
|
78
|
+
};
|
|
78
79
|
if (idOrFilter === "*") {
|
|
79
80
|
switch (options == null ? void 0 : options.visibility) {
|
|
80
81
|
case "private": {
|
|
81
|
-
return await this.resolvePrivate("*",
|
|
82
|
+
return (await this.resolvePrivate("*", mutatedOptions)).filter((mod) => mod.address !== this.address);
|
|
82
83
|
}
|
|
83
84
|
case "all": {
|
|
84
|
-
return await this.resolveAll("*",
|
|
85
|
+
return (await this.resolveAll("*", mutatedOptions)).filter((mod) => mod.address !== this.address);
|
|
85
86
|
}
|
|
86
87
|
default: {
|
|
87
|
-
return await super.resolve("*",
|
|
88
|
+
return (await super.resolve("*", mutatedOptions)).filter((mod) => mod.address !== this.address);
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
if (typeof idOrFilter === "string") {
|
|
92
93
|
switch (options == null ? void 0 : options.visibility) {
|
|
93
94
|
case "private": {
|
|
94
|
-
return await this.resolvePrivate(idOrFilter,
|
|
95
|
+
return await this.resolvePrivate(idOrFilter, mutatedOptions);
|
|
95
96
|
}
|
|
96
97
|
case "all": {
|
|
97
|
-
return await this.resolveAll(idOrFilter,
|
|
98
|
+
return await this.resolveAll(idOrFilter, mutatedOptions);
|
|
98
99
|
}
|
|
99
100
|
default: {
|
|
100
|
-
return await super.resolve(idOrFilter,
|
|
101
|
+
return await super.resolve(idOrFilter, mutatedOptions);
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
104
|
} else {
|
|
104
105
|
switch (options == null ? void 0 : options.visibility) {
|
|
105
106
|
case "all": {
|
|
106
|
-
return await this.resolveAll(idOrFilter,
|
|
107
|
+
return await this.resolveAll(idOrFilter, mutatedOptions);
|
|
107
108
|
}
|
|
108
109
|
case "private": {
|
|
109
|
-
return await this.resolvePrivate(idOrFilter,
|
|
110
|
+
return await this.resolvePrivate(idOrFilter, mutatedOptions);
|
|
110
111
|
}
|
|
111
112
|
default: {
|
|
112
|
-
return await super.resolve(idOrFilter,
|
|
113
|
+
return await super.resolve(idOrFilter, mutatedOptions);
|
|
113
114
|
}
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
117
|
}
|
|
118
|
+
async attachedPrivateModules(maxDepth = 1) {
|
|
119
|
+
return (await (this.privateResolver.resolve("*", {
|
|
120
|
+
maxDepth,
|
|
121
|
+
visibility: "public"
|
|
122
|
+
}) ?? [])).filter((module2) => module2.address !== this.address);
|
|
123
|
+
}
|
|
124
|
+
async attachedPublicModules(maxDepth = 1) {
|
|
125
|
+
return (await (this.downResolver.resolve("*", {
|
|
126
|
+
maxDepth,
|
|
127
|
+
visibility: "public"
|
|
128
|
+
}) ?? [])).filter((module2) => module2.address !== this.address);
|
|
129
|
+
}
|
|
117
130
|
async discoverHandler(maxDepth = 5) {
|
|
118
|
-
const childMods = await this.
|
|
131
|
+
const childMods = await this.attachedPublicModules(maxDepth);
|
|
119
132
|
const childModAddresses = await Promise.all(childMods.map((mod) => new import_payload_builder.PayloadBuilder({
|
|
120
133
|
schema: import_address_payload_plugin.AddressSchema
|
|
121
134
|
}).fields({
|
|
@@ -138,7 +151,11 @@ var _AbstractNode = class _AbstractNode extends import_module_abstract.AbstractM
|
|
|
138
151
|
];
|
|
139
152
|
const notThisModule = /* @__PURE__ */ __name((module2) => module2.address !== this.address && !ignoreAddresses.includes(module2.address), "notThisModule");
|
|
140
153
|
const toManifest = /* @__PURE__ */ __name((module2) => module2.manifest(maxDepth - 1, newIgnoreAddresses), "toManifest");
|
|
141
|
-
const publicModules = await Promise.all((await this.resolve("*"
|
|
154
|
+
const publicModules = await Promise.all((await this.resolve("*", {
|
|
155
|
+
direction: "down",
|
|
156
|
+
maxDepth: 1,
|
|
157
|
+
visibility: "public"
|
|
158
|
+
})).filter(notThisModule).map(toManifest));
|
|
142
159
|
if (publicModules.length > 0) {
|
|
143
160
|
manifest.modules = manifest.modules ?? {};
|
|
144
161
|
manifest.modules.public = publicModules;
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -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 = 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":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACAA,oBAAyB;AAGzB,oCAA8C;AAE9C,kCAAyC;AACzC,4BAAsF;AACtF,6BAAuC;AACvC,0BASO;AACP,6BAAwC;AACxC,wBAUO;AACP,6BAA+B;AAGxB,IAAeA,gBAAf,MAAeA,sBACZC,8CAAAA;EAKWC,kBAAkB,IAAIC,+CAAAA;EAExBC,SAAS;EAE1B,IAAaC,UAAoB;AAC/B,WAAO;MAACC;MAAuBC;MAAuBC;MAAyBC;SAA8B,MAAMJ;;EACrH;EAEA,IAAuBK,qBAA4D;AACjF,WAAO;MACL,iCAAiC;MACjC,mCAAmC;MACnC,iCAAiC;MACjC,qCAAqC;IACvC;EACF;EAEA,OAAON,OAAOO,SAAiB;AAC7B,WAAQA,QAAwBP;EAClC;EAEA,MAAMQ,WAA+B;AACnC,YAAQ,MAAM,KAAKC,gBAAe,GAAIC,IAAI,CAACH,YAAWA,QAAOI,OAAO;EACtE;EAEA,MAAMF,gBAAgBG,WAAW,GAA8B;AAC7D,YAAQ,OAAO,KAAKC,aAAaC,QAAQ,KAAK;MAAEF;IAAS,CAAA,KAAM,CAAA,IAAKG,OAAO,CAACR,YAAWA,QAAOI,YAAY,KAAKA,OAAO;EACxH;EAEA,MAAeK,SAASJ,WAAW,GAAGK,kBAA6B,CAAA,GAAoC;AACrG,WAAO,MAAM,KAAKC,gBAAgBN,UAAUK,eAAAA;EAC9C;EASA,MAAeH,QACbK,aAA8C,KAC9CC,SACwD;AAGxD,QAAID,eAAe,KAAK;AACtB,cAAQC,mCAASC,YAAAA;QACf,KAAK,WAAW;AACd,iBAAO,MAAM,KAAKC,eAAe,KAAKF,OAAAA;QACxC;QACA,KAAK,OAAO;AACV,iBAAO,MAAM,KAAKG,WAAW,KAAKH,OAAAA;QACpC;QACA,SAAS;AACP,iBAAO,MAAM,MAAMN,QAAQ,KAAKM,OAAAA;QAClC;MACF;IACF;AACA,QAAI,OAAOD,eAAe,UAAU;AAClC,cAAQC,mCAASC,YAAAA;QACf,KAAK,WAAW;AACd,iBAAO,MAAM,KAAKC,eAAeH,YAAYC,OAAAA;QAC/C;QACA,KAAK,OAAO;AACV,iBAAO,MAAM,KAAKG,WAAWJ,YAAYC,OAAAA;QAC3C;QACA,SAAS;AACP,iBAAO,MAAM,MAAMN,QAAQK,YAAYC,OAAAA;QACzC;MACF;IACF,OAAO;AACL,cAAQA,mCAASC,YAAAA;QACf,KAAK,OAAO;AACV,iBAAO,MAAM,KAAKE,WAAWJ,YAAYC,OAAAA;QAC3C;QACA,KAAK,WAAW;AACd,iBAAO,MAAM,KAAKE,eAAeH,YAAYC,OAAAA;QAC/C;QACA,SAAS;AACP,iBAAO,MAAM,MAAMN,QAAQK,YAAYC,OAAAA;QACzC;MACF;IACF;EACF;EAEA,MAAyBI,gBAAgBZ,WAAW,GAAuB;AACzE,UAAMa,YAAY,MAAM,KAAKhB,gBAAgBG,QAAAA;AAE7C,UAAMc,oBAAoB,MAAMC,QAAQC,IACtCH,UAAUf,IAAI,CAACmB,QACb,IAAIC,sCAA+B;MAAEC,QAAQC;IAAc,CAAA,EAAGC,OAAO;MAAEtB,SAASkB,IAAIlB;MAASuB,MAAML,IAAIM,OAAOD;IAAK,CAAA,EAAGE,MAAK,CAAA,CAAA;AAI/H,WAAO;SAAK,MAAM,MAAMZ,gBAAgBZ,QAAAA;SAAec;;EACzD;EAEA,MAAyBR,gBAAgBN,WAAW,GAAGK,kBAA6B,CAAA,GAAoC;AACtH,UAAMD,WAAgC;MAAE,GAAI,MAAM,MAAME,gBAAgBN,UAAUK,eAAAA;MAAmBc,QAAQM;IAA0B;AACvI,UAAMC,qBAAqB;SAAIrB;MAAiB,KAAKN;;AAErD,UAAM4B,gBAAgB,wBAAChC,YAA2BA,QAAOI,YAAY,KAAKA,WAAW,CAACM,gBAAgBuB,SAASjC,QAAOI,OAAO,GAAvG;AACtB,UAAM8B,aAAa,wBAAClC,YAA2BA,QAAOS,SAASJ,WAAW,GAAG0B,kBAAAA,GAA1D;AAQnB,UAAMI,gBAAgB,MAAMf,QAAQC,KAAK,MAAM,KAAKd,QAAQ,GAAA,GAAMC,OAAOwB,aAAAA,EAAe7B,IAAI+B,UAAAA,CAAAA;AAC5F,QAAIC,cAAcC,SAAS,GAAG;AAC5B3B,eAAS4B,UAAU5B,SAAS4B,WAAW,CAAC;AACxC5B,eAAS4B,QAAQC,SAASH;IAC5B;AAEA,WAAO1B;EACT;EAEA,MAAyB8B,aACvBC,OACAC,UACAC,aACmC;AACnC,UAAMC,UAAU,MAAMC,qDAAyBC,WAAwBL,OAAOC,QAAAA;AAC9E,UAAMK,eAAe,MAAMH,QAAQI,SAAQ;AAC3CC,gCAAS,MAAM,KAAKC,UAAUT,OAAOC,UAAUC,WAAAA,CAAAA;AAC/C,UAAMQ,iBAA4B,CAAA;AAClC,YAAQJ,aAAatB,QAAM;MACzB,KAAK7B,yCAAuB;AAC1B,cAAMS,UAAU,MAAM,KAAK+C,OAAOL,aAAaM,eAAeN,aAAaO,QAAQ;AACnF,YAAIjD,SAAS;AACX,gBAAMkD,UAAU,MAAM,IAAI/B,sCAA+B;YAAEC,QAAQC;UAAc,CAAA,EAAGC,OAAO;YAAEtB;UAAQ,CAAA,EAAGyB,MAAK;AAC7GqB,yBAAeK,KAAKD,OAAAA;QACtB;AACA;MACF;MACA,KAAK1D,yCAAuB;AAC1B,cAAMQ,UAAU,MAAM,KAAKoD,OAAOV,aAAaM,aAAa;AAC5D,YAAIhD,SAAS;AACX,gBAAMkD,UAAU,MAAM,IAAI/B,sCAA+B;YAAEC,QAAQC;UAAc,CAAA,EAAGC,OAAO;YAAEtB;UAAQ,CAAA,EAAGyB,MAAK;AAC7GqB,yBAAeK,KAAKD,OAAAA;QACtB;AACA;MACF;MACA,KAAKzD,2CAAyB;AAC5B,cAAM4D,YAAY,MAAM,KAAKxD,SAAQ;AACrC,mBAAWG,WAAWqD,WAAW;AAC/B,gBAAMH,UAAU,MAAM,IAAI/B,sCAA+B;YAAEC,QAAQC;UAAc,CAAA,EAAGC,OAAO;YAAEtB;UAAQ,CAAA,EAAGyB,MAAK;AAC7GqB,yBAAeK,KAAKD,OAAAA;QACtB;AACA;MACF;MACA,KAAKxD,6CAA2B;AAC9B,cAAM2D,YAAY,MAAM,KAAKC,WAAU;AACvC,mBAAWtD,WAAWqD,WAAW;AAC/B,gBAAMH,UAAU,MAAM,IAAI/B,sCAA+B;YAAEC,QAAQC;UAAc,CAAA,EAAGC,OAAO;YAAEtB;UAAQ,CAAA,EAAGyB,MAAK;AAC7GqB,yBAAeK,KAAKD,OAAAA;QACtB;AACA;MACF;MACA,SAAS;AACP,eAAO,MAAM,MAAMf,aAAaC,OAAOC,QAAAA;MACzC;IACF;AACA,WAAOS;EACT;EAKA,MAAclC,WACZJ,YACAC,SACwD;AACxD,QAAID,eAAe,KAAK;AACtB,aAAO;WAAK,MAAM,KAAKG,eAAeH,YAAYC,OAAAA;WAAe,MAAM,MAAMN,QAAQK,YAAYC,OAAAA;QAAWL,OAAOmD,oCAAAA;IACrH;AACA,YAAQ,OAAO/C,YAAAA;MACb,KAAK,UAAU;AACb,eAAQ,MAAM,KAAKG,eAAeH,YAAYC,OAAAA,KAAc,MAAM,MAAMN,QAAQK,YAAYC,OAAAA;MAC9F;MACA,SAAS;AACP,eAAO;aAAK,MAAM,KAAKE,eAAeH,YAAYC,OAAAA;aAAe,MAAM,MAAMN,QAAQK,YAAYC,OAAAA;UAAWL,OAAOmD,oCAAAA;MACrH;IACF;EACF;EAKA,MAAc5C,eACZH,YACAC,SACwD;AACxD,UAAM+C,aAAY/C,mCAAS+C,cAAa;AACxC,UAAMC,OAAOD,cAAc,UAAUA,cAAc;AACnD,QAAIhD,eAAe,KAAK;AACtB,aAAOiD,OAAO,MAAM,KAAKtE,gBAAgBgB,QAAQK,UAAAA,IAAc,CAAA;IACjE;AACA,YAAQ,OAAOA,YAAAA;MACb,KAAK,UAAU;AACb,eAAOiD,OAAO,MAAM,KAAKtE,gBAAgBgB,QAAQK,UAAAA,IAAckD;MACjE;MACA,SAAS;AACP,eAAOD,OAAO,MAAM,KAAKtE,gBAAgBgB,QAAQK,UAAAA,IAAckD;MACjE;IACF;EACF;AAKF;AA3NUxE;AAGR,cAJoBD,eAIK0E,iBAA0B;EAACC;;AAJ/C,IAAe3E,eAAf;","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 {\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 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 [\n ...(await this.attachedPublicModules()).map((module) => module.address),\n ...(await this.attachedPrivateModules()).map((module) => module.address),\n ]\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 const { visibility = 'all' } = options ?? {}\n const mutatedOptions = { ...options, visibility }\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('*', mutatedOptions)).filter((mod) => mod.address !== this.address)\n }\n case 'all': {\n return (await this.resolveAll('*', mutatedOptions)).filter((mod) => mod.address !== this.address)\n }\n default: {\n return (await super.resolve('*', mutatedOptions)).filter((mod) => mod.address !== this.address)\n }\n }\n }\n if (typeof idOrFilter === 'string') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate(idOrFilter, mutatedOptions)\n }\n case 'all': {\n return await this.resolveAll(idOrFilter, mutatedOptions)\n }\n default: {\n return await super.resolve(idOrFilter, mutatedOptions)\n }\n }\n } else {\n switch (options?.visibility) {\n case 'all': {\n return await this.resolveAll(idOrFilter, mutatedOptions)\n }\n case 'private': {\n return await this.resolvePrivate(idOrFilter, mutatedOptions)\n }\n default: {\n return await super.resolve(idOrFilter, mutatedOptions)\n }\n }\n }\n }\n\n protected async attachedPrivateModules(maxDepth = 1): Promise<ModuleInstance[]> {\n return (await (this.privateResolver.resolve('*', { maxDepth, visibility: 'public' }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n protected async attachedPublicModules(maxDepth = 1): Promise<ModuleInstance[]> {\n return (await (this.downResolver.resolve('*', { maxDepth, visibility: 'public' }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n protected override async discoverHandler(maxDepth = 5): Promise<Payload[]> {\n const childMods = await this.attachedPublicModules(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(\n (await this.resolve('*', { direction: 'down', maxDepth: 1, visibility: 'public' })).filter(notThisModule).map(toManifest),\n )\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","isNode","queries","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeAttachedQuerySchema","NodeRegisteredQuerySchema","_queryAccountPaths","module","attached","attachedPublicModules","map","address","attachedPrivateModules","manifest","maxDepth","ignoreAddresses","manifestHandler","resolve","idOrFilter","options","visibility","mutatedOptions","resolvePrivate","filter","mod","resolveAll","privateResolver","downResolver","discoverHandler","childMods","childModAddresses","Promise","all","PayloadBuilder","schema","AddressSchema","fields","name","config","build","NodeManifestPayloadSchema","newIgnoreAddresses","notThisModule","includes","toManifest","publicModules","direction","length","modules","public","queryHandler","query","payloads","queryConfig","wrapper","QueryBoundWitnessWrapper","parseQuery","queryPayload","getQuery","assertEx","queryable","resultPayloads","attach","nameOrAddress","external","payload","push","detach","addresses","registered","duplicateModules","down","undefined","configSchemas","NodeConfigSchema"]}
|
package/dist/node/index.js
CHANGED
|
@@ -13,11 +13,9 @@ import { QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
|
|
|
13
13
|
import { NodeManifestPayloadSchema } from "@xyo-network/manifest-model";
|
|
14
14
|
import { AbstractModuleInstance } from "@xyo-network/module-abstract";
|
|
15
15
|
import { duplicateModules } from "@xyo-network/module-model";
|
|
16
|
-
import { CompositeModuleResolver } from "@xyo-network/module-resolver";
|
|
17
16
|
import { NodeAttachedQuerySchema, NodeAttachQuerySchema, NodeConfigSchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema } from "@xyo-network/node-model";
|
|
18
17
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
19
18
|
var _AbstractNode = class _AbstractNode extends AbstractModuleInstance {
|
|
20
|
-
privateResolver = new CompositeModuleResolver();
|
|
21
19
|
isNode = true;
|
|
22
20
|
get queries() {
|
|
23
21
|
return [
|
|
@@ -40,58 +38,73 @@ var _AbstractNode = class _AbstractNode extends AbstractModuleInstance {
|
|
|
40
38
|
return module.isNode;
|
|
41
39
|
}
|
|
42
40
|
async attached() {
|
|
43
|
-
return
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
maxDepth
|
|
48
|
-
}) ?? [])).filter((module) => module.address !== this.address);
|
|
41
|
+
return [
|
|
42
|
+
...(await this.attachedPublicModules()).map((module) => module.address),
|
|
43
|
+
...(await this.attachedPrivateModules()).map((module) => module.address)
|
|
44
|
+
];
|
|
49
45
|
}
|
|
50
46
|
async manifest(maxDepth = 5, ignoreAddresses = []) {
|
|
51
47
|
return await this.manifestHandler(maxDepth, ignoreAddresses);
|
|
52
48
|
}
|
|
53
49
|
async resolve(idOrFilter = "*", options) {
|
|
50
|
+
const { visibility = "all" } = options ?? {};
|
|
51
|
+
const mutatedOptions = {
|
|
52
|
+
...options,
|
|
53
|
+
visibility
|
|
54
|
+
};
|
|
54
55
|
if (idOrFilter === "*") {
|
|
55
56
|
switch (options == null ? void 0 : options.visibility) {
|
|
56
57
|
case "private": {
|
|
57
|
-
return await this.resolvePrivate("*",
|
|
58
|
+
return (await this.resolvePrivate("*", mutatedOptions)).filter((mod) => mod.address !== this.address);
|
|
58
59
|
}
|
|
59
60
|
case "all": {
|
|
60
|
-
return await this.resolveAll("*",
|
|
61
|
+
return (await this.resolveAll("*", mutatedOptions)).filter((mod) => mod.address !== this.address);
|
|
61
62
|
}
|
|
62
63
|
default: {
|
|
63
|
-
return await super.resolve("*",
|
|
64
|
+
return (await super.resolve("*", mutatedOptions)).filter((mod) => mod.address !== this.address);
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
if (typeof idOrFilter === "string") {
|
|
68
69
|
switch (options == null ? void 0 : options.visibility) {
|
|
69
70
|
case "private": {
|
|
70
|
-
return await this.resolvePrivate(idOrFilter,
|
|
71
|
+
return await this.resolvePrivate(idOrFilter, mutatedOptions);
|
|
71
72
|
}
|
|
72
73
|
case "all": {
|
|
73
|
-
return await this.resolveAll(idOrFilter,
|
|
74
|
+
return await this.resolveAll(idOrFilter, mutatedOptions);
|
|
74
75
|
}
|
|
75
76
|
default: {
|
|
76
|
-
return await super.resolve(idOrFilter,
|
|
77
|
+
return await super.resolve(idOrFilter, mutatedOptions);
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
80
|
} else {
|
|
80
81
|
switch (options == null ? void 0 : options.visibility) {
|
|
81
82
|
case "all": {
|
|
82
|
-
return await this.resolveAll(idOrFilter,
|
|
83
|
+
return await this.resolveAll(idOrFilter, mutatedOptions);
|
|
83
84
|
}
|
|
84
85
|
case "private": {
|
|
85
|
-
return await this.resolvePrivate(idOrFilter,
|
|
86
|
+
return await this.resolvePrivate(idOrFilter, mutatedOptions);
|
|
86
87
|
}
|
|
87
88
|
default: {
|
|
88
|
-
return await super.resolve(idOrFilter,
|
|
89
|
+
return await super.resolve(idOrFilter, mutatedOptions);
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
}
|
|
94
|
+
async attachedPrivateModules(maxDepth = 1) {
|
|
95
|
+
return (await (this.privateResolver.resolve("*", {
|
|
96
|
+
maxDepth,
|
|
97
|
+
visibility: "public"
|
|
98
|
+
}) ?? [])).filter((module) => module.address !== this.address);
|
|
99
|
+
}
|
|
100
|
+
async attachedPublicModules(maxDepth = 1) {
|
|
101
|
+
return (await (this.downResolver.resolve("*", {
|
|
102
|
+
maxDepth,
|
|
103
|
+
visibility: "public"
|
|
104
|
+
}) ?? [])).filter((module) => module.address !== this.address);
|
|
105
|
+
}
|
|
93
106
|
async discoverHandler(maxDepth = 5) {
|
|
94
|
-
const childMods = await this.
|
|
107
|
+
const childMods = await this.attachedPublicModules(maxDepth);
|
|
95
108
|
const childModAddresses = await Promise.all(childMods.map((mod) => new PayloadBuilder({
|
|
96
109
|
schema: AddressSchema
|
|
97
110
|
}).fields({
|
|
@@ -114,7 +127,11 @@ var _AbstractNode = class _AbstractNode extends AbstractModuleInstance {
|
|
|
114
127
|
];
|
|
115
128
|
const notThisModule = /* @__PURE__ */ __name((module) => module.address !== this.address && !ignoreAddresses.includes(module.address), "notThisModule");
|
|
116
129
|
const toManifest = /* @__PURE__ */ __name((module) => module.manifest(maxDepth - 1, newIgnoreAddresses), "toManifest");
|
|
117
|
-
const publicModules = await Promise.all((await this.resolve("*"
|
|
130
|
+
const publicModules = await Promise.all((await this.resolve("*", {
|
|
131
|
+
direction: "down",
|
|
132
|
+
maxDepth: 1,
|
|
133
|
+
visibility: "public"
|
|
134
|
+
})).filter(notThisModule).map(toManifest));
|
|
118
135
|
if (publicModules.length > 0) {
|
|
119
136
|
manifest.modules = manifest.modules ?? {};
|
|
120
137
|
manifest.modules.public = publicModules;
|
package/dist/node/index.js.map
CHANGED
|
@@ -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 = 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"]}
|
|
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 {\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 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 [\n ...(await this.attachedPublicModules()).map((module) => module.address),\n ...(await this.attachedPrivateModules()).map((module) => module.address),\n ]\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 const { visibility = 'all' } = options ?? {}\n const mutatedOptions = { ...options, visibility }\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('*', mutatedOptions)).filter((mod) => mod.address !== this.address)\n }\n case 'all': {\n return (await this.resolveAll('*', mutatedOptions)).filter((mod) => mod.address !== this.address)\n }\n default: {\n return (await super.resolve('*', mutatedOptions)).filter((mod) => mod.address !== this.address)\n }\n }\n }\n if (typeof idOrFilter === 'string') {\n switch (options?.visibility) {\n case 'private': {\n return await this.resolvePrivate(idOrFilter, mutatedOptions)\n }\n case 'all': {\n return await this.resolveAll(idOrFilter, mutatedOptions)\n }\n default: {\n return await super.resolve(idOrFilter, mutatedOptions)\n }\n }\n } else {\n switch (options?.visibility) {\n case 'all': {\n return await this.resolveAll(idOrFilter, mutatedOptions)\n }\n case 'private': {\n return await this.resolvePrivate(idOrFilter, mutatedOptions)\n }\n default: {\n return await super.resolve(idOrFilter, mutatedOptions)\n }\n }\n }\n }\n\n protected async attachedPrivateModules(maxDepth = 1): Promise<ModuleInstance[]> {\n return (await (this.privateResolver.resolve('*', { maxDepth, visibility: 'public' }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n protected async attachedPublicModules(maxDepth = 1): Promise<ModuleInstance[]> {\n return (await (this.downResolver.resolve('*', { maxDepth, visibility: 'public' }) ?? [])).filter((module) => module.address !== this.address)\n }\n\n protected override async discoverHandler(maxDepth = 5): Promise<Payload[]> {\n const childMods = await this.attachedPublicModules(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(\n (await this.resolve('*', { direction: 'down', maxDepth: 1, visibility: 'public' })).filter(notThisModule).map(toManifest),\n )\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","NodeAttachedQuerySchema","NodeAttachQuerySchema","NodeConfigSchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","PayloadBuilder","AbstractNode","AbstractModuleInstance","isNode","queries","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeAttachedQuerySchema","NodeRegisteredQuerySchema","_queryAccountPaths","module","attached","attachedPublicModules","map","address","attachedPrivateModules","manifest","maxDepth","ignoreAddresses","manifestHandler","resolve","idOrFilter","options","visibility","mutatedOptions","resolvePrivate","filter","mod","resolveAll","privateResolver","downResolver","discoverHandler","childMods","childModAddresses","Promise","all","PayloadBuilder","schema","AddressSchema","fields","name","config","build","NodeManifestPayloadSchema","newIgnoreAddresses","notThisModule","includes","toManifest","publicModules","direction","length","modules","public","queryHandler","query","payloads","queryConfig","wrapper","QueryBoundWitnessWrapper","parseQuery","queryPayload","getQuery","assertEx","queryable","resultPayloads","attach","nameOrAddress","external","payload","push","detach","addresses","registered","duplicateModules","down","undefined","configSchemas","NodeConfigSchema"]}
|
package/package.json
CHANGED
|
@@ -13,16 +13,15 @@
|
|
|
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.
|
|
17
|
-
"@xyo-network/boundwitness-model": "~2.93.
|
|
18
|
-
"@xyo-network/boundwitness-wrapper": "~2.93.
|
|
19
|
-
"@xyo-network/manifest-model": "~2.93.
|
|
20
|
-
"@xyo-network/module-abstract": "~2.93.
|
|
21
|
-
"@xyo-network/module-model": "~2.93.
|
|
22
|
-
"@xyo-network/
|
|
23
|
-
"@xyo-network/
|
|
24
|
-
"@xyo-network/payload-
|
|
25
|
-
"@xyo-network/payload-model": "~2.93.1"
|
|
16
|
+
"@xyo-network/address-payload-plugin": "~2.93.2",
|
|
17
|
+
"@xyo-network/boundwitness-model": "~2.93.2",
|
|
18
|
+
"@xyo-network/boundwitness-wrapper": "~2.93.2",
|
|
19
|
+
"@xyo-network/manifest-model": "~2.93.2",
|
|
20
|
+
"@xyo-network/module-abstract": "~2.93.2",
|
|
21
|
+
"@xyo-network/module-model": "~2.93.2",
|
|
22
|
+
"@xyo-network/node-model": "~2.93.2",
|
|
23
|
+
"@xyo-network/payload-builder": "~2.93.2",
|
|
24
|
+
"@xyo-network/payload-model": "~2.93.2"
|
|
26
25
|
},
|
|
27
26
|
"devDependencies": {
|
|
28
27
|
"@xylabs/ts-scripts-yarn3": "^3.5.2",
|
|
@@ -68,6 +67,6 @@
|
|
|
68
67
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
69
68
|
},
|
|
70
69
|
"sideEffects": false,
|
|
71
|
-
"version": "2.93.
|
|
70
|
+
"version": "2.93.2",
|
|
72
71
|
"type": "module"
|
|
73
72
|
}
|
package/src/AbstractNode.ts
CHANGED
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
ModuleInstance,
|
|
17
17
|
ModuleQueryHandlerResult,
|
|
18
18
|
} from '@xyo-network/module-model'
|
|
19
|
-
import { CompositeModuleResolver } from '@xyo-network/module-resolver'
|
|
20
19
|
import {
|
|
21
20
|
NodeAttachedQuerySchema,
|
|
22
21
|
NodeAttachQuerySchema,
|
|
@@ -37,8 +36,6 @@ export abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEve
|
|
|
37
36
|
{
|
|
38
37
|
static override readonly configSchemas: string[] = [NodeConfigSchema]
|
|
39
38
|
|
|
40
|
-
protected readonly privateResolver = new CompositeModuleResolver()
|
|
41
|
-
|
|
42
39
|
private readonly isNode = true
|
|
43
40
|
|
|
44
41
|
override get queries(): string[] {
|
|
@@ -59,11 +56,10 @@ export abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEve
|
|
|
59
56
|
}
|
|
60
57
|
|
|
61
58
|
async attached(): Promise<Address[]> {
|
|
62
|
-
return
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return (await (this.downResolver.resolve('*', { maxDepth }) ?? [])).filter((module) => module.address !== this.address)
|
|
59
|
+
return [
|
|
60
|
+
...(await this.attachedPublicModules()).map((module) => module.address),
|
|
61
|
+
...(await this.attachedPrivateModules()).map((module) => module.address),
|
|
62
|
+
]
|
|
67
63
|
}
|
|
68
64
|
|
|
69
65
|
override async manifest(maxDepth = 5, ignoreAddresses: Address[] = []): Promise<ModuleManifestPayload> {
|
|
@@ -81,50 +77,60 @@ export abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEve
|
|
|
81
77
|
idOrFilter: ModuleFilter | ModuleIdentifier = '*',
|
|
82
78
|
options?: ModuleFilterOptions,
|
|
83
79
|
): Promise<ModuleInstance | ModuleInstance[] | undefined> {
|
|
80
|
+
const { visibility = 'all' } = options ?? {}
|
|
81
|
+
const mutatedOptions = { ...options, visibility }
|
|
84
82
|
//checking type of nameOrAddressOrFilter before calling other functions since TS seems
|
|
85
83
|
//to need help here narrowing before the call
|
|
86
84
|
if (idOrFilter === '*') {
|
|
87
85
|
switch (options?.visibility) {
|
|
88
86
|
case 'private': {
|
|
89
|
-
return await this.resolvePrivate('*',
|
|
87
|
+
return (await this.resolvePrivate('*', mutatedOptions)).filter((mod) => mod.address !== this.address)
|
|
90
88
|
}
|
|
91
89
|
case 'all': {
|
|
92
|
-
return await this.resolveAll('*',
|
|
90
|
+
return (await this.resolveAll('*', mutatedOptions)).filter((mod) => mod.address !== this.address)
|
|
93
91
|
}
|
|
94
92
|
default: {
|
|
95
|
-
return await super.resolve('*',
|
|
93
|
+
return (await super.resolve('*', mutatedOptions)).filter((mod) => mod.address !== this.address)
|
|
96
94
|
}
|
|
97
95
|
}
|
|
98
96
|
}
|
|
99
97
|
if (typeof idOrFilter === 'string') {
|
|
100
98
|
switch (options?.visibility) {
|
|
101
99
|
case 'private': {
|
|
102
|
-
return await this.resolvePrivate(idOrFilter,
|
|
100
|
+
return await this.resolvePrivate(idOrFilter, mutatedOptions)
|
|
103
101
|
}
|
|
104
102
|
case 'all': {
|
|
105
|
-
return await this.resolveAll(idOrFilter,
|
|
103
|
+
return await this.resolveAll(idOrFilter, mutatedOptions)
|
|
106
104
|
}
|
|
107
105
|
default: {
|
|
108
|
-
return await super.resolve(idOrFilter,
|
|
106
|
+
return await super.resolve(idOrFilter, mutatedOptions)
|
|
109
107
|
}
|
|
110
108
|
}
|
|
111
109
|
} else {
|
|
112
110
|
switch (options?.visibility) {
|
|
113
111
|
case 'all': {
|
|
114
|
-
return await this.resolveAll(idOrFilter,
|
|
112
|
+
return await this.resolveAll(idOrFilter, mutatedOptions)
|
|
115
113
|
}
|
|
116
114
|
case 'private': {
|
|
117
|
-
return await this.resolvePrivate(idOrFilter,
|
|
115
|
+
return await this.resolvePrivate(idOrFilter, mutatedOptions)
|
|
118
116
|
}
|
|
119
117
|
default: {
|
|
120
|
-
return await super.resolve(idOrFilter,
|
|
118
|
+
return await super.resolve(idOrFilter, mutatedOptions)
|
|
121
119
|
}
|
|
122
120
|
}
|
|
123
121
|
}
|
|
124
122
|
}
|
|
125
123
|
|
|
124
|
+
protected async attachedPrivateModules(maxDepth = 1): Promise<ModuleInstance[]> {
|
|
125
|
+
return (await (this.privateResolver.resolve('*', { maxDepth, visibility: 'public' }) ?? [])).filter((module) => module.address !== this.address)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
protected async attachedPublicModules(maxDepth = 1): Promise<ModuleInstance[]> {
|
|
129
|
+
return (await (this.downResolver.resolve('*', { maxDepth, visibility: 'public' }) ?? [])).filter((module) => module.address !== this.address)
|
|
130
|
+
}
|
|
131
|
+
|
|
126
132
|
protected override async discoverHandler(maxDepth = 5): Promise<Payload[]> {
|
|
127
|
-
const childMods = await this.
|
|
133
|
+
const childMods = await this.attachedPublicModules(maxDepth)
|
|
128
134
|
//console.log(`childMods: ${toJsonString(childMods)}`)
|
|
129
135
|
const childModAddresses = await Promise.all(
|
|
130
136
|
childMods.map((mod) =>
|
|
@@ -148,7 +154,9 @@ export abstract class AbstractNode<TParams extends NodeParams = NodeParams, TEve
|
|
|
148
154
|
manifest.modules.private = privateModules
|
|
149
155
|
}*/
|
|
150
156
|
|
|
151
|
-
const publicModules = await Promise.all(
|
|
157
|
+
const publicModules = await Promise.all(
|
|
158
|
+
(await this.resolve('*', { direction: 'down', maxDepth: 1, visibility: 'public' })).filter(notThisModule).map(toManifest),
|
|
159
|
+
)
|
|
152
160
|
if (publicModules.length > 0) {
|
|
153
161
|
manifest.modules = manifest.modules ?? {}
|
|
154
162
|
manifest.modules.public = publicModules
|