@xyo-network/bridge-module-resolver 2.84.18 → 2.85.0
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/ProxyModule.d.cts +2 -2
- package/dist/browser/ProxyModule.d.mts +2 -2
- package/dist/browser/ProxyModule.d.ts +2 -2
- package/dist/browser/index.cjs +73 -34
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +75 -34
- package/dist/browser/index.js.map +1 -1
- package/dist/node/ProxyModule.d.cts +2 -2
- package/dist/node/ProxyModule.d.mts +2 -2
- package/dist/node/ProxyModule.d.ts +2 -2
- package/dist/node/index.cjs +73 -36
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +75 -36
- package/dist/node/index.js.map +1 -1
- package/package.json +20 -20
|
@@ -22,7 +22,7 @@ export declare class ProxyModule extends BaseEmitter<ModuleParams, ModuleEventDa
|
|
|
22
22
|
constructor(proxyParams: ProxyModuleParams);
|
|
23
23
|
get address(): string;
|
|
24
24
|
get bridge(): BridgeModule<import("@xyo-network/bridge-model").BridgeParams<import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
25
|
-
|
|
25
|
+
accountPath?: string | undefined;
|
|
26
26
|
readonly archivist?: string | undefined;
|
|
27
27
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
28
28
|
readonly name?: string | undefined;
|
|
@@ -39,7 +39,7 @@ export declare class ProxyModule extends BaseEmitter<ModuleParams, ModuleEventDa
|
|
|
39
39
|
readonly storeQueries?: boolean | undefined;
|
|
40
40
|
readonly timestamp?: boolean | undefined;
|
|
41
41
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
42
|
-
|
|
42
|
+
accountPath?: string | undefined;
|
|
43
43
|
readonly archivist?: string | undefined;
|
|
44
44
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
45
45
|
readonly name?: string | undefined;
|
|
@@ -22,7 +22,7 @@ export declare class ProxyModule extends BaseEmitter<ModuleParams, ModuleEventDa
|
|
|
22
22
|
constructor(proxyParams: ProxyModuleParams);
|
|
23
23
|
get address(): string;
|
|
24
24
|
get bridge(): BridgeModule<import("@xyo-network/bridge-model").BridgeParams<import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
25
|
-
|
|
25
|
+
accountPath?: string | undefined;
|
|
26
26
|
readonly archivist?: string | undefined;
|
|
27
27
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
28
28
|
readonly name?: string | undefined;
|
|
@@ -39,7 +39,7 @@ export declare class ProxyModule extends BaseEmitter<ModuleParams, ModuleEventDa
|
|
|
39
39
|
readonly storeQueries?: boolean | undefined;
|
|
40
40
|
readonly timestamp?: boolean | undefined;
|
|
41
41
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
42
|
-
|
|
42
|
+
accountPath?: string | undefined;
|
|
43
43
|
readonly archivist?: string | undefined;
|
|
44
44
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
45
45
|
readonly name?: string | undefined;
|
|
@@ -22,7 +22,7 @@ export declare class ProxyModule extends BaseEmitter<ModuleParams, ModuleEventDa
|
|
|
22
22
|
constructor(proxyParams: ProxyModuleParams);
|
|
23
23
|
get address(): string;
|
|
24
24
|
get bridge(): BridgeModule<import("@xyo-network/bridge-model").BridgeParams<import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
25
|
-
|
|
25
|
+
accountPath?: string | undefined;
|
|
26
26
|
readonly archivist?: string | undefined;
|
|
27
27
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
28
28
|
readonly name?: string | undefined;
|
|
@@ -39,7 +39,7 @@ export declare class ProxyModule extends BaseEmitter<ModuleParams, ModuleEventDa
|
|
|
39
39
|
readonly storeQueries?: boolean | undefined;
|
|
40
40
|
readonly timestamp?: boolean | undefined;
|
|
41
41
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
42
|
-
|
|
42
|
+
accountPath?: string | undefined;
|
|
43
43
|
readonly archivist?: string | undefined;
|
|
44
44
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
45
45
|
readonly name?: string | undefined;
|
package/dist/browser/index.cjs
CHANGED
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -51,12 +52,20 @@ var import_module_abstract = require("@xyo-network/module-abstract");
|
|
|
51
52
|
var import_module_resolver = require("@xyo-network/module-resolver");
|
|
52
53
|
var ProxyModuleConfigSchema = "network.xyo.module.proxy.config";
|
|
53
54
|
var ProxyModule = class extends import_module_abstract.BaseEmitter {
|
|
55
|
+
static {
|
|
56
|
+
__name(this, "ProxyModule");
|
|
57
|
+
}
|
|
58
|
+
proxyParams;
|
|
59
|
+
upResolver;
|
|
60
|
+
_busyCount;
|
|
54
61
|
constructor(proxyParams) {
|
|
55
|
-
super({
|
|
62
|
+
super({
|
|
63
|
+
config: proxyParams.bridge.targetConfig(proxyParams.address)
|
|
64
|
+
});
|
|
56
65
|
this.proxyParams = proxyParams;
|
|
66
|
+
this.upResolver = new import_module_resolver.CompositeModuleResolver();
|
|
67
|
+
this._busyCount = 0;
|
|
57
68
|
}
|
|
58
|
-
upResolver = new import_module_resolver.CompositeModuleResolver();
|
|
59
|
-
_busyCount = 0;
|
|
60
69
|
get address() {
|
|
61
70
|
return this.proxyParams.address.toLowerCase();
|
|
62
71
|
}
|
|
@@ -79,7 +88,10 @@ var ProxyModule = class extends import_module_abstract.BaseEmitter {
|
|
|
79
88
|
async busy(closure) {
|
|
80
89
|
if (this._busyCount <= 0) {
|
|
81
90
|
this._busyCount = 0;
|
|
82
|
-
const args = {
|
|
91
|
+
const args = {
|
|
92
|
+
busy: true,
|
|
93
|
+
module: this
|
|
94
|
+
};
|
|
83
95
|
await this.emit("moduleBusy", args);
|
|
84
96
|
}
|
|
85
97
|
this._busyCount++;
|
|
@@ -89,7 +101,10 @@ var ProxyModule = class extends import_module_abstract.BaseEmitter {
|
|
|
89
101
|
this._busyCount--;
|
|
90
102
|
if (this._busyCount <= 0) {
|
|
91
103
|
this._busyCount = 0;
|
|
92
|
-
const args = {
|
|
104
|
+
const args = {
|
|
105
|
+
busy: false,
|
|
106
|
+
module: this
|
|
107
|
+
};
|
|
93
108
|
await this.emit("moduleBusy", args);
|
|
94
109
|
}
|
|
95
110
|
}
|
|
@@ -104,12 +119,10 @@ var ProxyModule = class extends import_module_abstract.BaseEmitter {
|
|
|
104
119
|
description.name = this.config.name;
|
|
105
120
|
}
|
|
106
121
|
const discover = await this.discover();
|
|
107
|
-
description.children = (0, import_lodash.compact)(
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}) ?? []
|
|
112
|
-
);
|
|
122
|
+
description.children = (0, import_lodash.compact)(discover?.map((payload) => {
|
|
123
|
+
const address = payload.schema === import_address_payload_plugin.AddressSchema ? payload.address : void 0;
|
|
124
|
+
return address == this.address ? void 0 : address;
|
|
125
|
+
}) ?? []);
|
|
113
126
|
return description;
|
|
114
127
|
});
|
|
115
128
|
}
|
|
@@ -120,7 +133,13 @@ var ProxyModule = class extends import_module_abstract.BaseEmitter {
|
|
|
120
133
|
}
|
|
121
134
|
manifest(_depth) {
|
|
122
135
|
const name = this.config.name ?? "Anonymous";
|
|
123
|
-
return {
|
|
136
|
+
return {
|
|
137
|
+
config: {
|
|
138
|
+
name,
|
|
139
|
+
...this.config
|
|
140
|
+
},
|
|
141
|
+
schema: import_manifest_model.ModuleManifestPayloadSchema
|
|
142
|
+
};
|
|
124
143
|
}
|
|
125
144
|
moduleAddress() {
|
|
126
145
|
throw new Error("Not Implemented");
|
|
@@ -131,7 +150,12 @@ var ProxyModule = class extends import_module_abstract.BaseEmitter {
|
|
|
131
150
|
async query(query, payloads) {
|
|
132
151
|
return await this.busy(async () => {
|
|
133
152
|
const result = (0, import_assert.assertEx)(await this.bridge.targetQuery(this.address, query, payloads), "Remote Query Failed");
|
|
134
|
-
await this.emit("moduleQueried", {
|
|
153
|
+
await this.emit("moduleQueried", {
|
|
154
|
+
module: this,
|
|
155
|
+
payloads,
|
|
156
|
+
query,
|
|
157
|
+
result
|
|
158
|
+
});
|
|
135
159
|
return result;
|
|
136
160
|
});
|
|
137
161
|
}
|
|
@@ -147,6 +171,15 @@ var ProxyModule = class extends import_module_abstract.BaseEmitter {
|
|
|
147
171
|
|
|
148
172
|
// src/ModuleResolver.ts
|
|
149
173
|
var BridgeModuleResolver = class _BridgeModuleResolver extends import_module_resolver2.CompositeModuleResolver {
|
|
174
|
+
static {
|
|
175
|
+
__name(this, "BridgeModuleResolver");
|
|
176
|
+
}
|
|
177
|
+
bridge;
|
|
178
|
+
wrapperAccount;
|
|
179
|
+
options;
|
|
180
|
+
primed;
|
|
181
|
+
remoteAddresses;
|
|
182
|
+
resolvedModules;
|
|
150
183
|
// TODO: Allow optional ctor param for supplying address for nested Nodes
|
|
151
184
|
// protected readonly address?: string,
|
|
152
185
|
constructor(bridge, wrapperAccount, options) {
|
|
@@ -154,10 +187,9 @@ var BridgeModuleResolver = class _BridgeModuleResolver extends import_module_res
|
|
|
154
187
|
this.bridge = bridge;
|
|
155
188
|
this.wrapperAccount = wrapperAccount;
|
|
156
189
|
this.options = options;
|
|
190
|
+
this.primed = void 0;
|
|
191
|
+
this.resolvedModules = {};
|
|
157
192
|
}
|
|
158
|
-
primed = void 0;
|
|
159
|
-
remoteAddresses;
|
|
160
|
-
resolvedModules = {};
|
|
161
193
|
get isModuleResolver() {
|
|
162
194
|
return true;
|
|
163
195
|
}
|
|
@@ -166,26 +198,22 @@ var BridgeModuleResolver = class _BridgeModuleResolver extends import_module_res
|
|
|
166
198
|
}
|
|
167
199
|
async currentResolvedModules() {
|
|
168
200
|
const result = {};
|
|
169
|
-
await Promise.all(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
})
|
|
173
|
-
);
|
|
201
|
+
await Promise.all(Object.entries(this.resolvedModules).map(async ([key, value]) => {
|
|
202
|
+
result[key] = await value;
|
|
203
|
+
}));
|
|
174
204
|
return result;
|
|
175
205
|
}
|
|
176
206
|
async getRemoteAddresses() {
|
|
177
207
|
this.remoteAddresses = this.remoteAddresses ?? (async () => {
|
|
178
208
|
const discover = await this.bridge.targetDiscover(void 0, this.options?.maxDepth);
|
|
179
|
-
return (0, import_lodash2.compact)(
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
})
|
|
188
|
-
);
|
|
209
|
+
return (0, import_lodash2.compact)(discover?.map((payload) => {
|
|
210
|
+
if (payload.schema === import_address_payload_plugin2.AddressSchema) {
|
|
211
|
+
const schemaPayload = payload;
|
|
212
|
+
return schemaPayload.address;
|
|
213
|
+
} else {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
}));
|
|
189
217
|
})();
|
|
190
218
|
return await this.remoteAddresses;
|
|
191
219
|
}
|
|
@@ -206,7 +234,10 @@ var BridgeModuleResolver = class _BridgeModuleResolver extends import_module_res
|
|
|
206
234
|
}
|
|
207
235
|
async resolve(nameOrAddressOrFilter, options) {
|
|
208
236
|
const unfiltered = await (async () => {
|
|
209
|
-
const mutatedOptions = {
|
|
237
|
+
const mutatedOptions = {
|
|
238
|
+
...options,
|
|
239
|
+
maxDepth: (options?.maxDepth ?? _BridgeModuleResolver.defaultMaxDepth) - 1
|
|
240
|
+
};
|
|
210
241
|
await this.prime();
|
|
211
242
|
await this.resolveRemoteModules();
|
|
212
243
|
if (typeof nameOrAddressOrFilter === "string") {
|
|
@@ -240,7 +271,13 @@ var BridgeModuleResolver = class _BridgeModuleResolver extends import_module_res
|
|
|
240
271
|
return await cached;
|
|
241
272
|
this.resolvedModules[targetAddress] = this.resolvedModules[targetAddress] ?? (async (address) => {
|
|
242
273
|
await this.bridge.targetDiscover(address);
|
|
243
|
-
const mod = new ProxyModule({
|
|
274
|
+
const mod = new ProxyModule({
|
|
275
|
+
address,
|
|
276
|
+
bridge: this.bridge,
|
|
277
|
+
config: {
|
|
278
|
+
schema: ProxyModuleConfigSchema
|
|
279
|
+
}
|
|
280
|
+
});
|
|
244
281
|
try {
|
|
245
282
|
if ((0, import_archivist_model.isArchivistModule)(mod)) {
|
|
246
283
|
return import_archivist_wrapper.ArchivistWrapper.wrap(mod, this.wrapperAccount);
|
|
@@ -287,7 +324,9 @@ var BridgeModuleResolver = class _BridgeModuleResolver extends import_module_res
|
|
|
287
324
|
if (filter?.query) {
|
|
288
325
|
return await this.resolveRemoteModulesByQuery(filter);
|
|
289
326
|
}
|
|
290
|
-
return await this.resolveRemoteModulesByAddress({
|
|
327
|
+
return await this.resolveRemoteModulesByAddress({
|
|
328
|
+
address: await this.getRemoteAddresses()
|
|
329
|
+
});
|
|
291
330
|
}
|
|
292
331
|
async resolveRemoteModulesByAddress(filter) {
|
|
293
332
|
return (0, import_lodash2.compact)(await Promise.all(filter.address.map((address) => this.resolveByAddress(address))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/ModuleResolver.ts","../../src/ProxyModule.ts"],"sourcesContent":["export * from './ModuleResolver'\nexport * from './ProxyModule'\n","import { handleError } from '@xylabs/error'\nimport { compact } from '@xylabs/lodash'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { isArchivistModule } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BridgeModule } from '@xyo-network/bridge-model'\nimport { DivinerWrapper } from '@xyo-network/diviner'\nimport { isDivinerModule } from '@xyo-network/diviner-model'\nimport {\n AddressModuleFilter,\n Module,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleInstance,\n ModuleResolver,\n NameModuleFilter,\n QueryModuleFilter,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport { ModuleWrapper } from '@xyo-network/module-wrapper'\nimport { isNodeModule } from '@xyo-network/node-model'\nimport { NodeWrapper } from '@xyo-network/node-wrapper'\nimport { isSentinelModule, SentinelWrapper } from '@xyo-network/sentinel'\nimport { isWitnessModule } from '@xyo-network/witness-model'\nimport { WitnessWrapper } from '@xyo-network/witness-wrapper'\n\nimport { ProxyModule, ProxyModuleConfigSchema, ProxyModuleParams } from './ProxyModule'\n\nexport class BridgeModuleResolver<T extends ModuleInstance = ModuleInstance> extends CompositeModuleResolver implements ModuleResolver {\n private primed: Promise<boolean> | undefined = undefined\n private remoteAddresses?: Promise<string[]>\n private resolvedModules: Record<string, Promise<ModuleInstance>> = {}\n\n // TODO: Allow optional ctor param for supplying address for nested Nodes\n // protected readonly address?: string,\n constructor(\n protected readonly bridge: BridgeModule,\n protected wrapperAccount: AccountInstance,\n protected options?: ModuleFilterOptions<T>,\n ) {\n super()\n }\n\n override get isModuleResolver(): boolean {\n return true\n }\n\n override add(module: Module): this\n override add(module: Module[]): this\n override add(_module: Module | Module[]): this {\n throw new Error('Method not implemented.')\n }\n\n async currentResolvedModules<T extends ModuleInstance = ModuleInstance>(): Promise<Record<string, T>> {\n const result: Record<string, T> = {}\n await Promise.all(\n Object.entries(this.resolvedModules).map(async ([key, value]) => {\n result[key] = (await value) as T\n }),\n )\n\n return result\n }\n\n async getRemoteAddresses() {\n this.remoteAddresses =\n this.remoteAddresses ??\n (async () => {\n const discover = await this.bridge.targetDiscover(undefined, this.options?.maxDepth)\n return compact(\n discover?.map((payload) => {\n if (payload.schema === AddressSchema) {\n const schemaPayload = payload as AddressPayload\n return schemaPayload.address\n } else {\n return null\n }\n }),\n )\n })()\n return await this.remoteAddresses\n }\n\n prime() {\n this.primed =\n this.primed ??\n (async () => {\n await this.resolveRemoteModules()\n return true\n })()\n return this.primed\n }\n\n override remove(_address: string | string[]): this {\n throw new Error('Method not implemented.')\n }\n\n reset() {\n this.primed = undefined\n this.remoteAddresses = undefined\n this.resolvedModules = {}\n }\n\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n const unfiltered = await (async () => {\n const mutatedOptions = { ...options, maxDepth: (options?.maxDepth ?? BridgeModuleResolver.defaultMaxDepth) - 1 }\n await this.prime()\n await this.resolveRemoteModules()\n if (typeof nameOrAddressOrFilter === 'string') {\n if (mutatedOptions.maxDepth < 0) {\n return\n }\n const result: T | undefined = (await this.resolveByAddress<T>(nameOrAddressOrFilter)) ?? (await this.resolveByName<T>(nameOrAddressOrFilter))\n return result\n } else {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const result: T[] = await this.resolveRemoteModules<T>(nameOrAddressOrFilter)\n return result\n }\n })()\n\n const identity = options?.identity\n if (identity) {\n return Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module)) : identity(unfiltered) ? unfiltered : undefined\n } else {\n return unfiltered\n }\n }\n\n private async resolveByAddress<T extends ModuleInstance = ModuleInstance>(targetAddress: string): Promise<T | undefined> {\n const remoteAddresses = await this.getRemoteAddresses()\n\n //check if it is even there\n if (!remoteAddresses.includes(targetAddress)) {\n //this.logger?.log(`Not in RA: ${targetAddress}`)\n return undefined\n }\n\n const cached = this.resolvedModules[targetAddress]\n if (cached) return (await cached) as T\n\n this.resolvedModules[targetAddress] =\n this.resolvedModules[targetAddress] ??\n (async (address: string) => {\n //discover it to set the config in the bridge\n await this.bridge.targetDiscover(address)\n\n const mod: Module = new ProxyModule({ address, bridge: this.bridge, config: { schema: ProxyModuleConfigSchema } } as ProxyModuleParams)\n\n try {\n if (isArchivistModule(mod)) {\n return ArchivistWrapper.wrap(mod, this.wrapperAccount)\n }\n\n if (isDivinerModule(mod)) {\n return DivinerWrapper.wrap(mod, this.wrapperAccount)\n }\n\n if (isWitnessModule(mod)) {\n return WitnessWrapper.wrap(mod, this.wrapperAccount)\n }\n\n if (isNodeModule(mod)) {\n return NodeWrapper.wrap(mod, this.wrapperAccount)\n }\n\n if (isSentinelModule(mod)) {\n return SentinelWrapper.wrap(mod, this.wrapperAccount)\n }\n console.warn(`BridgeModuleResolver: Unknown Module Type: [${targetAddress}]`)\n return ModuleWrapper.wrap(mod, this.wrapperAccount)\n } catch (ex) {\n handleError(ex, (error) => {\n console.error(`BridgeModuleResolver.resolveByAddress: ${error.message} [${targetAddress}]`)\n })\n }\n })(targetAddress)\n\n return (await this.resolvedModules[targetAddress]) as T\n }\n\n private async resolveByName<T extends ModuleInstance = ModuleInstance>(name: string): Promise<T | undefined> {\n const modules = await this.currentResolvedModules()\n return Object.values(modules)\n .filter((module) => module.config.name === name)\n .pop() as T\n }\n\n private async resolveByQuery<T extends ModuleInstance = ModuleInstance>(queries: string[]): Promise<T[]> {\n return Object.values(await this.currentResolvedModules()).filter((module) => {\n //filter out the requested queries\n const found = module.queries.filter((query) => queries.find((q) => q === query))\n\n //did we find all the requested queries?\n return queries.length === found.length\n }) as T[]\n }\n\n private async resolveRemoteModules<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter): Promise<T[]> {\n if ((filter as AddressModuleFilter)?.address) {\n return await this.resolveRemoteModulesByAddress<T>(filter as AddressModuleFilter)\n }\n\n if ((filter as NameModuleFilter)?.name) {\n return await this.resolveRemoteModulesByName<T>(filter as NameModuleFilter)\n }\n\n if ((filter as QueryModuleFilter)?.query) {\n return await this.resolveRemoteModulesByQuery<T>(filter as QueryModuleFilter)\n }\n\n //get all of them\n return await this.resolveRemoteModulesByAddress<T>({ address: await this.getRemoteAddresses() })\n }\n\n private async resolveRemoteModulesByAddress<T extends ModuleInstance = ModuleInstance>(filter: AddressModuleFilter): Promise<T[]> {\n return compact(await Promise.all(filter.address.map((address) => this.resolveByAddress<T>(address))))\n }\n\n private async resolveRemoteModulesByName<T extends ModuleInstance = ModuleInstance>(filter: NameModuleFilter): Promise<T[]> {\n return compact(await Promise.all(filter.name.map(async (name) => await this.resolveByName<T>(name))))\n }\n\n private async resolveRemoteModulesByQuery<T extends ModuleInstance = ModuleInstance>(filter: QueryModuleFilter): Promise<T[]> {\n return compact((await Promise.all(filter.query.map(async (query) => await this.resolveByQuery<T>(query)))).flat())\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BridgeModule } from '@xyo-network/bridge-model'\nimport { ModuleManifestPayload, ModuleManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { BaseEmitter } from '@xyo-network/module-abstract'\nimport {\n AddressPreviousHashPayload,\n ModuleBusyEventArgs,\n ModuleConfig,\n ModuleDescription,\n ModuleEventData,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleInstance,\n ModuleParams,\n ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type ProxyModuleConfigSchema = 'network.xyo.module.proxy.config'\nexport const ProxyModuleConfigSchema: ProxyModuleConfigSchema = 'network.xyo.module.proxy.config'\n\nexport type TProxyModuleConfig = ModuleConfig<{ schema: ProxyModuleConfigSchema }>\n\nexport type ProxyModuleParams = ModuleParams<\n TProxyModuleConfig,\n {\n address: string\n bridge: BridgeModule\n }\n>\n\nexport class ProxyModule extends BaseEmitter<ModuleParams, ModuleEventData> implements ModuleInstance<ModuleParams, ModuleEventData> {\n readonly upResolver = new CompositeModuleResolver()\n\n private _busyCount = 0\n\n constructor(public proxyParams: ProxyModuleParams) {\n super({ config: proxyParams.bridge.targetConfig(proxyParams.address) })\n }\n\n get address() {\n return this.proxyParams.address.toLowerCase()\n }\n\n get bridge() {\n return this.proxyParams.bridge\n }\n\n get config(): ModuleConfig {\n const config = this.bridge.targetConfig(this.address)\n return config\n }\n\n get downResolver() {\n return assertEx(this.bridge.targetDownResolver(this.address), 'Unable to get resolver')\n }\n\n get queries() {\n return this.bridge.targetQueries(this.address)\n }\n\n addressPreviousHash(): Promise<AddressPreviousHashPayload> {\n throw new Error('Not Implemented')\n }\n\n async busy<R>(closure: () => Promise<R>) {\n if (this._busyCount <= 0) {\n this._busyCount = 0\n const args: ModuleBusyEventArgs = { busy: true, module: this }\n await this.emit('moduleBusy', args)\n }\n this._busyCount++\n try {\n return await closure()\n } finally {\n this._busyCount--\n if (this._busyCount <= 0) {\n this._busyCount = 0\n const args: ModuleBusyEventArgs = { busy: false, module: this }\n await this.emit('moduleBusy', args)\n }\n }\n }\n\n async describe(): Promise<ModuleDescription> {\n return await this.busy(async () => {\n const description: ModuleDescription = {\n address: this.address,\n queries: this.queries,\n }\n if (this.config.name) {\n description.name = this.config.name\n }\n\n const discover = await this.discover()\n\n description.children = compact(\n discover?.map((payload) => {\n const address = payload.schema === AddressSchema ? (payload as AddressPayload).address : undefined\n return address == this.address ? undefined : address\n }) ?? [],\n )\n\n return description\n })\n }\n\n async discover(): Promise<Payload[]> {\n return await this.busy(async () => {\n return await this.bridge.targetDiscover()\n })\n }\n\n manifest(_depth?: number): Promisable<ModuleManifestPayload> {\n const name = this.config.name ?? 'Anonymous'\n return { config: { name, ...this.config }, schema: ModuleManifestPayloadSchema }\n }\n\n moduleAddress(): Promise<AddressPreviousHashPayload[]> {\n throw new Error('Not Implemented')\n }\n\n previousHash(): Promise<string | undefined> {\n throw new Error('Not Implemented')\n }\n\n async query<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {\n return await this.busy(async () => {\n const result = assertEx(await this.bridge.targetQuery(this.address, query, payloads), 'Remote Query Failed')\n await this.emit('moduleQueried', { module: this, payloads, query, result })\n return result\n })\n }\n\n async queryable(query: QueryBoundWitness, payloads?: Payload[], queryConfig?: ModuleConfig): Promise<boolean> {\n return await this.bridge.targetQueryable(this.address, query, payloads, queryConfig)\n }\n\n /* Resolves a filter from the perspective of the module, including through the parent/gateway module */\n resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n resolve(nameOrAddress: string, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n async resolve(\n nameOrAddressOrFilter?: ModuleFilter | string,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n return await this.busy(async () => {\n return await (typeof nameOrAddressOrFilter === 'string'\n ? this.bridge.targetResolve(this.address, nameOrAddressOrFilter, options)\n : this.bridge.targetResolve(this.address, nameOrAddressOrFilter, options))\n })\n }\n}\n"],"mappings":"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","names":["import_lodash","import_address_payload_plugin","import_module_resolver","module"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/ModuleResolver.ts","../../src/ProxyModule.ts"],"sourcesContent":["export * from './ModuleResolver'\nexport * from './ProxyModule'\n","import { handleError } from '@xylabs/error'\nimport { compact } from '@xylabs/lodash'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { isArchivistModule } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BridgeModule } from '@xyo-network/bridge-model'\nimport { DivinerWrapper } from '@xyo-network/diviner'\nimport { isDivinerModule } from '@xyo-network/diviner-model'\nimport {\n AddressModuleFilter,\n Module,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleInstance,\n ModuleResolver,\n NameModuleFilter,\n QueryModuleFilter,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport { ModuleWrapper } from '@xyo-network/module-wrapper'\nimport { isNodeModule } from '@xyo-network/node-model'\nimport { NodeWrapper } from '@xyo-network/node-wrapper'\nimport { isSentinelModule, SentinelWrapper } from '@xyo-network/sentinel'\nimport { isWitnessModule } from '@xyo-network/witness-model'\nimport { WitnessWrapper } from '@xyo-network/witness-wrapper'\n\nimport { ProxyModule, ProxyModuleConfigSchema, ProxyModuleParams } from './ProxyModule'\n\nexport class BridgeModuleResolver<T extends ModuleInstance = ModuleInstance> extends CompositeModuleResolver implements ModuleResolver {\n private primed: Promise<boolean> | undefined = undefined\n private remoteAddresses?: Promise<string[]>\n private resolvedModules: Record<string, Promise<ModuleInstance>> = {}\n\n // TODO: Allow optional ctor param for supplying address for nested Nodes\n // protected readonly address?: string,\n constructor(\n protected readonly bridge: BridgeModule,\n protected wrapperAccount: AccountInstance,\n protected options?: ModuleFilterOptions<T>,\n ) {\n super()\n }\n\n override get isModuleResolver(): boolean {\n return true\n }\n\n override add(module: Module): this\n override add(module: Module[]): this\n override add(_module: Module | Module[]): this {\n throw new Error('Method not implemented.')\n }\n\n async currentResolvedModules<T extends ModuleInstance = ModuleInstance>(): Promise<Record<string, T>> {\n const result: Record<string, T> = {}\n await Promise.all(\n Object.entries(this.resolvedModules).map(async ([key, value]) => {\n result[key] = (await value) as T\n }),\n )\n\n return result\n }\n\n async getRemoteAddresses() {\n this.remoteAddresses =\n this.remoteAddresses ??\n (async () => {\n const discover = await this.bridge.targetDiscover(undefined, this.options?.maxDepth)\n return compact(\n discover?.map((payload) => {\n if (payload.schema === AddressSchema) {\n const schemaPayload = payload as AddressPayload\n return schemaPayload.address\n } else {\n return null\n }\n }),\n )\n })()\n return await this.remoteAddresses\n }\n\n prime() {\n this.primed =\n this.primed ??\n (async () => {\n await this.resolveRemoteModules()\n return true\n })()\n return this.primed\n }\n\n override remove(_address: string | string[]): this {\n throw new Error('Method not implemented.')\n }\n\n reset() {\n this.primed = undefined\n this.remoteAddresses = undefined\n this.resolvedModules = {}\n }\n\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n const unfiltered = await (async () => {\n const mutatedOptions = { ...options, maxDepth: (options?.maxDepth ?? BridgeModuleResolver.defaultMaxDepth) - 1 }\n await this.prime()\n await this.resolveRemoteModules()\n if (typeof nameOrAddressOrFilter === 'string') {\n if (mutatedOptions.maxDepth < 0) {\n return\n }\n const result: T | undefined = (await this.resolveByAddress<T>(nameOrAddressOrFilter)) ?? (await this.resolveByName<T>(nameOrAddressOrFilter))\n return result\n } else {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const result: T[] = await this.resolveRemoteModules<T>(nameOrAddressOrFilter)\n return result\n }\n })()\n\n const identity = options?.identity\n if (identity) {\n return Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module)) : identity(unfiltered) ? unfiltered : undefined\n } else {\n return unfiltered\n }\n }\n\n private async resolveByAddress<T extends ModuleInstance = ModuleInstance>(targetAddress: string): Promise<T | undefined> {\n const remoteAddresses = await this.getRemoteAddresses()\n\n //check if it is even there\n if (!remoteAddresses.includes(targetAddress)) {\n //this.logger?.log(`Not in RA: ${targetAddress}`)\n return undefined\n }\n\n const cached = this.resolvedModules[targetAddress]\n if (cached) return (await cached) as T\n\n this.resolvedModules[targetAddress] =\n this.resolvedModules[targetAddress] ??\n (async (address: string) => {\n //discover it to set the config in the bridge\n await this.bridge.targetDiscover(address)\n\n const mod: Module = new ProxyModule({ address, bridge: this.bridge, config: { schema: ProxyModuleConfigSchema } } as ProxyModuleParams)\n\n try {\n if (isArchivistModule(mod)) {\n return ArchivistWrapper.wrap(mod, this.wrapperAccount)\n }\n\n if (isDivinerModule(mod)) {\n return DivinerWrapper.wrap(mod, this.wrapperAccount)\n }\n\n if (isWitnessModule(mod)) {\n return WitnessWrapper.wrap(mod, this.wrapperAccount)\n }\n\n if (isNodeModule(mod)) {\n return NodeWrapper.wrap(mod, this.wrapperAccount)\n }\n\n if (isSentinelModule(mod)) {\n return SentinelWrapper.wrap(mod, this.wrapperAccount)\n }\n console.warn(`BridgeModuleResolver: Unknown Module Type: [${targetAddress}]`)\n return ModuleWrapper.wrap(mod, this.wrapperAccount)\n } catch (ex) {\n handleError(ex, (error) => {\n console.error(`BridgeModuleResolver.resolveByAddress: ${error.message} [${targetAddress}]`)\n })\n }\n })(targetAddress)\n\n return (await this.resolvedModules[targetAddress]) as T\n }\n\n private async resolveByName<T extends ModuleInstance = ModuleInstance>(name: string): Promise<T | undefined> {\n const modules = await this.currentResolvedModules()\n return Object.values(modules)\n .filter((module) => module.config.name === name)\n .pop() as T\n }\n\n private async resolveByQuery<T extends ModuleInstance = ModuleInstance>(queries: string[]): Promise<T[]> {\n return Object.values(await this.currentResolvedModules()).filter((module) => {\n //filter out the requested queries\n const found = module.queries.filter((query) => queries.find((q) => q === query))\n\n //did we find all the requested queries?\n return queries.length === found.length\n }) as T[]\n }\n\n private async resolveRemoteModules<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter): Promise<T[]> {\n if ((filter as AddressModuleFilter)?.address) {\n return await this.resolveRemoteModulesByAddress<T>(filter as AddressModuleFilter)\n }\n\n if ((filter as NameModuleFilter)?.name) {\n return await this.resolveRemoteModulesByName<T>(filter as NameModuleFilter)\n }\n\n if ((filter as QueryModuleFilter)?.query) {\n return await this.resolveRemoteModulesByQuery<T>(filter as QueryModuleFilter)\n }\n\n //get all of them\n return await this.resolveRemoteModulesByAddress<T>({ address: await this.getRemoteAddresses() })\n }\n\n private async resolveRemoteModulesByAddress<T extends ModuleInstance = ModuleInstance>(filter: AddressModuleFilter): Promise<T[]> {\n return compact(await Promise.all(filter.address.map((address) => this.resolveByAddress<T>(address))))\n }\n\n private async resolveRemoteModulesByName<T extends ModuleInstance = ModuleInstance>(filter: NameModuleFilter): Promise<T[]> {\n return compact(await Promise.all(filter.name.map(async (name) => await this.resolveByName<T>(name))))\n }\n\n private async resolveRemoteModulesByQuery<T extends ModuleInstance = ModuleInstance>(filter: QueryModuleFilter): Promise<T[]> {\n return compact((await Promise.all(filter.query.map(async (query) => await this.resolveByQuery<T>(query)))).flat())\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BridgeModule } from '@xyo-network/bridge-model'\nimport { ModuleManifestPayload, ModuleManifestPayloadSchema } from '@xyo-network/manifest-model'\nimport { BaseEmitter } from '@xyo-network/module-abstract'\nimport {\n AddressPreviousHashPayload,\n ModuleBusyEventArgs,\n ModuleConfig,\n ModuleDescription,\n ModuleEventData,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleInstance,\n ModuleParams,\n ModuleQueryResult,\n} from '@xyo-network/module-model'\nimport { CompositeModuleResolver } from '@xyo-network/module-resolver'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type ProxyModuleConfigSchema = 'network.xyo.module.proxy.config'\nexport const ProxyModuleConfigSchema: ProxyModuleConfigSchema = 'network.xyo.module.proxy.config'\n\nexport type TProxyModuleConfig = ModuleConfig<{ schema: ProxyModuleConfigSchema }>\n\nexport type ProxyModuleParams = ModuleParams<\n TProxyModuleConfig,\n {\n address: string\n bridge: BridgeModule\n }\n>\n\nexport class ProxyModule extends BaseEmitter<ModuleParams, ModuleEventData> implements ModuleInstance<ModuleParams, ModuleEventData> {\n readonly upResolver = new CompositeModuleResolver()\n\n private _busyCount = 0\n\n constructor(public proxyParams: ProxyModuleParams) {\n super({ config: proxyParams.bridge.targetConfig(proxyParams.address) })\n }\n\n get address() {\n return this.proxyParams.address.toLowerCase()\n }\n\n get bridge() {\n return this.proxyParams.bridge\n }\n\n get config(): ModuleConfig {\n const config = this.bridge.targetConfig(this.address)\n return config\n }\n\n get downResolver() {\n return assertEx(this.bridge.targetDownResolver(this.address), 'Unable to get resolver')\n }\n\n get queries() {\n return this.bridge.targetQueries(this.address)\n }\n\n addressPreviousHash(): Promise<AddressPreviousHashPayload> {\n throw new Error('Not Implemented')\n }\n\n async busy<R>(closure: () => Promise<R>) {\n if (this._busyCount <= 0) {\n this._busyCount = 0\n const args: ModuleBusyEventArgs = { busy: true, module: this }\n await this.emit('moduleBusy', args)\n }\n this._busyCount++\n try {\n return await closure()\n } finally {\n this._busyCount--\n if (this._busyCount <= 0) {\n this._busyCount = 0\n const args: ModuleBusyEventArgs = { busy: false, module: this }\n await this.emit('moduleBusy', args)\n }\n }\n }\n\n async describe(): Promise<ModuleDescription> {\n return await this.busy(async () => {\n const description: ModuleDescription = {\n address: this.address,\n queries: this.queries,\n }\n if (this.config.name) {\n description.name = this.config.name\n }\n\n const discover = await this.discover()\n\n description.children = compact(\n discover?.map((payload) => {\n const address = payload.schema === AddressSchema ? (payload as AddressPayload).address : undefined\n return address == this.address ? undefined : address\n }) ?? [],\n )\n\n return description\n })\n }\n\n async discover(): Promise<Payload[]> {\n return await this.busy(async () => {\n return await this.bridge.targetDiscover()\n })\n }\n\n manifest(_depth?: number): Promisable<ModuleManifestPayload> {\n const name = this.config.name ?? 'Anonymous'\n return { config: { name, ...this.config }, schema: ModuleManifestPayloadSchema }\n }\n\n moduleAddress(): Promise<AddressPreviousHashPayload[]> {\n throw new Error('Not Implemented')\n }\n\n previousHash(): Promise<string | undefined> {\n throw new Error('Not Implemented')\n }\n\n async query<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {\n return await this.busy(async () => {\n const result = assertEx(await this.bridge.targetQuery(this.address, query, payloads), 'Remote Query Failed')\n await this.emit('moduleQueried', { module: this, payloads, query, result })\n return result\n })\n }\n\n async queryable(query: QueryBoundWitness, payloads?: Payload[], queryConfig?: ModuleConfig): Promise<boolean> {\n return await this.bridge.targetQueryable(this.address, query, payloads, queryConfig)\n }\n\n /* Resolves a filter from the perspective of the module, including through the parent/gateway module */\n resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<ModuleInstance[]>\n resolve(nameOrAddress: string, options?: ModuleFilterOptions): Promise<ModuleInstance | undefined>\n async resolve(\n nameOrAddressOrFilter?: ModuleFilter | string,\n options?: ModuleFilterOptions,\n ): Promise<ModuleInstance | ModuleInstance[] | undefined> {\n return await this.busy(async () => {\n return await (typeof nameOrAddressOrFilter === 'string'\n ? this.bridge.targetResolve(this.address, nameOrAddressOrFilter, options)\n : this.bridge.targetResolve(this.address, nameOrAddressOrFilter, options))\n })\n }\n}\n"],"mappings":"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","names":["import_lodash","import_address_payload_plugin","import_module_resolver","ProxyModuleConfigSchema","ProxyModule","BaseEmitter","upResolver","_busyCount","constructor","proxyParams","config","bridge","targetConfig","address","CompositeModuleResolver","toLowerCase","downResolver","assertEx","targetDownResolver","queries","targetQueries","addressPreviousHash","Error","busy","closure","args","module","emit","describe","description","name","discover","children","compact","map","payload","schema","AddressSchema","undefined","targetDiscover","manifest","_depth","ModuleManifestPayloadSchema","moduleAddress","previousHash","query","payloads","result","targetQuery","queryable","queryConfig","targetQueryable","resolve","nameOrAddressOrFilter","options","targetResolve","BridgeModuleResolver","CompositeModuleResolver","primed","remoteAddresses","resolvedModules","constructor","bridge","wrapperAccount","options","undefined","isModuleResolver","add","_module","Error","currentResolvedModules","result","Promise","all","Object","entries","map","key","value","getRemoteAddresses","discover","targetDiscover","maxDepth","compact","payload","schema","AddressSchema","schemaPayload","address","prime","resolveRemoteModules","remove","_address","reset","resolve","nameOrAddressOrFilter","unfiltered","mutatedOptions","defaultMaxDepth","resolveByAddress","resolveByName","identity","Array","isArray","filter","module","targetAddress","includes","cached","mod","ProxyModule","config","ProxyModuleConfigSchema","isArchivistModule","ArchivistWrapper","wrap","isDivinerModule","DivinerWrapper","isWitnessModule","WitnessWrapper","isNodeModule","NodeWrapper","isSentinelModule","SentinelWrapper","console","warn","ModuleWrapper","ex","handleError","error","message","name","modules","values","pop","resolveByQuery","queries","found","query","find","q","length","resolveRemoteModulesByAddress","resolveRemoteModulesByName","resolveRemoteModulesByQuery","flat"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
1
4
|
// src/ModuleResolver.ts
|
|
2
5
|
import { handleError } from "@xylabs/error";
|
|
3
6
|
import { compact as compact2 } from "@xylabs/lodash";
|
|
@@ -23,12 +26,20 @@ import { BaseEmitter } from "@xyo-network/module-abstract";
|
|
|
23
26
|
import { CompositeModuleResolver } from "@xyo-network/module-resolver";
|
|
24
27
|
var ProxyModuleConfigSchema = "network.xyo.module.proxy.config";
|
|
25
28
|
var ProxyModule = class extends BaseEmitter {
|
|
29
|
+
static {
|
|
30
|
+
__name(this, "ProxyModule");
|
|
31
|
+
}
|
|
32
|
+
proxyParams;
|
|
33
|
+
upResolver;
|
|
34
|
+
_busyCount;
|
|
26
35
|
constructor(proxyParams) {
|
|
27
|
-
super({
|
|
36
|
+
super({
|
|
37
|
+
config: proxyParams.bridge.targetConfig(proxyParams.address)
|
|
38
|
+
});
|
|
28
39
|
this.proxyParams = proxyParams;
|
|
40
|
+
this.upResolver = new CompositeModuleResolver();
|
|
41
|
+
this._busyCount = 0;
|
|
29
42
|
}
|
|
30
|
-
upResolver = new CompositeModuleResolver();
|
|
31
|
-
_busyCount = 0;
|
|
32
43
|
get address() {
|
|
33
44
|
return this.proxyParams.address.toLowerCase();
|
|
34
45
|
}
|
|
@@ -51,7 +62,10 @@ var ProxyModule = class extends BaseEmitter {
|
|
|
51
62
|
async busy(closure) {
|
|
52
63
|
if (this._busyCount <= 0) {
|
|
53
64
|
this._busyCount = 0;
|
|
54
|
-
const args = {
|
|
65
|
+
const args = {
|
|
66
|
+
busy: true,
|
|
67
|
+
module: this
|
|
68
|
+
};
|
|
55
69
|
await this.emit("moduleBusy", args);
|
|
56
70
|
}
|
|
57
71
|
this._busyCount++;
|
|
@@ -61,7 +75,10 @@ var ProxyModule = class extends BaseEmitter {
|
|
|
61
75
|
this._busyCount--;
|
|
62
76
|
if (this._busyCount <= 0) {
|
|
63
77
|
this._busyCount = 0;
|
|
64
|
-
const args = {
|
|
78
|
+
const args = {
|
|
79
|
+
busy: false,
|
|
80
|
+
module: this
|
|
81
|
+
};
|
|
65
82
|
await this.emit("moduleBusy", args);
|
|
66
83
|
}
|
|
67
84
|
}
|
|
@@ -76,12 +93,10 @@ var ProxyModule = class extends BaseEmitter {
|
|
|
76
93
|
description.name = this.config.name;
|
|
77
94
|
}
|
|
78
95
|
const discover = await this.discover();
|
|
79
|
-
description.children = compact(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}) ?? []
|
|
84
|
-
);
|
|
96
|
+
description.children = compact(discover?.map((payload) => {
|
|
97
|
+
const address = payload.schema === AddressSchema ? payload.address : void 0;
|
|
98
|
+
return address == this.address ? void 0 : address;
|
|
99
|
+
}) ?? []);
|
|
85
100
|
return description;
|
|
86
101
|
});
|
|
87
102
|
}
|
|
@@ -92,7 +107,13 @@ var ProxyModule = class extends BaseEmitter {
|
|
|
92
107
|
}
|
|
93
108
|
manifest(_depth) {
|
|
94
109
|
const name = this.config.name ?? "Anonymous";
|
|
95
|
-
return {
|
|
110
|
+
return {
|
|
111
|
+
config: {
|
|
112
|
+
name,
|
|
113
|
+
...this.config
|
|
114
|
+
},
|
|
115
|
+
schema: ModuleManifestPayloadSchema
|
|
116
|
+
};
|
|
96
117
|
}
|
|
97
118
|
moduleAddress() {
|
|
98
119
|
throw new Error("Not Implemented");
|
|
@@ -103,7 +124,12 @@ var ProxyModule = class extends BaseEmitter {
|
|
|
103
124
|
async query(query, payloads) {
|
|
104
125
|
return await this.busy(async () => {
|
|
105
126
|
const result = assertEx(await this.bridge.targetQuery(this.address, query, payloads), "Remote Query Failed");
|
|
106
|
-
await this.emit("moduleQueried", {
|
|
127
|
+
await this.emit("moduleQueried", {
|
|
128
|
+
module: this,
|
|
129
|
+
payloads,
|
|
130
|
+
query,
|
|
131
|
+
result
|
|
132
|
+
});
|
|
107
133
|
return result;
|
|
108
134
|
});
|
|
109
135
|
}
|
|
@@ -119,6 +145,15 @@ var ProxyModule = class extends BaseEmitter {
|
|
|
119
145
|
|
|
120
146
|
// src/ModuleResolver.ts
|
|
121
147
|
var BridgeModuleResolver = class _BridgeModuleResolver extends CompositeModuleResolver2 {
|
|
148
|
+
static {
|
|
149
|
+
__name(this, "BridgeModuleResolver");
|
|
150
|
+
}
|
|
151
|
+
bridge;
|
|
152
|
+
wrapperAccount;
|
|
153
|
+
options;
|
|
154
|
+
primed;
|
|
155
|
+
remoteAddresses;
|
|
156
|
+
resolvedModules;
|
|
122
157
|
// TODO: Allow optional ctor param for supplying address for nested Nodes
|
|
123
158
|
// protected readonly address?: string,
|
|
124
159
|
constructor(bridge, wrapperAccount, options) {
|
|
@@ -126,10 +161,9 @@ var BridgeModuleResolver = class _BridgeModuleResolver extends CompositeModuleRe
|
|
|
126
161
|
this.bridge = bridge;
|
|
127
162
|
this.wrapperAccount = wrapperAccount;
|
|
128
163
|
this.options = options;
|
|
164
|
+
this.primed = void 0;
|
|
165
|
+
this.resolvedModules = {};
|
|
129
166
|
}
|
|
130
|
-
primed = void 0;
|
|
131
|
-
remoteAddresses;
|
|
132
|
-
resolvedModules = {};
|
|
133
167
|
get isModuleResolver() {
|
|
134
168
|
return true;
|
|
135
169
|
}
|
|
@@ -138,26 +172,22 @@ var BridgeModuleResolver = class _BridgeModuleResolver extends CompositeModuleRe
|
|
|
138
172
|
}
|
|
139
173
|
async currentResolvedModules() {
|
|
140
174
|
const result = {};
|
|
141
|
-
await Promise.all(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
})
|
|
145
|
-
);
|
|
175
|
+
await Promise.all(Object.entries(this.resolvedModules).map(async ([key, value]) => {
|
|
176
|
+
result[key] = await value;
|
|
177
|
+
}));
|
|
146
178
|
return result;
|
|
147
179
|
}
|
|
148
180
|
async getRemoteAddresses() {
|
|
149
181
|
this.remoteAddresses = this.remoteAddresses ?? (async () => {
|
|
150
182
|
const discover = await this.bridge.targetDiscover(void 0, this.options?.maxDepth);
|
|
151
|
-
return compact2(
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
})
|
|
160
|
-
);
|
|
183
|
+
return compact2(discover?.map((payload) => {
|
|
184
|
+
if (payload.schema === AddressSchema2) {
|
|
185
|
+
const schemaPayload = payload;
|
|
186
|
+
return schemaPayload.address;
|
|
187
|
+
} else {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
}));
|
|
161
191
|
})();
|
|
162
192
|
return await this.remoteAddresses;
|
|
163
193
|
}
|
|
@@ -178,7 +208,10 @@ var BridgeModuleResolver = class _BridgeModuleResolver extends CompositeModuleRe
|
|
|
178
208
|
}
|
|
179
209
|
async resolve(nameOrAddressOrFilter, options) {
|
|
180
210
|
const unfiltered = await (async () => {
|
|
181
|
-
const mutatedOptions = {
|
|
211
|
+
const mutatedOptions = {
|
|
212
|
+
...options,
|
|
213
|
+
maxDepth: (options?.maxDepth ?? _BridgeModuleResolver.defaultMaxDepth) - 1
|
|
214
|
+
};
|
|
182
215
|
await this.prime();
|
|
183
216
|
await this.resolveRemoteModules();
|
|
184
217
|
if (typeof nameOrAddressOrFilter === "string") {
|
|
@@ -212,7 +245,13 @@ var BridgeModuleResolver = class _BridgeModuleResolver extends CompositeModuleRe
|
|
|
212
245
|
return await cached;
|
|
213
246
|
this.resolvedModules[targetAddress] = this.resolvedModules[targetAddress] ?? (async (address) => {
|
|
214
247
|
await this.bridge.targetDiscover(address);
|
|
215
|
-
const mod = new ProxyModule({
|
|
248
|
+
const mod = new ProxyModule({
|
|
249
|
+
address,
|
|
250
|
+
bridge: this.bridge,
|
|
251
|
+
config: {
|
|
252
|
+
schema: ProxyModuleConfigSchema
|
|
253
|
+
}
|
|
254
|
+
});
|
|
216
255
|
try {
|
|
217
256
|
if (isArchivistModule(mod)) {
|
|
218
257
|
return ArchivistWrapper.wrap(mod, this.wrapperAccount);
|
|
@@ -259,7 +298,9 @@ var BridgeModuleResolver = class _BridgeModuleResolver extends CompositeModuleRe
|
|
|
259
298
|
if (filter?.query) {
|
|
260
299
|
return await this.resolveRemoteModulesByQuery(filter);
|
|
261
300
|
}
|
|
262
|
-
return await this.resolveRemoteModulesByAddress({
|
|
301
|
+
return await this.resolveRemoteModulesByAddress({
|
|
302
|
+
address: await this.getRemoteAddresses()
|
|
303
|
+
});
|
|
263
304
|
}
|
|
264
305
|
async resolveRemoteModulesByAddress(filter) {
|
|
265
306
|
return compact2(await Promise.all(filter.address.map((address) => this.resolveByAddress(address))));
|