@xyo-network/node 2.48.0 → 2.49.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,18 @@
1
1
  import { assertEx } from '@xylabs/assert';
2
2
  import { Account } from '@xyo-network/account';
3
3
  import { AddressSchema } from '@xyo-network/address-payload-plugin';
4
- import { AbstractModule, CompositeModuleResolver, ModuleQueriedEvent, QueryBoundWitnessWrapper, XyoErrorBuilder, } from '@xyo-network/module';
4
+ import { AbstractModule, CompositeModuleResolver, duplicateModules, ModuleQueriedEvent, QueryBoundWitnessWrapper, XyoErrorBuilder, } from '@xyo-network/module';
5
5
  import { XyoPayloadBuilder } from '@xyo-network/payload-builder';
6
6
  import { NodeConfigSchema } from './Config';
7
7
  import { ModuleAttachedEvent, ModuleDetachedEvent, ModuleRegisteredEvent, } from './Events';
8
8
  import { XyoNodeAttachedQuerySchema, XyoNodeAttachQuerySchema, XyoNodeDetachQuerySchema, XyoNodeRegisteredQuerySchema } from './Queries';
9
9
  export class AbstractNode extends AbstractModule {
10
10
  static configSchema = NodeConfigSchema;
11
- internalResolver = new CompositeModuleResolver();
12
11
  moduleAttachedEventListeners = [];
13
12
  moduleDetachedEventListeners = [];
14
13
  moduleQueriedEventListeners = [];
15
14
  moduleRegisteredEventListeners = [];
15
+ privateResolver = new CompositeModuleResolver();
16
16
  isNode = true;
17
17
  constructor(params) {
18
18
  super(params);
@@ -33,7 +33,7 @@ export class AbstractNode extends AbstractModule {
33
33
  return (await this.attachedModules()).map((module) => module.address);
34
34
  }
35
35
  async attachedModules() {
36
- return await (this.internalResolver.resolve() ?? []);
36
+ return await (this.privateResolver.resolve() ?? []);
37
37
  }
38
38
  async discover() {
39
39
  const childMods = await this.attachedModules();
@@ -108,23 +108,6 @@ export class AbstractNode extends AbstractModule {
108
108
  registeredModules() {
109
109
  throw new Error('Method not implemented.');
110
110
  }
111
- async resolve(filter) {
112
- return (await this.internalResolver.resolve(filter)) ?? super.resolve(filter) ?? [];
113
- }
114
- /**
115
- * Resolves the supplied filter into wrapped modules
116
- * @example <caption>Example using ArchivistWrapper</caption>
117
- * const filter = { address: [address] }
118
- * const mods: ArchivistWrapper[] = await node.resolveWrapped(ArchivistWrapper, filter)
119
- * @param wrapper The ModuleWrapper class (ArchivistWrapper,
120
- * DivinerWrapper, etc.)
121
- * @param filter The ModuleFilter
122
- * @returns An array of ModuleWrapper instances corresponding to
123
- * the underlying modules matching the supplied filter
124
- */
125
- async resolveWrapped(wrapper, filter) {
126
- return (await this.resolve(filter)).map((mod) => new wrapper(mod));
127
- }
128
111
  async start() {
129
112
  await super.start();
130
113
  return this;
@@ -132,6 +115,9 @@ export class AbstractNode extends AbstractModule {
132
115
  unregister(_module) {
133
116
  throw new Error('Method not implemented.');
134
117
  }
118
+ async resolve(filter) {
119
+ return [...(await this.privateResolver.resolve(filter)), ...(await super.resolve(filter))].filter(duplicateModules);
120
+ }
135
121
  }
136
122
  /** @deprecated use AbstractNode instead */
137
123
  export class XyoNode extends AbstractNode {
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractNode.js","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AbstractNode.js","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"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"}
@@ -6,60 +6,58 @@ import { AbstractNode } from './AbstractNode';
6
6
  import { NodeConfigSchema } from './Config';
7
7
  export class MemoryNode extends AbstractNode {
8
8
  static configSchema = NodeConfigSchema;
9
- registeredModuleMap = new Map();
9
+ registeredModuleMap = {};
10
10
  static async create(params) {
11
11
  return (await super.create(params));
12
12
  }
13
13
  async attach(address, external) {
14
14
  const existingModule = (await this.resolve({ address: [address] })).pop();
15
15
  assertEx(!existingModule, `Module [${existingModule?.config.name ?? existingModule?.address}] already attached at address [${address}]`);
16
- const module = assertEx(this.registeredModuleMap.get(address), 'No module registered at that address');
17
- this.internalResolver.addResolver(module.resolver);
16
+ const module = assertEx(this.registeredModuleMap[address], 'No module registered at that address');
17
+ this.privateResolver.addResolver(module.downResolver);
18
18
  //give it inside access
19
- module.parentResolver?.addResolver?.(this.internalResolver);
19
+ module.upResolver.addResolver?.(this.privateResolver);
20
20
  //give it outside access
21
- if (this.parentResolver) {
22
- module.parentResolver?.addResolver?.(this.parentResolver);
23
- }
21
+ module.upResolver.addResolver?.(this.upResolver);
24
22
  if (external) {
25
23
  //expose it externally
26
- this.resolver.addResolver(module.resolver);
24
+ this.downResolver.addResolver(module.downResolver);
27
25
  }
28
26
  const args = { module, name: module.config.name };
29
27
  this.moduleAttachedEventListeners?.map((listener) => listener(args));
30
28
  }
31
29
  detach(address) {
32
- const module = assertEx(this.registeredModuleMap.get(address), 'No module found at that address');
33
- this.internalResolver.removeResolver(module.resolver);
34
- //remove outside access
35
- module.parentResolver?.removeResolver?.(this.parentResolver);
30
+ const module = assertEx(this.registeredModuleMap[address], 'No module found at that address');
31
+ this.privateResolver.removeResolver(module.downResolver);
36
32
  //remove inside access
37
- module.parentResolver?.removeResolver?.(this.internalResolver);
33
+ module.upResolver?.removeResolver?.(this.privateResolver);
34
+ //remove outside access
35
+ module.upResolver?.removeResolver?.(this.upResolver);
38
36
  //remove external exposure
39
- this.resolver.removeResolver(module.resolver);
37
+ this.downResolver.removeResolver(module.downResolver);
40
38
  const args = { module, name: module.config.name };
41
39
  this.moduleDetachedEventListeners?.map((listener) => listener(args));
42
40
  }
43
41
  register(module) {
44
- assertEx(!this.registeredModuleMap.get(module.address), `Module already registered at that address[${module.address}]`);
45
- this.registeredModuleMap.set(module.address, module);
42
+ assertEx(!this.registeredModuleMap[module.address], `Module already registered at that address[${module.address}]`);
43
+ this.registeredModuleMap[module.address] = module;
46
44
  return this;
47
45
  }
48
46
  registered() {
49
- return Array.from(this.registeredModuleMap.keys()).map((key) => {
47
+ return Object.keys(this.registeredModuleMap).map((key) => {
50
48
  return key;
51
49
  });
52
50
  }
53
51
  registeredModules() {
54
- return Array.from(this.registeredModuleMap.values()).map((value) => {
52
+ return Object.values(this.registeredModuleMap).map((value) => {
55
53
  return value;
56
54
  });
57
55
  }
58
56
  async resolve(filter) {
59
- const internal = this.internalResolver.resolve(filter);
60
- const external = this.parentResolver?.resolve(filter) || [];
61
- const local = this.resolver?.resolve(filter) || [];
62
- const resolved = await Promise.allSettled([internal, external, local]);
57
+ const internal = this.privateResolver.resolve(filter);
58
+ const up = this.upResolver?.resolve(filter) || [];
59
+ const down = this.downResolver?.resolve(filter) || [];
60
+ const resolved = await Promise.allSettled([internal, up, down]);
63
61
  const errors = resolved.filter(rejected).map((r) => Error(r.reason));
64
62
  if (errors.length) {
65
63
  this.logger?.error(`Resolve Errors: ${JSON.stringify(errors, null, 2)}`);
@@ -73,7 +71,7 @@ export class MemoryNode extends AbstractNode {
73
71
  }
74
72
  unregister(module) {
75
73
  this.detach(module.address);
76
- this.registeredModuleMap.delete(module.address);
74
+ delete this.registeredModuleMap[module.address];
77
75
  return this;
78
76
  }
79
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryNode.js","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MemoryNode.js","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAwB,MAAM,qBAAqB,CAAA;AAE5E,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAc,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAIvD,MAAM,OAAO,UAAoD,SAAQ,YAAqB;IAC5F,MAAM,CAAU,YAAY,GAAG,gBAAgB,CAAA;IAEvC,mBAAmB,GAA2B,EAAE,CAAA;IAExD,MAAM,CAAU,KAAK,CAAC,MAAM,CAAC,MAAkC;QAC7D,OAAO,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAe,CAAA;IACnD,CAAC;IAEQ,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,QAAkB;QACvD,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;QACzE,QAAQ,CAAC,CAAC,cAAc,EAAE,WAAW,cAAc,EAAE,MAAM,CAAC,IAAI,IAAI,cAAc,EAAE,OAAO,kCAAkC,OAAO,GAAG,CAAC,CAAA;QACxI,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,sCAAsC,CAAC,CAAA;QAElG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAErD,uBAAuB;QACvB,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAErD,wBAAwB;QACxB,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAEhD,IAAI,QAAQ,EAAE;YACZ,sBAAsB;YACtB,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;SACnD;QAED,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QACjD,IAAI,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IACtE,CAAC;IAEQ,MAAM,CAAC,OAAe;QAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,iCAAiC,CAAC,CAAA;QAE7F,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAExD,sBAAsB;QACtB,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAEzD,uBAAuB;QACvB,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAEpD,0BAA0B;QAC1B,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAErD,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QACjD,IAAI,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IACtE,CAAC;IAEQ,QAAQ,CAAC,MAAc;QAC9B,QAAQ,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,6CAA6C,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;QACnH,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAA;QACjD,OAAO,IAAI,CAAA;IACb,CAAC;IAEQ,UAAU;QACjB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACvD,OAAO,GAAG,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAEQ,iBAAiB;QACxB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3D,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;IACJ,CAAC;IAEQ,KAAK,CAAC,OAAO,CAAC,MAAqB;QAC1C,MAAM,QAAQ,GAAsB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACxE,MAAM,EAAE,GAAsB,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QACpE,MAAM,IAAI,GAAsB,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QACxE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA;QAE/D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QAEpE,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;SACzE;QAED,OAAO,QAAQ;aACZ,MAAM,CAAC,SAAS,CAAC;aACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aACnB,IAAI,EAAE;aACN,MAAM,CAAC,MAAM,CAAC;aACd,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAC7B,CAAC;IAEQ,UAAU,CAAC,MAAc;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAA;IACb,CAAC"}
@@ -12,9 +12,6 @@ export class NodeWrapper extends ModuleWrapper {
12
12
  this._archivist = this._archivist ?? new ArchivistWrapper(this.module);
13
13
  return this._archivist;
14
14
  }
15
- get parentResolver() {
16
- return this.module.parentResolver;
17
- }
18
15
  static tryWrap(module) {
19
16
  const missingRequiredQueries = this.missingRequiredQueries(module);
20
17
  if (missingRequiredQueries.length > 0) {
@@ -45,8 +42,5 @@ export class NodeWrapper extends ModuleWrapper {
45
42
  const payloads = (await this.sendQuery(queryPayload)).filter(isXyoPayloadOfSchemaType(AddressSchema));
46
43
  return payloads.map((p) => p.address);
47
44
  }
48
- resolve(filter) {
49
- return this.module.resolve(filter);
50
- }
51
45
  }
52
46
  //# sourceMappingURL=NodeWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeWrapper.js","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NodeWrapper.js","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,27 @@
1
- import { AbstractModule, CompositeModuleResolver, EventListener, Module, ModuleConfig, ModuleConstructable, ModuleFilter, ModuleParams, ModuleQueriedEvent, ModuleQueriedEventArgs, ModuleQueriedEventEmitter, ModuleQueryResult, ModuleWrapper, XyoQueryBoundWitness } from '@xyo-network/module';
1
+ import { AbstractModule, CompositeModuleResolver, EventListener, Module, ModuleConfig, ModuleFilter, ModuleParams, ModuleQueriedEvent, ModuleQueriedEventArgs, ModuleQueriedEventEmitter, ModuleQueryResult, XyoQueryBoundWitness } from '@xyo-network/module';
2
2
  import { XyoPayload } from '@xyo-network/payload-model';
3
3
  import { Promisable } from '@xyo-network/promise';
4
4
  import { NodeConfig } from './Config';
5
5
  import { ModuleAttachedEvent, ModuleAttachedEventArgs, ModuleAttachedEventEmitter, ModuleDetachedEvent, ModuleDetachedEventArgs, ModuleDetachedEventEmitter, ModuleRegisteredEvent, ModuleRegisteredEventArgs, ModuleRegisteredEventEmitter } from './Events';
6
6
  import { NodeModule } from './Node';
7
- export type AbstractNodeParams<TConfig extends NodeConfig = NodeConfig> = ModuleParams<TConfig, {
8
- internalResolver?: CompositeModuleResolver;
9
- }>;
7
+ export type AbstractNodeParams<TConfig extends NodeConfig = NodeConfig> = ModuleParams<TConfig>;
10
8
  export declare abstract class AbstractNode<TConfig extends NodeConfig = NodeConfig> extends AbstractModule<TConfig> implements NodeModule, ModuleAttachedEventEmitter, ModuleDetachedEventEmitter, ModuleRegisteredEventEmitter, ModuleQueriedEventEmitter {
11
9
  static readonly configSchema: "network.xyo.node.config";
12
- protected readonly internalResolver: CompositeModuleResolver<Module<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
10
+ protected readonly moduleAttachedEventListeners: EventListener<ModuleAttachedEventArgs>[];
11
+ protected readonly moduleDetachedEventListeners: EventListener<ModuleDetachedEventArgs>[];
12
+ protected readonly moduleQueriedEventListeners: EventListener<ModuleQueriedEventArgs>[];
13
+ protected readonly moduleRegisteredEventListeners: EventListener<ModuleRegisteredEventArgs>[];
14
+ protected readonly privateResolver: CompositeModuleResolver<Module<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
13
15
  name?: string | undefined;
14
16
  security?: {
15
17
  allowAnonymous?: boolean | undefined;
16
18
  allowed?: Record<string, (string | import("@xyo-network/module").CosigningAddressSet)[]> | undefined;
17
19
  disallowed?: Record<string, string[]> | undefined;
18
20
  } | undefined;
21
+ storeQueries?: boolean | undefined;
19
22
  } & {
20
23
  schema: string;
21
24
  }>>;
22
- protected readonly moduleAttachedEventListeners: EventListener<ModuleAttachedEventArgs>[];
23
- protected readonly moduleDetachedEventListeners: EventListener<ModuleDetachedEventArgs>[];
24
- protected readonly moduleQueriedEventListeners: EventListener<ModuleQueriedEventArgs>[];
25
- protected readonly moduleRegisteredEventListeners: EventListener<ModuleRegisteredEventArgs>[];
26
25
  private readonly isNode;
27
26
  protected constructor(params: AbstractNodeParams<TConfig>);
28
27
  get isModuleResolver(): boolean;
@@ -40,21 +39,9 @@ export declare abstract class AbstractNode<TConfig extends NodeConfig = NodeConf
40
39
  register(_module: Module): Promisable<this>;
41
40
  registered(): Promisable<string[]>;
42
41
  registeredModules(): Promisable<Module[]>;
43
- resolve(filter?: ModuleFilter): Promise<Module[]>;
44
- /**
45
- * Resolves the supplied filter into wrapped modules
46
- * @example <caption>Example using ArchivistWrapper</caption>
47
- * const filter = { address: [address] }
48
- * const mods: ArchivistWrapper[] = await node.resolveWrapped(ArchivistWrapper, filter)
49
- * @param wrapper The ModuleWrapper class (ArchivistWrapper,
50
- * DivinerWrapper, etc.)
51
- * @param filter The ModuleFilter
52
- * @returns An array of ModuleWrapper instances corresponding to
53
- * the underlying modules matching the supplied filter
54
- */
55
- resolveWrapped<T extends ModuleWrapper<Module> = ModuleWrapper<Module>>(wrapper: ModuleConstructable<Module, T>, filter?: ModuleFilter): Promise<T[]>;
56
42
  start(): Promise<this>;
57
43
  unregister(_module: Module): Promisable<this>;
44
+ protected resolve(filter?: ModuleFilter): Promise<Module[]>;
58
45
  abstract attach(address: string, external?: boolean): Promisable<void>;
59
46
  abstract detach(address: string): Promisable<void>;
60
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractNode.d.ts","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AbstractNode.d.ts","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export declare class MemoryNode<TConfig extends NodeConfig = NodeConfig> extends
17
17
  allowed?: Record<string, (string | import("@xyo-network/module").CosigningAddressSet)[]> | undefined;
18
18
  disallowed?: Record<string, string[]> | undefined;
19
19
  } | undefined;
20
+ storeQueries?: boolean | undefined;
20
21
  } & {
21
22
  schema: string;
22
23
  }>[];
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryNode.d.ts","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE5E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,UAAU,EAAoB,MAAM,UAAU,CAAA;AAEvD,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAEnG,qBAAa,UAAU,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,CAAE,SAAQ,YAAY,CAAC,OAAO,CAAC;IAC5F,OAAgB,YAAY,4BAAmB;IAE/C,OAAO,CAAC,mBAAmB,CAA4B;WAEjC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAItE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO;IAwBhD,MAAM,CAAC,OAAO,EAAE,MAAM;IAkBtB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAMvB,UAAU;IAMV,iBAAiB;;;;;;;;;;IAMX,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoBvD,UAAU,CAAC,MAAM,EAAE,MAAM;CAKnC"}
1
+ {"version":3,"file":"MemoryNode.d.ts","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE5E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,UAAU,EAAoB,MAAM,UAAU,CAAA;AAEvD,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAEnG,qBAAa,UAAU,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,CAAE,SAAQ,YAAY,CAAC,OAAO,CAAC;IAC5F,OAAgB,YAAY,4BAAmB;IAE/C,OAAO,CAAC,mBAAmB,CAA6B;WAElC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAItE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO;IAsBhD,MAAM,CAAC,OAAO,EAAE,MAAM;IAkBtB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAMvB,UAAU;IAMV,iBAAiB;;;;;;;;;;;IAMX,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoBvD,UAAU,CAAC,MAAM,EAAE,MAAM;CAKnC"}
@@ -1,27 +1,15 @@
1
1
  import { ArchivistWrapper } from '@xyo-network/archivist-wrapper';
2
- import { Module, ModuleFilter, ModuleWrapper } from '@xyo-network/module';
3
- import { Promisable } from '@xyo-network/promise';
2
+ import { Module, ModuleWrapper } from '@xyo-network/module';
4
3
  import { NodeModule } from './Node';
5
4
  export declare class NodeWrapper<TModule extends NodeModule = NodeModule> extends ModuleWrapper<TModule> implements NodeModule {
6
5
  static requiredQueries: string[];
7
6
  private _archivist?;
8
7
  get archivist(): ArchivistWrapper;
9
- get parentResolver(): import("@xyo-network/module").ModuleResolver<Module<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
10
- name?: string | undefined;
11
- security?: {
12
- allowAnonymous?: boolean | undefined;
13
- allowed?: Record<string, (string | import("@xyo-network/module").CosigningAddressSet)[]> | undefined;
14
- disallowed?: Record<string, string[]> | undefined;
15
- } | undefined;
16
- } & {
17
- schema: string;
18
- }>> | undefined;
19
8
  static tryWrap(module: Module): NodeWrapper | undefined;
20
9
  static wrap(module: Module): NodeWrapper;
21
10
  attach(address: string, external?: boolean): Promise<void>;
22
11
  attached(): Promise<string[]>;
23
12
  detach(address: string): Promise<void>;
24
13
  registered(): Promise<string[]>;
25
- resolve(filter?: ModuleFilter): Promisable<Module[]>;
26
14
  }
27
15
  //# sourceMappingURL=NodeWrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGzE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAYnC,qBAAa,WAAW,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,CAAE,SAAQ,aAAa,CAAC,OAAO,CAAE,YAAW,UAAU;IACpH,OAAgB,eAAe,WAA+D;IAE9F,OAAO,CAAC,UAAU,CAAC,CAAkB;IAErC,IAAI,SAAS,qBAGZ;IAED,IAAI,cAAc;;;;;;;;;oBAEjB;WAEe,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;WAShD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IAI3C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAM7B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAM5B,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;CAG9D"}
1
+ {"version":3,"file":"NodeWrapper.d.ts","sourceRoot":"","sources":["../../src/NodeWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAI3D,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAYnC,qBAAa,WAAW,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,CAAE,SAAQ,aAAa,CAAC,OAAO,CAAE,YAAW,UAAU;IACpH,OAAgB,eAAe,WAA+D;IAE9F,OAAO,CAAC,UAAU,CAAC,CAAkB;IAErC,IAAI,SAAS,qBAGZ;WAEe,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;WAShD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IAI3C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAM7B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAKtC"}
package/package.json CHANGED
@@ -13,15 +13,15 @@
13
13
  "@xylabs/assert": "^2.7.4",
14
14
  "@xylabs/exists": "^2.7.4",
15
15
  "@xylabs/promise": "^2.7.4",
16
- "@xyo-network/account": "^2.48.0",
17
- "@xyo-network/address-payload-plugin": "^2.48.0",
18
- "@xyo-network/archivist-wrapper": "^2.48.0",
19
- "@xyo-network/module": "^2.48.0",
20
- "@xyo-network/module-model": "^2.48.0",
21
- "@xyo-network/payload-builder": "^2.48.0",
22
- "@xyo-network/payload-model": "^2.48.0",
23
- "@xyo-network/payload-wrapper": "^2.48.0",
24
- "@xyo-network/promise": "^2.48.0"
16
+ "@xyo-network/account": "^2.49.1",
17
+ "@xyo-network/address-payload-plugin": "^2.49.1",
18
+ "@xyo-network/archivist-wrapper": "^2.49.1",
19
+ "@xyo-network/module": "^2.49.1",
20
+ "@xyo-network/module-model": "^2.49.1",
21
+ "@xyo-network/payload-builder": "^2.49.1",
22
+ "@xyo-network/payload-model": "^2.49.1",
23
+ "@xyo-network/payload-wrapper": "^2.49.1",
24
+ "@xyo-network/promise": "^2.49.1"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@xylabs/ts-scripts-yarn3": "^2.15.0",
@@ -61,5 +61,5 @@
61
61
  },
62
62
  "sideEffects": false,
63
63
  "types": "dist/types/index.d.ts",
64
- "version": "2.48.0"
64
+ "version": "2.49.1"
65
65
  }
@@ -4,6 +4,7 @@ import { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plug
4
4
  import {
5
5
  AbstractModule,
6
6
  CompositeModuleResolver,
7
+ duplicateModules,
7
8
  EventListener,
8
9
  Module,
9
10
  ModuleConfig,
@@ -38,12 +39,7 @@ import {
38
39
  import { NodeModule } from './Node'
39
40
  import { XyoNodeAttachedQuerySchema, XyoNodeAttachQuerySchema, XyoNodeDetachQuerySchema, XyoNodeQuery, XyoNodeRegisteredQuerySchema } from './Queries'
40
41
 
41
- export type AbstractNodeParams<TConfig extends NodeConfig = NodeConfig> = ModuleParams<
42
- TConfig,
43
- {
44
- internalResolver?: CompositeModuleResolver
45
- }
46
- >
42
+ export type AbstractNodeParams<TConfig extends NodeConfig = NodeConfig> = ModuleParams<TConfig>
47
43
 
48
44
  export abstract class AbstractNode<TConfig extends NodeConfig = NodeConfig>
49
45
  extends AbstractModule<TConfig>
@@ -51,13 +47,13 @@ export abstract class AbstractNode<TConfig extends NodeConfig = NodeConfig>
51
47
  {
52
48
  static override readonly configSchema = NodeConfigSchema
53
49
 
54
- protected readonly internalResolver = new CompositeModuleResolver()
55
-
56
50
  protected readonly moduleAttachedEventListeners: EventListener<ModuleAttachedEventArgs>[] = []
57
51
  protected readonly moduleDetachedEventListeners: EventListener<ModuleDetachedEventArgs>[] = []
58
52
  protected readonly moduleQueriedEventListeners: EventListener<ModuleQueriedEventArgs>[] = []
59
53
  protected readonly moduleRegisteredEventListeners: EventListener<ModuleRegisteredEventArgs>[] = []
60
54
 
55
+ protected readonly privateResolver = new CompositeModuleResolver()
56
+
61
57
  private readonly isNode = true
62
58
 
63
59
  protected constructor(params: AbstractNodeParams<TConfig>) {
@@ -85,7 +81,7 @@ export abstract class AbstractNode<TConfig extends NodeConfig = NodeConfig>
85
81
  }
86
82
 
87
83
  async attachedModules(): Promise<Module[]> {
88
- return await (this.internalResolver.resolve() ?? [])
84
+ return await (this.privateResolver.resolve() ?? [])
89
85
  }
90
86
 
91
87
  override async discover(): Promise<XyoPayload[]> {
@@ -180,28 +176,6 @@ export abstract class AbstractNode<TConfig extends NodeConfig = NodeConfig>
180
176
  throw new Error('Method not implemented.')
181
177
  }
182
178
 
183
- override async resolve(filter?: ModuleFilter): Promise<Module[]> {
184
- return (await this.internalResolver.resolve(filter)) ?? super.resolve(filter) ?? []
185
- }
186
-
187
- /**
188
- * Resolves the supplied filter into wrapped modules
189
- * @example <caption>Example using ArchivistWrapper</caption>
190
- * const filter = { address: [address] }
191
- * const mods: ArchivistWrapper[] = await node.resolveWrapped(ArchivistWrapper, filter)
192
- * @param wrapper The ModuleWrapper class (ArchivistWrapper,
193
- * DivinerWrapper, etc.)
194
- * @param filter The ModuleFilter
195
- * @returns An array of ModuleWrapper instances corresponding to
196
- * the underlying modules matching the supplied filter
197
- */
198
- async resolveWrapped<T extends ModuleWrapper<Module> = ModuleWrapper<Module>>(
199
- wrapper: ModuleConstructable<Module, T>,
200
- filter?: ModuleFilter,
201
- ): Promise<T[]> {
202
- return (await this.resolve(filter)).map((mod) => new wrapper(mod))
203
- }
204
-
205
179
  override async start() {
206
180
  await super.start()
207
181
  return this
@@ -211,6 +185,10 @@ export abstract class AbstractNode<TConfig extends NodeConfig = NodeConfig>
211
185
  throw new Error('Method not implemented.')
212
186
  }
213
187
 
188
+ protected override async resolve(filter?: ModuleFilter): Promise<Module[]> {
189
+ return [...(await this.privateResolver.resolve(filter)), ...(await super.resolve(filter))].filter(duplicateModules)
190
+ }
191
+
214
192
  abstract attach(address: string, external?: boolean): Promisable<void>
215
193
  abstract detach(address: string): Promisable<void>
216
194
  }
package/src/MemoryNode.ts CHANGED
@@ -11,7 +11,7 @@ export type MemoryNodeParams<TConfig extends NodeConfig = NodeConfig> = Abstract
11
11
  export class MemoryNode<TConfig extends NodeConfig = NodeConfig> extends AbstractNode<TConfig> {
12
12
  static override configSchema = NodeConfigSchema
13
13
 
14
- private registeredModuleMap = new Map<string, Module>()
14
+ private registeredModuleMap: Record<string, Module> = {}
15
15
 
16
16
  static override async create(params?: Partial<MemoryNodeParams>): Promise<MemoryNode> {
17
17
  return (await super.create(params)) as MemoryNode
@@ -20,21 +20,19 @@ export class MemoryNode<TConfig extends NodeConfig = NodeConfig> extends Abstrac
20
20
  override async attach(address: string, external?: boolean) {
21
21
  const existingModule = (await this.resolve({ address: [address] })).pop()
22
22
  assertEx(!existingModule, `Module [${existingModule?.config.name ?? existingModule?.address}] already attached at address [${address}]`)
23
- const module = assertEx(this.registeredModuleMap.get(address), 'No module registered at that address')
23
+ const module = assertEx(this.registeredModuleMap[address], 'No module registered at that address')
24
24
 
25
- this.internalResolver.addResolver(module.resolver)
25
+ this.privateResolver.addResolver(module.downResolver)
26
26
 
27
27
  //give it inside access
28
- module.parentResolver?.addResolver?.(this.internalResolver)
28
+ module.upResolver.addResolver?.(this.privateResolver)
29
29
 
30
30
  //give it outside access
31
- if (this.parentResolver) {
32
- module.parentResolver?.addResolver?.(this.parentResolver)
33
- }
31
+ module.upResolver.addResolver?.(this.upResolver)
34
32
 
35
33
  if (external) {
36
34
  //expose it externally
37
- this.resolver.addResolver(module.resolver)
35
+ this.downResolver.addResolver(module.downResolver)
38
36
  }
39
37
 
40
38
  const args = { module, name: module.config.name }
@@ -42,46 +40,46 @@ export class MemoryNode<TConfig extends NodeConfig = NodeConfig> extends Abstrac
42
40
  }
43
41
 
44
42
  override detach(address: string) {
45
- const module = assertEx(this.registeredModuleMap.get(address), 'No module found at that address')
46
-
47
- this.internalResolver.removeResolver(module.resolver)
43
+ const module = assertEx(this.registeredModuleMap[address], 'No module found at that address')
48
44
 
49
- //remove outside access
50
- module.parentResolver?.removeResolver?.(this.parentResolver)
45
+ this.privateResolver.removeResolver(module.downResolver)
51
46
 
52
47
  //remove inside access
53
- module.parentResolver?.removeResolver?.(this.internalResolver)
48
+ module.upResolver?.removeResolver?.(this.privateResolver)
49
+
50
+ //remove outside access
51
+ module.upResolver?.removeResolver?.(this.upResolver)
54
52
 
55
53
  //remove external exposure
56
- this.resolver.removeResolver(module.resolver)
54
+ this.downResolver.removeResolver(module.downResolver)
57
55
 
58
56
  const args = { module, name: module.config.name }
59
57
  this.moduleDetachedEventListeners?.map((listener) => listener(args))
60
58
  }
61
59
 
62
60
  override register(module: Module) {
63
- assertEx(!this.registeredModuleMap.get(module.address), `Module already registered at that address[${module.address}]`)
64
- this.registeredModuleMap.set(module.address, module)
61
+ assertEx(!this.registeredModuleMap[module.address], `Module already registered at that address[${module.address}]`)
62
+ this.registeredModuleMap[module.address] = module
65
63
  return this
66
64
  }
67
65
 
68
66
  override registered() {
69
- return Array.from(this.registeredModuleMap.keys()).map((key) => {
67
+ return Object.keys(this.registeredModuleMap).map((key) => {
70
68
  return key
71
69
  })
72
70
  }
73
71
 
74
72
  override registeredModules() {
75
- return Array.from(this.registeredModuleMap.values()).map((value) => {
73
+ return Object.values(this.registeredModuleMap).map((value) => {
76
74
  return value
77
75
  })
78
76
  }
79
77
 
80
78
  override async resolve(filter?: ModuleFilter): Promise<Module[]> {
81
- const internal: Promise<Module[]> = this.internalResolver.resolve(filter)
82
- const external: Promise<Module[]> = this.parentResolver?.resolve(filter) || []
83
- const local: Promise<Module[]> = this.resolver?.resolve(filter) || []
84
- const resolved = await Promise.allSettled([internal, external, local])
79
+ const internal: Promise<Module[]> = this.privateResolver.resolve(filter)
80
+ const up: Promise<Module[]> = this.upResolver?.resolve(filter) || []
81
+ const down: Promise<Module[]> = this.downResolver?.resolve(filter) || []
82
+ const resolved = await Promise.allSettled([internal, up, down])
85
83
 
86
84
  const errors = resolved.filter(rejected).map((r) => Error(r.reason))
87
85
 
@@ -99,7 +97,7 @@ export class MemoryNode<TConfig extends NodeConfig = NodeConfig> extends Abstrac
99
97
 
100
98
  override unregister(module: Module) {
101
99
  this.detach(module.address)
102
- this.registeredModuleMap.delete(module.address)
100
+ delete this.registeredModuleMap[module.address]
103
101
  return this
104
102
  }
105
103
  }
@@ -1,10 +1,9 @@
1
1
  import { assertEx } from '@xylabs/assert'
2
2
  import { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'
3
3
  import { ArchivistWrapper } from '@xyo-network/archivist-wrapper'
4
- import { Module, ModuleFilter, ModuleWrapper } from '@xyo-network/module'
4
+ import { Module, ModuleWrapper } from '@xyo-network/module'
5
5
  import { isXyoPayloadOfSchemaType } from '@xyo-network/payload-model'
6
6
  import { PayloadWrapper } from '@xyo-network/payload-wrapper'
7
- import { Promisable } from '@xyo-network/promise'
8
7
 
9
8
  import { NodeModule } from './Node'
10
9
  import {
@@ -28,10 +27,6 @@ export class NodeWrapper<TModule extends NodeModule = NodeModule> extends Module
28
27
  return this._archivist
29
28
  }
30
29
 
31
- get parentResolver() {
32
- return this.module.parentResolver
33
- }
34
-
35
30
  static override tryWrap(module: Module): NodeWrapper | undefined {
36
31
  const missingRequiredQueries = this.missingRequiredQueries(module)
37
32
  if (missingRequiredQueries.length > 0) {
@@ -66,8 +61,4 @@ export class NodeWrapper<TModule extends NodeModule = NodeModule> extends Module
66
61
  const payloads: AddressPayload[] = (await this.sendQuery(queryPayload)).filter(isXyoPayloadOfSchemaType<AddressPayload>(AddressSchema))
67
62
  return payloads.map((p) => p.address)
68
63
  }
69
-
70
- override resolve(filter?: ModuleFilter): Promisable<Module[]> {
71
- return this.module.resolve(filter)
72
- }
73
64
  }