@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.
- package/dist/browser/AbstractModule.d.cts +4 -12
- package/dist/browser/AbstractModule.d.cts.map +1 -1
- package/dist/browser/AbstractModule.d.mts +4 -12
- package/dist/browser/AbstractModule.d.mts.map +1 -1
- package/dist/browser/AbstractModule.d.ts +4 -12
- package/dist/browser/AbstractModule.d.ts.map +1 -1
- package/dist/browser/AbstractModuleInstance.d.cts +13 -3
- package/dist/browser/AbstractModuleInstance.d.cts.map +1 -1
- package/dist/browser/AbstractModuleInstance.d.mts +13 -3
- package/dist/browser/AbstractModuleInstance.d.mts.map +1 -1
- package/dist/browser/AbstractModuleInstance.d.ts +13 -3
- package/dist/browser/AbstractModuleInstance.d.ts.map +1 -1
- package/dist/browser/ResolveHelper.d.cts +19 -0
- package/dist/browser/ResolveHelper.d.cts.map +1 -0
- package/dist/browser/ResolveHelper.d.mts +19 -0
- package/dist/browser/ResolveHelper.d.mts.map +1 -0
- package/dist/browser/ResolveHelper.d.ts +19 -0
- package/dist/browser/ResolveHelper.d.ts.map +1 -0
- package/dist/browser/index.cjs +144 -70
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.d.cts +1 -0
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +1 -0
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +145 -71
- package/dist/browser/index.js.map +1 -1
- package/dist/node/AbstractModule.d.cts +4 -12
- package/dist/node/AbstractModule.d.cts.map +1 -1
- package/dist/node/AbstractModule.d.mts +4 -12
- package/dist/node/AbstractModule.d.mts.map +1 -1
- package/dist/node/AbstractModule.d.ts +4 -12
- package/dist/node/AbstractModule.d.ts.map +1 -1
- package/dist/node/AbstractModuleInstance.d.cts +13 -3
- package/dist/node/AbstractModuleInstance.d.cts.map +1 -1
- package/dist/node/AbstractModuleInstance.d.mts +13 -3
- package/dist/node/AbstractModuleInstance.d.mts.map +1 -1
- package/dist/node/AbstractModuleInstance.d.ts +13 -3
- package/dist/node/AbstractModuleInstance.d.ts.map +1 -1
- package/dist/node/ResolveHelper.d.cts +19 -0
- package/dist/node/ResolveHelper.d.cts.map +1 -0
- package/dist/node/ResolveHelper.d.mts +19 -0
- package/dist/node/ResolveHelper.d.mts.map +1 -0
- package/dist/node/ResolveHelper.d.ts +19 -0
- package/dist/node/ResolveHelper.d.ts.map +1 -0
- package/dist/node/index.cjs +152 -78
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +1 -0
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +1 -0
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +152 -79
- package/dist/node/index.js.map +1 -1
- package/package.json +28 -27
- package/src/AbstractModule.ts +25 -103
- package/src/AbstractModuleInstance.ts +69 -4
- package/src/ResolveHelper.ts +121 -0
- package/src/index.ts +1 -0
package/dist/browser/index.js
CHANGED
|
@@ -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,
|
|
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.
|
|
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.
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
896
|
+
log?.warn("resolve failed", idOrFilter);
|
|
859
897
|
break;
|
|
860
898
|
}
|
|
861
899
|
case "log": {
|
|
862
|
-
|
|
900
|
+
log?.log("resolve failed", idOrFilter);
|
|
863
901
|
break;
|
|
864
902
|
}
|
|
865
903
|
default: {
|
|
866
|
-
|
|
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
|
};
|