@xyo-network/module-abstract 2.92.11 → 2.93.0-rc.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.
Files changed (61) hide show
  1. package/dist/browser/AbstractModule.d.cts +4 -12
  2. package/dist/browser/AbstractModule.d.cts.map +1 -1
  3. package/dist/browser/AbstractModule.d.mts +4 -12
  4. package/dist/browser/AbstractModule.d.mts.map +1 -1
  5. package/dist/browser/AbstractModule.d.ts +4 -12
  6. package/dist/browser/AbstractModule.d.ts.map +1 -1
  7. package/dist/browser/AbstractModuleInstance.d.cts +13 -3
  8. package/dist/browser/AbstractModuleInstance.d.cts.map +1 -1
  9. package/dist/browser/AbstractModuleInstance.d.mts +13 -3
  10. package/dist/browser/AbstractModuleInstance.d.mts.map +1 -1
  11. package/dist/browser/AbstractModuleInstance.d.ts +13 -3
  12. package/dist/browser/AbstractModuleInstance.d.ts.map +1 -1
  13. package/dist/browser/ResolveHelper.d.cts +19 -0
  14. package/dist/browser/ResolveHelper.d.cts.map +1 -0
  15. package/dist/browser/ResolveHelper.d.mts +19 -0
  16. package/dist/browser/ResolveHelper.d.mts.map +1 -0
  17. package/dist/browser/ResolveHelper.d.ts +19 -0
  18. package/dist/browser/ResolveHelper.d.ts.map +1 -0
  19. package/dist/browser/index.cjs +144 -70
  20. package/dist/browser/index.cjs.map +1 -1
  21. package/dist/browser/index.d.cts +1 -0
  22. package/dist/browser/index.d.cts.map +1 -1
  23. package/dist/browser/index.d.mts +1 -0
  24. package/dist/browser/index.d.mts.map +1 -1
  25. package/dist/browser/index.d.ts +1 -0
  26. package/dist/browser/index.d.ts.map +1 -1
  27. package/dist/browser/index.js +145 -71
  28. package/dist/browser/index.js.map +1 -1
  29. package/dist/node/AbstractModule.d.cts +4 -12
  30. package/dist/node/AbstractModule.d.cts.map +1 -1
  31. package/dist/node/AbstractModule.d.mts +4 -12
  32. package/dist/node/AbstractModule.d.mts.map +1 -1
  33. package/dist/node/AbstractModule.d.ts +4 -12
  34. package/dist/node/AbstractModule.d.ts.map +1 -1
  35. package/dist/node/AbstractModuleInstance.d.cts +13 -3
  36. package/dist/node/AbstractModuleInstance.d.cts.map +1 -1
  37. package/dist/node/AbstractModuleInstance.d.mts +13 -3
  38. package/dist/node/AbstractModuleInstance.d.mts.map +1 -1
  39. package/dist/node/AbstractModuleInstance.d.ts +13 -3
  40. package/dist/node/AbstractModuleInstance.d.ts.map +1 -1
  41. package/dist/node/ResolveHelper.d.cts +19 -0
  42. package/dist/node/ResolveHelper.d.cts.map +1 -0
  43. package/dist/node/ResolveHelper.d.mts +19 -0
  44. package/dist/node/ResolveHelper.d.mts.map +1 -0
  45. package/dist/node/ResolveHelper.d.ts +19 -0
  46. package/dist/node/ResolveHelper.d.ts.map +1 -0
  47. package/dist/node/index.cjs +152 -78
  48. package/dist/node/index.cjs.map +1 -1
  49. package/dist/node/index.d.cts +1 -0
  50. package/dist/node/index.d.cts.map +1 -1
  51. package/dist/node/index.d.mts +1 -0
  52. package/dist/node/index.d.mts.map +1 -1
  53. package/dist/node/index.d.ts +1 -0
  54. package/dist/node/index.d.ts.map +1 -1
  55. package/dist/node/index.js +152 -79
  56. package/dist/node/index.js.map +1 -1
  57. package/package.json +28 -27
  58. package/src/AbstractModule.ts +25 -103
  59. package/src/AbstractModuleInstance.ts +69 -4
  60. package/src/ResolveHelper.ts +121 -0
  61. package/src/index.ts +1 -0
@@ -16,7 +16,7 @@ import { BoundWitnessBuilder, QueryBoundWitnessBuilder } from "@xyo-network/boun
16
16
  import { QueryBoundWitnessWrapper as QueryBoundWitnessWrapper3 } from "@xyo-network/boundwitness-wrapper";
17
17
  import { ConfigSchema } from "@xyo-network/config-payload-plugin";
18
18
  import { ModuleManifestPayloadSchema } from "@xyo-network/manifest-model";
19
- import { AddressPreviousHashSchema, DeadModuleError, duplicateModules, isModuleName, ModuleAddressQuerySchema, ModuleDescribeQuerySchema, ModuleDescriptionSchema, ModuleDiscoverQuerySchema, ModuleFactory, ModuleManifestQuerySchema, ModuleStateQuerySchema, ModuleSubscribeQuerySchema, serializableField } from "@xyo-network/module-model";
19
+ import { AddressPreviousHashSchema, DeadModuleError, isModuleName, ModuleAddressQuerySchema, ModuleDescribeQuerySchema, ModuleDescriptionSchema, ModuleDiscoverQuerySchema, ModuleFactory, ModuleManifestQuerySchema, ModuleStateQuerySchema, ModuleSubscribeQuerySchema, serializableField } from "@xyo-network/module-model";
20
20
  import { CompositeModuleResolver } from "@xyo-network/module-resolver";
21
21
  import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
22
22
  import { QuerySchema } from "@xyo-network/query-payload-plugin";
@@ -220,7 +220,7 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
220
220
  }
221
221
  static allowRandomAccount = true;
222
222
  static configSchemas;
223
- static defaultLogger = new ConsoleLogger(LogLevel.log);
223
+ static defaultLogger = new ConsoleLogger(LogLevel.warn);
224
224
  static enableLazyLoad = false;
225
225
  static privateConstructorKey = Date.now().toString();
226
226
  downResolver = new CompositeModuleResolver();
@@ -271,6 +271,9 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
271
271
  get allowAnonymous() {
272
272
  return !!this.config.security?.allowAnonymous;
273
273
  }
274
+ get archiving() {
275
+ return this.config.archiving;
276
+ }
274
277
  get config() {
275
278
  return this.params.config;
276
279
  }
@@ -465,48 +468,6 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
465
468
  ];
466
469
  return validators.every((validator) => validator(query, payloads));
467
470
  }
468
- async resolve(idOrFilter = "*", { required = "log", ...options } = {}) {
469
- const childOptions = {
470
- ...options,
471
- required: false
472
- };
473
- const direction = options?.direction ?? "all";
474
- const up = direction === "up" || direction === "all";
475
- const down = direction === "down" || direction === "all";
476
- let result;
477
- if (idOrFilter === "*") {
478
- if (this.dead) {
479
- return [];
480
- }
481
- return [
482
- ...down ? await this.downResolver.resolve("*", childOptions) : [],
483
- ...up ? await this.upResolver.resolve("*", childOptions) : []
484
- ].filter(duplicateModules);
485
- } else {
486
- switch (typeof idOrFilter) {
487
- case "string": {
488
- if (this.dead) {
489
- return void 0;
490
- }
491
- result = (down ? await this.downResolver.resolve(idOrFilter, childOptions) : void 0) ?? (up ? await this.upResolver.resolve(idOrFilter, childOptions) : void 0);
492
- break;
493
- }
494
- default: {
495
- if (this.dead) {
496
- return [];
497
- }
498
- const filter = idOrFilter;
499
- result = [
500
- ...down ? await this.downResolver.resolve(filter, childOptions) : [],
501
- ...up ? await this.upResolver.resolve(filter, childOptions) : []
502
- ].filter(duplicateModules);
503
- break;
504
- }
505
- }
506
- }
507
- this.validateRequiredResolve(required, result, idOrFilter);
508
- return result;
509
- }
510
471
  start(_timeout) {
511
472
  this._startPromise = this._startPromise ?? this.startHandler();
512
473
  const result = this._startPromise;
@@ -619,7 +580,7 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
619
580
  await Promise.all(payloads.map((payload) => PayloadBuilder2.build(payload))),
620
581
  await Promise.all((errors ?? [])?.map((error) => PayloadBuilder2.build(error)))
621
582
  ];
622
- if (this.config.archiving) {
583
+ if (this.archiving) {
623
584
  await this.storeToArchivists(result.flat());
624
585
  }
625
586
  return result;
@@ -641,7 +602,7 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
641
602
  return description;
642
603
  }
643
604
  async discoverHandler(_maxDepth) {
644
- const config = this.config;
605
+ const config = await PayloadBuilder2.build(this.config);
645
606
  const address = await new PayloadBuilder2({
646
607
  schema: AddressSchema
647
608
  }).fields({
@@ -655,10 +616,10 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
655
616
  query
656
617
  }).build();
657
618
  }));
658
- const configSchema = {
619
+ const configSchema = await PayloadBuilder2.build({
659
620
  config: config.schema,
660
621
  schema: ConfigSchema
661
- };
622
+ });
662
623
  return compact([
663
624
  config,
664
625
  configSchema,
@@ -689,8 +650,18 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
689
650
  }
690
651
  }
691
652
  }
692
- manifestHandler(_depth, _ignoreAddresses) {
653
+ async manifestHandler(maxDepth = 1, _ignoreAddresses = []) {
693
654
  const name = this.config.name ?? "Anonymous";
655
+ const children = await this.downResolver.resolve("*", {
656
+ direction: "down",
657
+ maxDepth
658
+ });
659
+ const childAddressToName = {};
660
+ for (const child of children) {
661
+ if (child.address !== this.address) {
662
+ childAddressToName[child.address] = child.config.name ?? null;
663
+ }
664
+ }
694
665
  return {
695
666
  config: {
696
667
  name,
@@ -698,7 +669,8 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
698
669
  },
699
670
  schema: ModuleManifestPayloadSchema,
700
671
  status: {
701
- address: this.address
672
+ address: this.address,
673
+ children: childAddressToName
702
674
  }
703
675
  };
704
676
  }
@@ -784,13 +756,6 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
784
756
  }
785
757
  return resultPayloads;
786
758
  }
787
- async resolveArchivingArchivists() {
788
- const archivists = this.config.archiving?.archivists;
789
- if (!archivists)
790
- return [];
791
- const resolved = await Promise.all(archivists.map((archivist) => this.resolve(archivist)));
792
- return compact(resolved.map((mod) => asArchivistInstance(mod)));
793
- }
794
759
  async startHandler() {
795
760
  this.validateConfig();
796
761
  await this.initializeQueryAccounts();
@@ -808,12 +773,6 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
808
773
  this._started = void 0;
809
774
  return true;
810
775
  }
811
- async storeToArchivists(payloads) {
812
- const archivists = await this.resolveArchivingArchivists();
813
- return (await Promise.all(archivists.map((archivist) => {
814
- return archivist.insert?.(payloads);
815
- }))).map(([bw]) => bw);
816
- }
817
776
  subscribeHandler() {
818
777
  return;
819
778
  }
@@ -851,20 +810,98 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
851
810
  }
852
811
  }, true);
853
812
  }
854
- validateRequiredResolve(required, result, idOrFilter) {
813
+ };
814
+
815
+ // src/AbstractModuleInstance.ts
816
+ import { assertEx as assertEx3 } from "@xylabs/assert";
817
+ import { compact as compact2 } from "@xylabs/lodash";
818
+ import { asArchivistInstance as asArchivistInstance2 } from "@xyo-network/archivist-model";
819
+
820
+ // src/ResolveHelper.ts
821
+ import { IdLogger as IdLogger2 } from "@xylabs/logger";
822
+ import { toJsonString } from "@xylabs/object";
823
+ import { duplicateModules } from "@xyo-network/module-model";
824
+ var ResolveHelper = class {
825
+ static {
826
+ __name(this, "ResolveHelper");
827
+ }
828
+ static defaultLogger;
829
+ static async resolve(config, idOrFilter = "*", { visibility, maxDepth = 5, required = "log", ...options } = {}) {
830
+ const { module, logger = this.defaultLogger, dead = false, upResolver, downResolver } = config;
831
+ const log = logger ? new IdLogger2(logger, () => `ResolveHelper [${module.id}][${idOrFilter}][${visibility}]`) : void 0;
832
+ const childOptions = {
833
+ ...options,
834
+ direction: "down",
835
+ maxDepth: maxDepth - 1,
836
+ required: false,
837
+ visibility
838
+ };
839
+ const direction = options?.direction ?? "all";
840
+ const up = direction === "up" || direction === "all";
841
+ const down = direction === "down" || direction === "all";
842
+ let result;
843
+ log?.debug("start", idOrFilter, maxDepth);
844
+ if (idOrFilter === "*") {
845
+ if (dead) {
846
+ log?.warn("failed [dead]", idOrFilter);
847
+ return [];
848
+ }
849
+ const modules = [
850
+ ...down ? await downResolver.resolve("*", childOptions) : [],
851
+ ...up ? await upResolver.resolve("*", childOptions) : []
852
+ ].filter(duplicateModules).filter((module2) => module2.address !== config.address);
853
+ if (modules.length > 0) {
854
+ log?.log("modules [count]", modules.length);
855
+ log?.debug("modules", toJsonString(modules, 4));
856
+ }
857
+ if (maxDepth === 0) {
858
+ return modules;
859
+ }
860
+ const childModules = (await Promise.all(modules.map(async (module2) => await module2.resolve("*", childOptions)))).flat().filter(duplicateModules);
861
+ return [
862
+ module,
863
+ ...modules,
864
+ ...childModules
865
+ ].filter(duplicateModules);
866
+ } else {
867
+ switch (typeof idOrFilter) {
868
+ case "string": {
869
+ if (dead) {
870
+ return void 0;
871
+ }
872
+ result = (down ? await downResolver.resolve(idOrFilter, childOptions) : void 0) ?? (up ? await upResolver.resolve(idOrFilter, childOptions) : void 0);
873
+ break;
874
+ }
875
+ default: {
876
+ if (dead) {
877
+ return [];
878
+ }
879
+ const filter = idOrFilter;
880
+ result = [
881
+ ...down ? await downResolver.resolve(filter, childOptions) : [],
882
+ ...up ? await upResolver.resolve(filter, childOptions) : []
883
+ ].filter(duplicateModules);
884
+ break;
885
+ }
886
+ }
887
+ }
888
+ this.validateRequiredResolve(required, result, idOrFilter, logger);
889
+ return result;
890
+ }
891
+ static validateRequiredResolve(required, result, idOrFilter, logger = this.defaultLogger) {
892
+ const log = logger ? new IdLogger2(logger, () => `validateRequiredResolve [${idOrFilter}][${result}]`) : void 0;
855
893
  if (required && (result === void 0 || Array.isArray(result) && result.length > 0)) {
856
894
  switch (required) {
857
895
  case "warn": {
858
- this.logger.warn("resolve failed", idOrFilter);
896
+ log?.warn("resolve failed", idOrFilter);
859
897
  break;
860
898
  }
861
899
  case "log": {
862
- this.logger.log("resolve failed", idOrFilter);
900
+ log?.log("resolve failed", idOrFilter);
863
901
  break;
864
902
  }
865
903
  default: {
866
- this.logger.error("resolve failed", idOrFilter);
867
- break;
904
+ throw new Error(`resolve failed [${idOrFilter}]`);
868
905
  }
869
906
  }
870
907
  }
@@ -872,7 +909,6 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
872
909
  };
873
910
 
874
911
  // src/AbstractModuleInstance.ts
875
- import { assertEx as assertEx3 } from "@xylabs/assert";
876
912
  var AbstractModuleInstance = class extends AbstractModule {
877
913
  static {
878
914
  __name(this, "AbstractModuleInstance");
@@ -892,10 +928,10 @@ var AbstractModuleInstance = class extends AbstractModule {
892
928
  return await this.describeHandler();
893
929
  });
894
930
  }
895
- discover() {
931
+ discover(maxDepth = 5) {
896
932
  this._checkDead();
897
933
  return this.busy(async () => {
898
- return await this.discoverHandler();
934
+ return await this.discoverHandler(maxDepth);
899
935
  });
900
936
  }
901
937
  manifest(maxDepth, ignoreAddresses) {
@@ -910,6 +946,30 @@ var AbstractModuleInstance = class extends AbstractModule {
910
946
  return await this.moduleAddressHandler();
911
947
  });
912
948
  }
949
+ async resolve(idOrFilter = "*", options = {}) {
950
+ const config = {
951
+ address: this.address,
952
+ dead: this.dead,
953
+ downResolver: this.downResolver,
954
+ logger: this.logger,
955
+ module: this,
956
+ upResolver: this.upResolver
957
+ };
958
+ if (idOrFilter === "*") {
959
+ return await ResolveHelper.resolve(config, idOrFilter, options);
960
+ }
961
+ switch (typeof idOrFilter) {
962
+ case "string": {
963
+ return await ResolveHelper.resolve(config, idOrFilter, options);
964
+ }
965
+ case "object": {
966
+ return await ResolveHelper.resolve(config, idOrFilter, options);
967
+ }
968
+ default: {
969
+ return await ResolveHelper.resolve(config, idOrFilter, options);
970
+ }
971
+ }
972
+ }
913
973
  state() {
914
974
  this._checkDead();
915
975
  return this.busy(async () => {
@@ -920,6 +980,19 @@ var AbstractModuleInstance = class extends AbstractModule {
920
980
  this._checkDead();
921
981
  return this.subscribeHandler();
922
982
  }
983
+ async resolveArchivingArchivists() {
984
+ const archivists = this.config.archiving?.archivists;
985
+ if (!archivists)
986
+ return [];
987
+ const resolved = await Promise.all(archivists.map((archivist) => this.resolve(archivist)));
988
+ return compact2(resolved.map((mod) => asArchivistInstance2(mod)));
989
+ }
990
+ async storeToArchivists(payloads) {
991
+ const archivists = await this.resolveArchivingArchivists();
992
+ return (await Promise.all(archivists.map((archivist) => {
993
+ return archivist.insert?.(payloads);
994
+ }))).map(([bw]) => bw);
995
+ }
923
996
  };
924
997
  export {
925
998
  AbstractModule,
@@ -927,6 +1000,7 @@ export {
927
1000
  BaseEmitter,
928
1001
  ModuleConfigQueryValidator,
929
1002
  ModuleErrorBuilder,
1003
+ ResolveHelper,
930
1004
  SupportedQueryValidator,
931
1005
  isQuerySupportedByModule
932
1006
  };