@xyo-network/module-resolver 2.95.8 → 2.96.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/NameRegistrarTransformer.d.cts.map +1 -1
- package/dist/browser/NameRegistrarTransformer.d.mts.map +1 -1
- package/dist/browser/NameRegistrarTransformer.d.ts.map +1 -1
- package/dist/browser/index.cjs +0 -4
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +0 -4
- package/dist/browser/index.js.map +1 -1
- package/dist/node/NameRegistrarTransformer.d.cts.map +1 -1
- package/dist/node/NameRegistrarTransformer.d.mts.map +1 -1
- package/dist/node/NameRegistrarTransformer.d.ts.map +1 -1
- package/dist/node/index.cjs +0 -4
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +0 -4
- package/dist/node/index.js.map +1 -1
- package/package.json +4 -4
- package/src/NameRegistrarTransformer.ts +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA4BzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA4BzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA4BzE"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -410,7 +410,6 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
|
|
|
410
410
|
};
|
|
411
411
|
|
|
412
412
|
// src/NameRegistrarTransformer.ts
|
|
413
|
-
var import_object2 = require("@xylabs/object");
|
|
414
413
|
var import_diviner_payload_model = require("@xyo-network/diviner-payload-model");
|
|
415
414
|
var import_lru_cache2 = require("lru-cache");
|
|
416
415
|
var NameRegistrarTransformer = class {
|
|
@@ -442,18 +441,15 @@ var NameRegistrarTransformer = class {
|
|
|
442
441
|
schema: import_diviner_payload_model.PayloadDivinerQuerySchema,
|
|
443
442
|
tld: nameParts[1]
|
|
444
443
|
};
|
|
445
|
-
console.log("query:", (0, import_object2.toJsonString)(query));
|
|
446
444
|
const result = await this.registrarDiviner?.divine([
|
|
447
445
|
query
|
|
448
446
|
]);
|
|
449
|
-
console.log("result:", (0, import_object2.toJsonString)(result));
|
|
450
447
|
const resultPayload = result?.shift();
|
|
451
448
|
if (!resultPayload) {
|
|
452
449
|
throw new Error(`Unable to resolve registrar name (failed) [${first}]`);
|
|
453
450
|
}
|
|
454
451
|
if (resultPayload) {
|
|
455
452
|
const address = resultPayload.address?.shift();
|
|
456
|
-
console.log("address:", (0, import_object2.toJsonString)(address));
|
|
457
453
|
if (address) {
|
|
458
454
|
this._cache.set(identifier, address);
|
|
459
455
|
return address;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["export * from './AbstractModuleResolver'\nexport * from './CompositeModuleResolver'\nexport * from './NameRegistrarTransformer'\nexport * from './ResolverEventEmitter'\nexport * from './SimpleModuleResolver'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance\n{\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const value = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance\n{\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({ max, ttl, ...params.cache })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n //resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(all, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return\n }\n\n //resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return cachedResult as T\n }\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(idOrFilter, mutatedOptions)\n }\n\n //recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter((resolver) => resolver.priority === priority)\n const results: (T | undefined)[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n }\n } else {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result = await resolver.resolveIdentifier(id)\n return result\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\n }\n }\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined) ??\n (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n //check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n //check if any of the modules have the id as an address\n for (const module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return compact(\n modules.filter((module) =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n //check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n //not cached, so check registrar\n const query = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n //TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n console.log('address:', toJsonString(address))\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\n }\n // eslint-disable-next-line deprecation/deprecation\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","import_assert","import_module_model","import_assert","import_module_model","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","defaultMaxDepth","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","import_object","import_lru_cache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["export * from './AbstractModuleResolver'\nexport * from './CompositeModuleResolver'\nexport * from './NameRegistrarTransformer'\nexport * from './ResolverEventEmitter'\nexport * from './SimpleModuleResolver'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance\n{\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const value = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance\n{\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({ max, ttl, ...params.cache })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n //resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(all, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return\n }\n\n //resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return cachedResult as T\n }\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(idOrFilter, mutatedOptions)\n }\n\n //recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter((resolver) => resolver.priority === priority)\n const results: (T | undefined)[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n }\n } else {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result = await resolver.resolveIdentifier(id)\n return result\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\n }\n }\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined) ??\n (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n //check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n //check if any of the modules have the id as an address\n for (const module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return compact(\n modules.filter((module) =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n //check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n //not cached, so check registrar\n const query = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n const result = await this.registrarDiviner?.divine([query])\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n //TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\n }\n // eslint-disable-next-line deprecation/deprecation\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","import_assert","import_module_model","import_assert","import_module_model","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","defaultMaxDepth","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","import_lru_cache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","result","divine","resultPayload","Error","address","set","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -382,7 +382,6 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
|
|
|
382
382
|
};
|
|
383
383
|
|
|
384
384
|
// src/NameRegistrarTransformer.ts
|
|
385
|
-
import { toJsonString as toJsonString2 } from "@xylabs/object";
|
|
386
385
|
import { PayloadDivinerQuerySchema } from "@xyo-network/diviner-payload-model";
|
|
387
386
|
import { LRUCache as LRUCache2 } from "lru-cache";
|
|
388
387
|
var NameRegistrarTransformer = class {
|
|
@@ -414,18 +413,15 @@ var NameRegistrarTransformer = class {
|
|
|
414
413
|
schema: PayloadDivinerQuerySchema,
|
|
415
414
|
tld: nameParts[1]
|
|
416
415
|
};
|
|
417
|
-
console.log("query:", toJsonString2(query));
|
|
418
416
|
const result = await this.registrarDiviner?.divine([
|
|
419
417
|
query
|
|
420
418
|
]);
|
|
421
|
-
console.log("result:", toJsonString2(result));
|
|
422
419
|
const resultPayload = result?.shift();
|
|
423
420
|
if (!resultPayload) {
|
|
424
421
|
throw new Error(`Unable to resolve registrar name (failed) [${first}]`);
|
|
425
422
|
}
|
|
426
423
|
if (resultPayload) {
|
|
427
424
|
const address = resultPayload.address?.shift();
|
|
428
|
-
console.log("address:", toJsonString2(address));
|
|
429
425
|
if (address) {
|
|
430
426
|
this._cache.set(identifier, address);
|
|
431
427
|
return address;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance\n{\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const value = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance\n{\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({ max, ttl, ...params.cache })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n //resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(all, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return\n }\n\n //resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return cachedResult as T\n }\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(idOrFilter, mutatedOptions)\n }\n\n //recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter((resolver) => resolver.priority === priority)\n const results: (T | undefined)[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n }\n } else {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result = await resolver.resolveIdentifier(id)\n return result\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\n }\n }\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined) ??\n (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n //check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n //check if any of the modules have the id as an address\n for (const module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return compact(\n modules.filter((module) =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n //check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n //not cached, so check registrar\n const query = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n //TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n console.log('address:', toJsonString(address))\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\n }\n // eslint-disable-next-line deprecation/deprecation\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["assertEx","Base","toJsonString","asModuleInstance","ObjectResolverPriority","AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","assertEx","exists","duplicateModules","ObjectResolverPriority","ResolveHelper","LRUCache","assertEx","isAddress","compact","isAddressModuleFilter","isModuleName","isNameModuleFilter","isQueryModuleFilter","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","defaultMaxDepth","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","toJsonString","PayloadDivinerQuerySchema","LRUCache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|
|
1
|
+
{"version":3,"sources":["../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance\n{\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const value = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance\n{\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({ max, ttl, ...params.cache })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n //resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(all, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return\n }\n\n //resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return cachedResult as T\n }\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(idOrFilter, mutatedOptions)\n }\n\n //recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter((resolver) => resolver.priority === priority)\n const results: (T | undefined)[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n }\n } else {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result = await resolver.resolveIdentifier(id)\n return result\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\n }\n }\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined) ??\n (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n //check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n //check if any of the modules have the id as an address\n for (const module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return compact(\n modules.filter((module) =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n //check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n //not cached, so check registrar\n const query = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n const result = await this.registrarDiviner?.divine([query])\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n //TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\n }\n // eslint-disable-next-line deprecation/deprecation\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["assertEx","Base","toJsonString","asModuleInstance","ObjectResolverPriority","AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","assertEx","exists","duplicateModules","ObjectResolverPriority","ResolveHelper","LRUCache","assertEx","isAddress","compact","isAddressModuleFilter","isModuleName","isNameModuleFilter","isQueryModuleFilter","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","defaultMaxDepth","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","PayloadDivinerQuerySchema","LRUCache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","result","divine","resultPayload","Error","address","set","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA4BzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA4BzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAGzF,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA4BzE"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -417,7 +417,6 @@ __publicField(_CompositeModuleResolver, "defaultMaxDepth", 3);
|
|
|
417
417
|
var CompositeModuleResolver = _CompositeModuleResolver;
|
|
418
418
|
|
|
419
419
|
// src/NameRegistrarTransformer.ts
|
|
420
|
-
var import_object2 = require("@xylabs/object");
|
|
421
420
|
var import_diviner_payload_model = require("@xyo-network/diviner-payload-model");
|
|
422
421
|
var import_lru_cache2 = require("lru-cache");
|
|
423
422
|
var _NameRegistrarTransformer = class _NameRegistrarTransformer {
|
|
@@ -447,18 +446,15 @@ var _NameRegistrarTransformer = class _NameRegistrarTransformer {
|
|
|
447
446
|
schema: import_diviner_payload_model.PayloadDivinerQuerySchema,
|
|
448
447
|
tld: nameParts[1]
|
|
449
448
|
};
|
|
450
|
-
console.log("query:", (0, import_object2.toJsonString)(query));
|
|
451
449
|
const result = await ((_a = this.registrarDiviner) == null ? void 0 : _a.divine([
|
|
452
450
|
query
|
|
453
451
|
]));
|
|
454
|
-
console.log("result:", (0, import_object2.toJsonString)(result));
|
|
455
452
|
const resultPayload = result == null ? void 0 : result.shift();
|
|
456
453
|
if (!resultPayload) {
|
|
457
454
|
throw new Error(`Unable to resolve registrar name (failed) [${first}]`);
|
|
458
455
|
}
|
|
459
456
|
if (resultPayload) {
|
|
460
457
|
const address = (_b = resultPayload.address) == null ? void 0 : _b.shift();
|
|
461
|
-
console.log("address:", (0, import_object2.toJsonString)(address));
|
|
462
458
|
if (address) {
|
|
463
459
|
this._cache.set(identifier, address);
|
|
464
460
|
return address;
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["export * from './AbstractModuleResolver'\nexport * from './CompositeModuleResolver'\nexport * from './NameRegistrarTransformer'\nexport * from './ResolverEventEmitter'\nexport * from './SimpleModuleResolver'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance\n{\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const value = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance\n{\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({ max, ttl, ...params.cache })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n //resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(all, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return\n }\n\n //resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return cachedResult as T\n }\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(idOrFilter, mutatedOptions)\n }\n\n //recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter((resolver) => resolver.priority === priority)\n const results: (T | undefined)[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n }\n } else {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result = await resolver.resolveIdentifier(id)\n return result\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\n }\n }\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined) ??\n (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n //check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n //check if any of the modules have the id as an address\n for (const module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return compact(\n modules.filter((module) =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n //check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n //not cached, so check registrar\n const query = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n //TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n console.log('address:', toJsonString(address))\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\n }\n // eslint-disable-next-line deprecation/deprecation\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","import_assert","import_module_model","import_assert","import_module_model","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","import_object","import_lru_cache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["export * from './AbstractModuleResolver'\nexport * from './CompositeModuleResolver'\nexport * from './NameRegistrarTransformer'\nexport * from './ResolverEventEmitter'\nexport * from './SimpleModuleResolver'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance\n{\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const value = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance\n{\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({ max, ttl, ...params.cache })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n //resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(all, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return\n }\n\n //resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return cachedResult as T\n }\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(idOrFilter, mutatedOptions)\n }\n\n //recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter((resolver) => resolver.priority === priority)\n const results: (T | undefined)[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n }\n } else {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result = await resolver.resolveIdentifier(id)\n return result\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\n }\n }\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined) ??\n (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n //check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n //check if any of the modules have the id as an address\n for (const module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return compact(\n modules.filter((module) =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n //check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n //not cached, so check registrar\n const query = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n const result = await this.registrarDiviner?.divine([query])\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n //TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\n }\n // eslint-disable-next-line deprecation/deprecation\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","import_assert","import_module_model","import_assert","import_module_model","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","import_lru_cache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","result","divine","resultPayload","Error","address","set","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|
package/dist/node/index.js
CHANGED
|
@@ -389,7 +389,6 @@ __publicField(_CompositeModuleResolver, "defaultMaxDepth", 3);
|
|
|
389
389
|
var CompositeModuleResolver = _CompositeModuleResolver;
|
|
390
390
|
|
|
391
391
|
// src/NameRegistrarTransformer.ts
|
|
392
|
-
import { toJsonString as toJsonString2 } from "@xylabs/object";
|
|
393
392
|
import { PayloadDivinerQuerySchema } from "@xyo-network/diviner-payload-model";
|
|
394
393
|
import { LRUCache as LRUCache2 } from "lru-cache";
|
|
395
394
|
var _NameRegistrarTransformer = class _NameRegistrarTransformer {
|
|
@@ -419,18 +418,15 @@ var _NameRegistrarTransformer = class _NameRegistrarTransformer {
|
|
|
419
418
|
schema: PayloadDivinerQuerySchema,
|
|
420
419
|
tld: nameParts[1]
|
|
421
420
|
};
|
|
422
|
-
console.log("query:", toJsonString2(query));
|
|
423
421
|
const result = await ((_a = this.registrarDiviner) == null ? void 0 : _a.divine([
|
|
424
422
|
query
|
|
425
423
|
]));
|
|
426
|
-
console.log("result:", toJsonString2(result));
|
|
427
424
|
const resultPayload = result == null ? void 0 : result.shift();
|
|
428
425
|
if (!resultPayload) {
|
|
429
426
|
throw new Error(`Unable to resolve registrar name (failed) [${first}]`);
|
|
430
427
|
}
|
|
431
428
|
if (resultPayload) {
|
|
432
429
|
const address = (_b = resultPayload.address) == null ? void 0 : _b.shift();
|
|
433
|
-
console.log("address:", toJsonString2(address));
|
|
434
430
|
if (address) {
|
|
435
431
|
this._cache.set(identifier, address);
|
|
436
432
|
return address;
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance\n{\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const value = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance\n{\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({ max, ttl, ...params.cache })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n //resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(all, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return\n }\n\n //resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return cachedResult as T\n }\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(idOrFilter, mutatedOptions)\n }\n\n //recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter((resolver) => resolver.priority === priority)\n const results: (T | undefined)[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n }\n } else {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result = await resolver.resolveIdentifier(id)\n return result\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\n }\n }\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined) ??\n (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n //check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n //check if any of the modules have the id as an address\n for (const module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return compact(\n modules.filter((module) =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n //check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n //not cached, so check registrar\n const query = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n //TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n console.log('address:', toJsonString(address))\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\n }\n // eslint-disable-next-line deprecation/deprecation\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["assertEx","Base","toJsonString","asModuleInstance","ObjectResolverPriority","AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","assertEx","exists","duplicateModules","ObjectResolverPriority","ResolveHelper","LRUCache","assertEx","isAddress","compact","isAddressModuleFilter","isModuleName","isNameModuleFilter","isQueryModuleFilter","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","toJsonString","PayloadDivinerQuerySchema","LRUCache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|
|
1
|
+
{"version":3,"sources":["../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance\n{\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const value = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map((value) =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance\n{\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({ max, ttl, ...params.cache })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n //resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(all, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return\n }\n\n //resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return cachedResult as T\n }\n }\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(idOrFilter, mutatedOptions)\n }\n\n //recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter((resolver) => resolver.priority === priority)\n const results: (T | undefined)[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n }\n } else {\n //wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n //identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result = await resolver.resolveIdentifier(id)\n return result\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\n }\n }\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n for (const mod of module) this.addSingleModule(mod)\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined) ??\n (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n //check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n //check if any of the modules have the id as an address\n for (const module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return compact(\n modules.filter((module) =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n //check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n //not cached, so check registrar\n const query = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n const result = await this.registrarDiviner?.divine([query])\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n //TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\n }\n // eslint-disable-next-line deprecation/deprecation\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["assertEx","Base","toJsonString","asModuleInstance","ObjectResolverPriority","AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","assertEx","exists","duplicateModules","ObjectResolverPriority","ResolveHelper","LRUCache","assertEx","isAddress","compact","isAddressModuleFilter","isModuleName","isNameModuleFilter","isQueryModuleFilter","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","PayloadDivinerQuerySchema","LRUCache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","result","divine","resultPayload","Error","address","set","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|
package/package.json
CHANGED
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"@xylabs/lodash": "^3.1.8",
|
|
17
17
|
"@xylabs/object": "^3.1.8",
|
|
18
18
|
"@xylabs/promise": "^3.1.8",
|
|
19
|
-
"@xyo-network/diviner-model": "~2.
|
|
20
|
-
"@xyo-network/diviner-payload-model": "~2.
|
|
21
|
-
"@xyo-network/module-model": "~2.
|
|
19
|
+
"@xyo-network/diviner-model": "~2.96.0",
|
|
20
|
+
"@xyo-network/diviner-payload-model": "~2.96.0",
|
|
21
|
+
"@xyo-network/module-model": "~2.96.0",
|
|
22
22
|
"lru-cache": "^10.2.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
@@ -67,6 +67,6 @@
|
|
|
67
67
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
68
68
|
},
|
|
69
69
|
"sideEffects": false,
|
|
70
|
-
"version": "2.
|
|
70
|
+
"version": "2.96.0",
|
|
71
71
|
"type": "module"
|
|
72
72
|
}
|
|
@@ -24,9 +24,7 @@ export class NameRegistrarTransformer implements ModuleIdentifierTransformer {
|
|
|
24
24
|
|
|
25
25
|
//not cached, so check registrar
|
|
26
26
|
const query = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }
|
|
27
|
-
console.log('query:', toJsonString(query))
|
|
28
27
|
const result = await this.registrarDiviner?.divine([query])
|
|
29
|
-
console.log('result:', toJsonString(result))
|
|
30
28
|
const resultPayload = result?.shift()
|
|
31
29
|
if (!resultPayload) {
|
|
32
30
|
throw new Error(`Unable to resolve registrar name (failed) [${first}]`)
|
|
@@ -34,7 +32,6 @@ export class NameRegistrarTransformer implements ModuleIdentifierTransformer {
|
|
|
34
32
|
//TODO: Use proper types for this check
|
|
35
33
|
if (resultPayload) {
|
|
36
34
|
const address = (resultPayload as unknown as { address: Address[] }).address?.shift()
|
|
37
|
-
console.log('address:', toJsonString(address))
|
|
38
35
|
if (address) {
|
|
39
36
|
this._cache.set(identifier, address)
|
|
40
37
|
return address
|