@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
@@ -26,6 +26,7 @@ __export(src_exports, {
26
26
  BaseEmitter: () => BaseEmitter,
27
27
  ModuleConfigQueryValidator: () => ModuleConfigQueryValidator,
28
28
  ModuleErrorBuilder: () => ModuleErrorBuilder,
29
+ ResolveHelper: () => ResolveHelper,
29
30
  SupportedQueryValidator: () => SupportedQueryValidator,
30
31
  isQuerySupportedByModule: () => isQuerySupportedByModule
31
32
  });
@@ -250,7 +251,7 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
250
251
  }
251
252
  static allowRandomAccount = true;
252
253
  static configSchemas;
253
- static defaultLogger = new import_logger.ConsoleLogger(import_logger.LogLevel.log);
254
+ static defaultLogger = new import_logger.ConsoleLogger(import_logger.LogLevel.warn);
254
255
  static enableLazyLoad = false;
255
256
  static privateConstructorKey = Date.now().toString();
256
257
  downResolver = new import_module_resolver.CompositeModuleResolver();
@@ -301,6 +302,9 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
301
302
  get allowAnonymous() {
302
303
  return !!this.config.security?.allowAnonymous;
303
304
  }
305
+ get archiving() {
306
+ return this.config.archiving;
307
+ }
304
308
  get config() {
305
309
  return this.params.config;
306
310
  }
@@ -495,48 +499,6 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
495
499
  ];
496
500
  return validators.every((validator) => validator(query, payloads));
497
501
  }
498
- async resolve(idOrFilter = "*", { required = "log", ...options } = {}) {
499
- const childOptions = {
500
- ...options,
501
- required: false
502
- };
503
- const direction = options?.direction ?? "all";
504
- const up = direction === "up" || direction === "all";
505
- const down = direction === "down" || direction === "all";
506
- let result;
507
- if (idOrFilter === "*") {
508
- if (this.dead) {
509
- return [];
510
- }
511
- return [
512
- ...down ? await this.downResolver.resolve("*", childOptions) : [],
513
- ...up ? await this.upResolver.resolve("*", childOptions) : []
514
- ].filter(import_module_model.duplicateModules);
515
- } else {
516
- switch (typeof idOrFilter) {
517
- case "string": {
518
- if (this.dead) {
519
- return void 0;
520
- }
521
- result = (down ? await this.downResolver.resolve(idOrFilter, childOptions) : void 0) ?? (up ? await this.upResolver.resolve(idOrFilter, childOptions) : void 0);
522
- break;
523
- }
524
- default: {
525
- if (this.dead) {
526
- return [];
527
- }
528
- const filter = idOrFilter;
529
- result = [
530
- ...down ? await this.downResolver.resolve(filter, childOptions) : [],
531
- ...up ? await this.upResolver.resolve(filter, childOptions) : []
532
- ].filter(import_module_model.duplicateModules);
533
- break;
534
- }
535
- }
536
- }
537
- this.validateRequiredResolve(required, result, idOrFilter);
538
- return result;
539
- }
540
502
  start(_timeout) {
541
503
  this._startPromise = this._startPromise ?? this.startHandler();
542
504
  const result = this._startPromise;
@@ -649,7 +611,7 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
649
611
  await Promise.all(payloads.map((payload) => import_payload_builder2.PayloadBuilder.build(payload))),
650
612
  await Promise.all((errors ?? [])?.map((error) => import_payload_builder2.PayloadBuilder.build(error)))
651
613
  ];
652
- if (this.config.archiving) {
614
+ if (this.archiving) {
653
615
  await this.storeToArchivists(result.flat());
654
616
  }
655
617
  return result;
@@ -671,7 +633,7 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
671
633
  return description;
672
634
  }
673
635
  async discoverHandler(_maxDepth) {
674
- const config = this.config;
636
+ const config = await import_payload_builder2.PayloadBuilder.build(this.config);
675
637
  const address = await new import_payload_builder2.PayloadBuilder({
676
638
  schema: import_address_payload_plugin.AddressSchema
677
639
  }).fields({
@@ -685,10 +647,10 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
685
647
  query
686
648
  }).build();
687
649
  }));
688
- const configSchema = {
650
+ const configSchema = await import_payload_builder2.PayloadBuilder.build({
689
651
  config: config.schema,
690
652
  schema: import_config_payload_plugin.ConfigSchema
691
- };
653
+ });
692
654
  return (0, import_lodash.compact)([
693
655
  config,
694
656
  configSchema,
@@ -719,8 +681,18 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
719
681
  }
720
682
  }
721
683
  }
722
- manifestHandler(_depth, _ignoreAddresses) {
684
+ async manifestHandler(maxDepth = 1, _ignoreAddresses = []) {
723
685
  const name = this.config.name ?? "Anonymous";
686
+ const children = await this.downResolver.resolve("*", {
687
+ direction: "down",
688
+ maxDepth
689
+ });
690
+ const childAddressToName = {};
691
+ for (const child of children) {
692
+ if (child.address !== this.address) {
693
+ childAddressToName[child.address] = child.config.name ?? null;
694
+ }
695
+ }
724
696
  return {
725
697
  config: {
726
698
  name,
@@ -728,7 +700,8 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
728
700
  },
729
701
  schema: import_manifest_model.ModuleManifestPayloadSchema,
730
702
  status: {
731
- address: this.address
703
+ address: this.address,
704
+ children: childAddressToName
732
705
  }
733
706
  };
734
707
  }
@@ -814,13 +787,6 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
814
787
  }
815
788
  return resultPayloads;
816
789
  }
817
- async resolveArchivingArchivists() {
818
- const archivists = this.config.archiving?.archivists;
819
- if (!archivists)
820
- return [];
821
- const resolved = await Promise.all(archivists.map((archivist) => this.resolve(archivist)));
822
- return (0, import_lodash.compact)(resolved.map((mod) => (0, import_archivist_model.asArchivistInstance)(mod)));
823
- }
824
790
  async startHandler() {
825
791
  this.validateConfig();
826
792
  await this.initializeQueryAccounts();
@@ -838,12 +804,6 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
838
804
  this._started = void 0;
839
805
  return true;
840
806
  }
841
- async storeToArchivists(payloads) {
842
- const archivists = await this.resolveArchivingArchivists();
843
- return (await Promise.all(archivists.map((archivist) => {
844
- return archivist.insert?.(payloads);
845
- }))).map(([bw]) => bw);
846
- }
847
807
  subscribeHandler() {
848
808
  return;
849
809
  }
@@ -881,20 +841,98 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
881
841
  }
882
842
  }, true);
883
843
  }
884
- validateRequiredResolve(required, result, idOrFilter) {
844
+ };
845
+
846
+ // src/AbstractModuleInstance.ts
847
+ var import_assert3 = require("@xylabs/assert");
848
+ var import_lodash2 = require("@xylabs/lodash");
849
+ var import_archivist_model2 = require("@xyo-network/archivist-model");
850
+
851
+ // src/ResolveHelper.ts
852
+ var import_logger2 = require("@xylabs/logger");
853
+ var import_object3 = require("@xylabs/object");
854
+ var import_module_model2 = require("@xyo-network/module-model");
855
+ var ResolveHelper = class {
856
+ static {
857
+ __name(this, "ResolveHelper");
858
+ }
859
+ static defaultLogger;
860
+ static async resolve(config, idOrFilter = "*", { visibility, maxDepth = 5, required = "log", ...options } = {}) {
861
+ const { module: module2, logger = this.defaultLogger, dead = false, upResolver, downResolver } = config;
862
+ const log = logger ? new import_logger2.IdLogger(logger, () => `ResolveHelper [${module2.id}][${idOrFilter}][${visibility}]`) : void 0;
863
+ const childOptions = {
864
+ ...options,
865
+ direction: "down",
866
+ maxDepth: maxDepth - 1,
867
+ required: false,
868
+ visibility
869
+ };
870
+ const direction = options?.direction ?? "all";
871
+ const up = direction === "up" || direction === "all";
872
+ const down = direction === "down" || direction === "all";
873
+ let result;
874
+ log?.debug("start", idOrFilter, maxDepth);
875
+ if (idOrFilter === "*") {
876
+ if (dead) {
877
+ log?.warn("failed [dead]", idOrFilter);
878
+ return [];
879
+ }
880
+ const modules = [
881
+ ...down ? await downResolver.resolve("*", childOptions) : [],
882
+ ...up ? await upResolver.resolve("*", childOptions) : []
883
+ ].filter(import_module_model2.duplicateModules).filter((module3) => module3.address !== config.address);
884
+ if (modules.length > 0) {
885
+ log?.log("modules [count]", modules.length);
886
+ log?.debug("modules", (0, import_object3.toJsonString)(modules, 4));
887
+ }
888
+ if (maxDepth === 0) {
889
+ return modules;
890
+ }
891
+ const childModules = (await Promise.all(modules.map(async (module3) => await module3.resolve("*", childOptions)))).flat().filter(import_module_model2.duplicateModules);
892
+ return [
893
+ module2,
894
+ ...modules,
895
+ ...childModules
896
+ ].filter(import_module_model2.duplicateModules);
897
+ } else {
898
+ switch (typeof idOrFilter) {
899
+ case "string": {
900
+ if (dead) {
901
+ return void 0;
902
+ }
903
+ result = (down ? await downResolver.resolve(idOrFilter, childOptions) : void 0) ?? (up ? await upResolver.resolve(idOrFilter, childOptions) : void 0);
904
+ break;
905
+ }
906
+ default: {
907
+ if (dead) {
908
+ return [];
909
+ }
910
+ const filter = idOrFilter;
911
+ result = [
912
+ ...down ? await downResolver.resolve(filter, childOptions) : [],
913
+ ...up ? await upResolver.resolve(filter, childOptions) : []
914
+ ].filter(import_module_model2.duplicateModules);
915
+ break;
916
+ }
917
+ }
918
+ }
919
+ this.validateRequiredResolve(required, result, idOrFilter, logger);
920
+ return result;
921
+ }
922
+ static validateRequiredResolve(required, result, idOrFilter, logger = this.defaultLogger) {
923
+ const log = logger ? new import_logger2.IdLogger(logger, () => `validateRequiredResolve [${idOrFilter}][${result}]`) : void 0;
885
924
  if (required && (result === void 0 || Array.isArray(result) && result.length > 0)) {
886
925
  switch (required) {
887
926
  case "warn": {
888
- this.logger.warn("resolve failed", idOrFilter);
927
+ log?.warn("resolve failed", idOrFilter);
889
928
  break;
890
929
  }
891
930
  case "log": {
892
- this.logger.log("resolve failed", idOrFilter);
931
+ log?.log("resolve failed", idOrFilter);
893
932
  break;
894
933
  }
895
934
  default: {
896
- this.logger.error("resolve failed", idOrFilter);
897
- break;
935
+ throw new Error(`resolve failed [${idOrFilter}]`);
898
936
  }
899
937
  }
900
938
  }
@@ -902,7 +940,6 @@ var AbstractModule = class _AbstractModule extends BaseEmitter {
902
940
  };
903
941
 
904
942
  // src/AbstractModuleInstance.ts
905
- var import_assert3 = require("@xylabs/assert");
906
943
  var AbstractModuleInstance = class extends AbstractModule {
907
944
  static {
908
945
  __name(this, "AbstractModuleInstance");
@@ -922,10 +959,10 @@ var AbstractModuleInstance = class extends AbstractModule {
922
959
  return await this.describeHandler();
923
960
  });
924
961
  }
925
- discover() {
962
+ discover(maxDepth = 5) {
926
963
  this._checkDead();
927
964
  return this.busy(async () => {
928
- return await this.discoverHandler();
965
+ return await this.discoverHandler(maxDepth);
929
966
  });
930
967
  }
931
968
  manifest(maxDepth, ignoreAddresses) {
@@ -940,6 +977,30 @@ var AbstractModuleInstance = class extends AbstractModule {
940
977
  return await this.moduleAddressHandler();
941
978
  });
942
979
  }
980
+ async resolve(idOrFilter = "*", options = {}) {
981
+ const config = {
982
+ address: this.address,
983
+ dead: this.dead,
984
+ downResolver: this.downResolver,
985
+ logger: this.logger,
986
+ module: this,
987
+ upResolver: this.upResolver
988
+ };
989
+ if (idOrFilter === "*") {
990
+ return await ResolveHelper.resolve(config, idOrFilter, options);
991
+ }
992
+ switch (typeof idOrFilter) {
993
+ case "string": {
994
+ return await ResolveHelper.resolve(config, idOrFilter, options);
995
+ }
996
+ case "object": {
997
+ return await ResolveHelper.resolve(config, idOrFilter, options);
998
+ }
999
+ default: {
1000
+ return await ResolveHelper.resolve(config, idOrFilter, options);
1001
+ }
1002
+ }
1003
+ }
943
1004
  state() {
944
1005
  this._checkDead();
945
1006
  return this.busy(async () => {
@@ -950,5 +1011,18 @@ var AbstractModuleInstance = class extends AbstractModule {
950
1011
  this._checkDead();
951
1012
  return this.subscribeHandler();
952
1013
  }
1014
+ async resolveArchivingArchivists() {
1015
+ const archivists = this.config.archiving?.archivists;
1016
+ if (!archivists)
1017
+ return [];
1018
+ const resolved = await Promise.all(archivists.map((archivist) => this.resolve(archivist)));
1019
+ return (0, import_lodash2.compact)(resolved.map((mod) => (0, import_archivist_model2.asArchivistInstance)(mod)));
1020
+ }
1021
+ async storeToArchivists(payloads) {
1022
+ const archivists = await this.resolveArchivingArchivists();
1023
+ return (await Promise.all(archivists.map((archivist) => {
1024
+ return archivist.insert?.(payloads);
1025
+ }))).map(([bw]) => bw);
1026
+ }
953
1027
  };
954
1028
  //# sourceMappingURL=index.cjs.map