@xyo-network/module-wrapper 2.107.6 → 2.109.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/ModuleWrapper.d.cts +12 -16
- package/dist/browser/ModuleWrapper.d.cts.map +1 -1
- package/dist/browser/ModuleWrapper.d.mts +12 -16
- package/dist/browser/ModuleWrapper.d.mts.map +1 -1
- package/dist/browser/ModuleWrapper.d.ts +12 -16
- package/dist/browser/ModuleWrapper.d.ts.map +1 -1
- package/dist/browser/index.cjs +48 -49
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +48 -49
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/models.d.cts +1 -1
- package/dist/browser/models.d.cts.map +1 -1
- package/dist/browser/models.d.mts +1 -1
- package/dist/browser/models.d.mts.map +1 -1
- package/dist/browser/models.d.ts +1 -1
- package/dist/browser/models.d.ts.map +1 -1
- package/dist/neutral/ModuleWrapper.d.cts +12 -16
- package/dist/neutral/ModuleWrapper.d.cts.map +1 -1
- package/dist/neutral/ModuleWrapper.d.mts +12 -16
- package/dist/neutral/ModuleWrapper.d.mts.map +1 -1
- package/dist/neutral/ModuleWrapper.d.ts +12 -16
- package/dist/neutral/ModuleWrapper.d.ts.map +1 -1
- package/dist/neutral/index.cjs +48 -49
- package/dist/neutral/index.cjs.map +1 -1
- package/dist/neutral/index.js +48 -49
- package/dist/neutral/index.js.map +1 -1
- package/dist/neutral/models.d.cts +1 -1
- package/dist/neutral/models.d.cts.map +1 -1
- package/dist/neutral/models.d.mts +1 -1
- package/dist/neutral/models.d.mts.map +1 -1
- package/dist/neutral/models.d.ts +1 -1
- package/dist/neutral/models.d.ts.map +1 -1
- package/dist/node/ModuleWrapper.d.cts +12 -16
- package/dist/node/ModuleWrapper.d.cts.map +1 -1
- package/dist/node/ModuleWrapper.d.mts +12 -16
- package/dist/node/ModuleWrapper.d.mts.map +1 -1
- package/dist/node/ModuleWrapper.d.ts +12 -16
- package/dist/node/ModuleWrapper.d.ts.map +1 -1
- package/dist/node/index.cjs +49 -50
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +49 -50
- package/dist/node/index.js.map +1 -1
- package/dist/node/models.d.cts +1 -1
- package/dist/node/models.d.cts.map +1 -1
- package/dist/node/models.d.mts +1 -1
- package/dist/node/models.d.mts.map +1 -1
- package/dist/node/models.d.ts +1 -1
- package/dist/node/models.d.ts.map +1 -1
- package/package.json +11 -12
- package/src/ModuleWrapper.ts +52 -79
- package/src/models.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/ModuleWrapper.ts"],"sourcesContent":["export * from './models'\nexport * from './ModuleWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Logger } from '@xylabs/logger'\nimport { Base } from '@xylabs/object'\nimport { Promisable, PromiseEx } from '@xylabs/promise'\nimport { Account } from '@xyo-network/account'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { QueryBoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload } from '@xyo-network/manifest-model'\nimport { EventAnyListener, EventListener } from '@xyo-network/module-events'\nimport {\n AddressPreviousHashPayload,\n AddressPreviousHashSchema,\n asAttachableModuleInstance,\n asModuleInstance,\n AttachableModuleInstance,\n duplicateModules,\n InstanceTypeCheck,\n isModule,\n isModuleInstance,\n Module,\n ModuleAddressQuery,\n ModuleAddressQuerySchema,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleManifestQuery,\n ModuleManifestQuerySchema,\n ModuleQueryResult,\n ModuleResolverInstance,\n ModuleStateQuery,\n ModuleStateQuerySchema,\n ModuleStatus,\n ModuleTypeCheck,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\nimport { ModuleError, ModuleErrorSchema, Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { ModuleWrapperParams } from './models'\n\nexport type ConstructableModuleWrapper<TWrapper extends ModuleWrapper> = {\n defaultLogger?: Logger\n instanceIdentityCheck: InstanceTypeCheck\n moduleIdentityCheck: ModuleTypeCheck\n requiredQueries: string[]\n new (params: ModuleWrapperParams<TWrapper['module']>): TWrapper\n\n canWrap(module: Module | undefined): boolean\n\n is<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper?: any,\n ): wrapper is TModuleWrapper\n\n /** @deprecated pass an account for second parameter */\n tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n ): TModuleWrapper | undefined\n tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper | undefined\n\n /** @deprecated pass an account for second parameter */\n wrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, module: Module | undefined): TModuleWrapper\n wrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper\n}\n\nexport function constructableModuleWrapper<TWrapper extends ModuleWrapper>() {\n return <U extends ConstructableModuleWrapper<TWrapper>>(constructor: U) => {\n constructor\n }\n}\n\n@constructableModuleWrapper()\nexport class ModuleWrapper<TWrappedModule extends Module = Module>\n extends Base<Exclude<Omit<TWrappedModule['params'], 'config'> & { config: Exclude<TWrappedModule['params']['config'], undefined> }, undefined>>\n implements AttachableModuleInstance<TWrappedModule['params'], TWrappedModule['eventData']>\n{\n static instanceIdentityCheck: InstanceTypeCheck = isModuleInstance\n static moduleIdentityCheck: ModuleTypeCheck = isModule\n static requiredQueries: string[] = [ModuleStateQuerySchema]\n\n eventData = {} as TWrappedModule['eventData']\n\n protected readonly cachedCalls = new LRUCache<string, Payload[]>({ max: 1000, ttl: 1000 * 60, ttlAutopurge: true })\n\n protected readonly wrapperParams: ModuleWrapperParams<TWrappedModule>\n\n private _parents: ModuleInstance[] = []\n private _status: ModuleStatus = 'wrapped'\n\n constructor(params: ModuleWrapperParams<TWrappedModule>) {\n const mutatedWrapperParams = { ...params } as ModuleWrapperParams<TWrappedModule>\n const mutatedParams = { ...params.module.params, config: { ...params.module.params.config } } as Exclude<\n Omit<TWrappedModule['params'], 'config'> & { config: Exclude<TWrappedModule['params']['config'], undefined> },\n undefined\n >\n\n //set the root params to the wrapped module params\n super(mutatedParams)\n this.wrapperParams = mutatedWrapperParams\n }\n\n get account() {\n return this.wrapperParams.account\n }\n\n get additionalSigners() {\n return this.wrapperParams.additionalSigners ?? []\n }\n\n get address() {\n return this.module.address\n }\n\n get config() {\n return this.module.config as Exclude<TWrappedModule['params']['config'], undefined>\n }\n\n get downResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance: AttachableModuleInstance | undefined = asAttachableModuleInstance(this.module)\n if (instance) {\n return instance.downResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n get id() {\n return this.module.id\n }\n\n get modName() {\n return this.module.modName\n }\n\n get module() {\n return this.wrapperParams.module\n }\n\n get priority() {\n return ObjectResolverPriority.Low\n }\n\n get privateResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance = asAttachableModuleInstance(this.module)\n if (instance) {\n return instance.privateResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n get queries(): string[] {\n return this.module.queries\n }\n\n get status() {\n return this._status\n }\n\n get upResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance = asAttachableModuleInstance(this.module)\n if (instance) {\n return instance.upResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n protected set status(value: ModuleStatus) {\n if (this._status !== 'dead') {\n this._status = value\n }\n }\n\n static canWrap(module?: Module) {\n return !!module && this.moduleIdentityCheck(module)\n }\n\n static hasRequiredQueries(module: Module) {\n return this.missingRequiredQueries(module).length === 0\n }\n\n static is<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper: any,\n ): wrapper is TModuleWrapper {\n return wrapper instanceof this\n }\n\n static missingRequiredQueries(module: Module): string[] {\n const moduleQueries = module.queries\n return compact(\n this.requiredQueries.map((query) => {\n return moduleQueries.includes(query) ? null : query\n }),\n )\n }\n\n /** @deprecated pass an account for second parameter */\n static tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n ): TModuleWrapper | undefined\n static tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper | undefined\n static tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account?: AccountInstance,\n checkIdentity = true,\n ): TModuleWrapper | undefined {\n if (!checkIdentity || this.canWrap(module)) {\n if (!account) {\n this.defaultLogger?.info('Anonymous Module Wrapper Created')\n }\n return new this({ account: account ?? Account.randomSync(), module: module as TModuleWrapper['module'] })\n }\n }\n\n static with<TModuleWrapper extends ModuleWrapper, R extends Promisable<void> = void>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n module: any,\n\n closure: (module: TModuleWrapper) => R,\n ): R | undefined {\n return this.is(module) ? closure(module) : undefined\n }\n\n /** @deprecated pass an account for second parameter */\n static wrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, module: Module | undefined): TModuleWrapper\n static wrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper\n static wrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account?: AccountInstance,\n checkIdentity = true,\n ): TModuleWrapper {\n assertEx(!checkIdentity || (module && this.moduleIdentityCheck(module)), () => `Passed module failed identity check: ${module?.config?.schema}`)\n return assertEx(this.tryWrap(module, account ?? Account.randomSync(), checkIdentity), () => 'Unable to wrap module as ModuleWrapper')\n }\n\n addParent(module: ModuleInstance) {\n const existingEntry = this._parents.find((parent) => parent.address === module.address)\n if (!existingEntry) {\n this._parents.push(module)\n }\n }\n\n async addressPreviousHash(): Promise<AddressPreviousHashPayload> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return assertEx(\n (await this.sendQuery(queryPayload)).find((payload) => payload.schema === AddressPreviousHashSchema) as WithMeta<AddressPreviousHashPayload>,\n () => 'Result did not include correct payload',\n )\n }\n\n clearListeners(eventNames: Parameters<TWrappedModule['clearListeners']>[0]) {\n return this.module.clearListeners(eventNames)\n }\n\n emit(eventName: Parameters<TWrappedModule['emit']>[0], eventArgs: Parameters<TWrappedModule['emit']>[1]) {\n return this.module.emit(eventName, eventArgs)\n }\n\n emitSerial(eventName: Parameters<TWrappedModule['emitSerial']>[0], eventArgs: Parameters<TWrappedModule['emitSerial']>[1]) {\n return this.module.emitSerial(eventName, eventArgs)\n }\n\n listenerCount(eventNames: Parameters<TWrappedModule['listenerCount']>[0]) {\n return this.module.listenerCount(eventNames)\n }\n\n async manifest(maxDepth?: number): Promise<ModuleManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth === undefined ? {} : { maxDepth }) }\n return (await this.sendQuery(queryPayload))[0] as WithMeta<ModuleManifestPayload>\n }\n\n async manifestQuery(account: AccountInstance, maxDepth?: number): Promise<ModuleQueryResult<ModuleManifestPayload>> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth === undefined ? {} : { maxDepth }) }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async moduleAddress(): Promise<AddressPreviousHashPayload[]> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return (await this.sendQuery(queryPayload)) as WithMeta<AddressPreviousHashPayload>[]\n }\n\n off<TEventName extends keyof TWrappedModule['eventData']>(\n eventNames: TEventName,\n listener: EventListener<TWrappedModule['eventData'][TEventName]>,\n ) {\n return this.module.off(eventNames, listener)\n }\n\n offAny(listener: EventAnyListener) {\n return this.module.offAny(listener)\n }\n\n on<TEventName extends keyof TWrappedModule['eventData']>(eventNames: TEventName, listener: EventListener<TWrappedModule['eventData'][TEventName]>) {\n return this.module.on(eventNames, listener)\n }\n\n onAny(listener: EventAnyListener) {\n return this.module.onAny(listener)\n }\n\n once<TEventName extends keyof TWrappedModule['eventData']>(\n eventName: TEventName,\n listener: EventListener<TWrappedModule['eventData'][TEventName]>,\n ) {\n return this.module.once(eventName, listener)\n }\n\n parents(): Promisable<ModuleInstance[]> {\n return this._parents\n }\n\n async previousHash(): Promise<string | undefined> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return ((await this.sendQuery(queryPayload)).pop() as WithMeta<AddressPreviousHashPayload>).previousHash\n }\n\n async previousHashQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPreviousHashPayload>> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async privateChildren(): Promise<ModuleInstance[]> {\n if (isModuleInstance(this.module)) {\n return await this.module.privateChildren()\n }\n return []\n }\n\n async publicChildren(): Promise<ModuleInstance[]> {\n if (isModuleInstance(this.module)) {\n return await this.module.publicChildren()\n }\n return []\n }\n\n async query<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {\n return await this.module.query(query, payloads)\n }\n\n queryable<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]) {\n return this.module.queryable(query, payloads)\n }\n\n removeParent(address: Address) {\n this._parents = this._parents.filter((item) => item.address !== address)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n async resolve<T extends ModuleInstance = ModuleInstance>(): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T> | undefined, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T> | undefined,\n ): Promise<ModuleInstance>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T> | undefined, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleIdentifier | ModuleFilter<T> = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n const instance = asModuleInstance(this.module)\n if (instance?.['resolve']) {\n if (idOrFilter === '*') {\n return await instance.resolve<T>('*', options)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return await instance.resolve<T>(idOrFilter, options)\n }\n default: {\n return await instance.resolve<T>(idOrFilter, options)\n }\n }\n }\n return typeof idOrFilter === 'string' && idOrFilter !== '*' ? undefined : []\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n async siblings(): Promise<ModuleInstance[]> {\n return (await Promise.all((await this.parents()).map((parent) => parent.publicChildren()))).flat().filter(duplicateModules)\n }\n\n async state(): Promise<Payload[]> {\n const cachedResult = this.cachedCalls.get('state')\n if (cachedResult) {\n return cachedResult\n }\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n const result = await this.sendQuery(queryPayload)\n this.cachedCalls.set('state', result)\n return result\n }\n\n async stateQuery(_account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n return await this.sendQueryRaw(queryPayload)\n }\n\n protected bindQuery<T extends Query>(\n query: T,\n payloads?: Payload[],\n account = this.account,\n additionalSigners = this.additionalSigners,\n ): PromiseEx<[QueryBoundWitness, Payload[], ModuleError[]], AccountInstance> {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n const promise = new PromiseEx<[QueryBoundWitness, Payload[], ModuleError[]], AccountInstance>(async (resolve) => {\n const result = await this.bindQueryInternal(query, payloads, account, additionalSigners)\n resolve?.(result)\n return result\n }, account)\n return promise\n }\n\n protected async bindQueryInternal<T extends Query>(\n query: T,\n payloads?: Payload[],\n account = this.account,\n additionalSigners = this.additionalSigners,\n ): Promise<[QueryBoundWitness, Payload[], ModuleError[]]> {\n const builder = await new QueryBoundWitnessBuilder().payloads(payloads).query(query)\n const accounts = [account, ...additionalSigners].filter(exists)\n const result = await (account ? builder.signers(accounts) : builder).build()\n return result\n }\n\n protected async filterErrors(result: ModuleQueryResult): Promise<ModuleError[]> {\n const wrapper = await BoundWitnessWrapper.wrap(result[0], result[1])\n return wrapper.payloadsBySchema<WithMeta<ModuleError>>(ModuleErrorSchema)\n }\n\n protected async sendQuery<T extends Query, P extends Payload = Payload, R extends Payload = Payload>(\n queryPayload: T,\n payloads?: P[],\n ): Promise<WithMeta<R>[]> {\n const queryResults = await this.sendQueryRaw(queryPayload, payloads)\n const [, resultPayloads, errors] = queryResults\n\n /* TODO: Figure out what to do with the returning BW. Should we store them in a queue in case the caller wants to see them? */\n\n if (errors && errors.length > 0) {\n /* TODO: Figure out how to rollup multiple Errors */\n throw errors[0]\n }\n\n return resultPayloads as WithMeta<R>[]\n }\n\n protected async sendQueryRaw<T extends Query, P extends Payload = Payload, R extends Payload = Payload>(\n queryPayload: T,\n payloads?: P[],\n account?: AccountInstance,\n ): Promise<ModuleQueryResult<R>> {\n // Bind them\n const query = await this.bindQuery(queryPayload, payloads, account)\n\n // Send them off\n return (await this.query(query[0], query[1])) as ModuleQueryResult<R>\n }\n}\n"],"mappings":"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","names":["constructableModuleWrapper","constructor","ModuleWrapper","Base","instanceIdentityCheck","isModuleInstance","moduleIdentityCheck","isModule","requiredQueries","ModuleStateQuerySchema","eventData","cachedCalls","LRUCache","max","ttl","ttlAutopurge","wrapperParams","_parents","_status","params","mutatedWrapperParams","mutatedParams","module","config","account","additionalSigners","address","downResolver","instance","asAttachableModuleInstance","Error","id","modName","priority","ObjectResolverPriority","Low","privateResolver","queries","status","upResolver","value","canWrap","hasRequiredQueries","missingRequiredQueries","length","is","wrapper","moduleQueries","compact","map","query","includes","tryWrap","checkIdentity","defaultLogger","info","Account","randomSync","with","closure","undefined","wrap","assertEx","schema","addParent","existingEntry","find","parent","push","addressPreviousHash","queryPayload","ModuleAddressQuerySchema","sendQuery","payload","AddressPreviousHashSchema","clearListeners","eventNames","emit","eventName","eventArgs","emitSerial","listenerCount","manifest","maxDepth","ModuleManifestQuerySchema","manifestQuery","sendQueryRaw","moduleAddress","off","listener","offAny","on","onAny","once","parents","previousHash","pop","previousHashQuery","privateChildren","publicChildren","payloads","queryable","removeParent","filter","item","resolve","idOrFilter","options","asModuleInstance","resolvePrivate","_options","Promise","siblings","all","flat","duplicateModules","state","cachedResult","get","result","set","stateQuery","_account","bindQuery","promise","PromiseEx","bindQueryInternal","builder","QueryBoundWitnessBuilder","accounts","exists","signers","build","filterErrors","BoundWitnessWrapper","payloadsBySchema","ModuleErrorSchema","queryResults","resultPayloads","errors"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/ModuleWrapper.ts"],"sourcesContent":["export * from './models'\nexport * from './ModuleWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Logger } from '@xylabs/logger'\nimport { Base } from '@xylabs/object'\nimport { Promisable, PromiseEx } from '@xylabs/promise'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { QueryBoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload } from '@xyo-network/manifest-model'\nimport { EventAnyListener, EventListener } from '@xyo-network/module-events'\nimport {\n AddressPreviousHashPayload,\n AddressPreviousHashSchema,\n asAttachableModuleInstance,\n asModuleInstance,\n AttachableModuleInstance,\n duplicateModules,\n InstanceTypeCheck,\n isModule,\n isModuleInstance,\n Module,\n ModuleAddressQuery,\n ModuleAddressQuerySchema,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleManifestQuery,\n ModuleManifestQuerySchema,\n ModuleQueryResult,\n ModuleResolverInstance,\n ModuleStateQuery,\n ModuleStateQuerySchema,\n ModuleStatus,\n ModuleTypeCheck,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\nimport { ModuleError, ModuleErrorSchema, Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { ModuleWrapperParams } from './models'\n\nexport type ConstructableModuleWrapper<TWrapper extends ModuleWrapper> = {\n defaultLogger?: Logger\n instanceIdentityCheck: InstanceTypeCheck\n moduleIdentityCheck: ModuleTypeCheck\n requiredQueries: string[]\n new (params: ModuleWrapperParams<TWrapper['mod']>): TWrapper\n\n canWrap(mod: Module | undefined): boolean\n\n is<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper?: any,\n ): wrapper is TModuleWrapper\n\n tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n mod: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper | undefined\n\n wrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n mod: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper\n}\n\nexport function constructableModuleWrapper<TWrapper extends ModuleWrapper>() {\n return <U extends ConstructableModuleWrapper<TWrapper>>(constructor: U) => {\n constructor\n }\n}\n\n@constructableModuleWrapper()\nexport class ModuleWrapper<TWrappedModule extends Module = Module>\n extends Base<Exclude<Omit<TWrappedModule['params'], 'config'> & { config: Exclude<TWrappedModule['params']['config'], undefined> }, undefined>>\n implements AttachableModuleInstance<TWrappedModule['params'], TWrappedModule['eventData']>\n{\n static instanceIdentityCheck: InstanceTypeCheck = isModuleInstance\n static moduleIdentityCheck: ModuleTypeCheck = isModule\n static requiredQueries: string[] = [ModuleStateQuerySchema]\n\n eventData = {} as TWrappedModule['eventData']\n\n protected readonly cachedCalls = new LRUCache<string, Payload[]>({ max: 1000, ttl: 1000 * 60, ttlAutopurge: true })\n\n protected readonly wrapperParams: ModuleWrapperParams<TWrappedModule>\n\n private _parents: ModuleInstance[] = []\n private _status: ModuleStatus = 'wrapped'\n\n constructor(params: ModuleWrapperParams<TWrappedModule>) {\n const mutatedWrapperParams = { ...params } as ModuleWrapperParams<TWrappedModule>\n const mutatedParams = { ...params.mod.params, config: { ...params.mod.params.config } } as Exclude<\n Omit<TWrappedModule['params'], 'config'> & { config: Exclude<TWrappedModule['params']['config'], undefined> },\n undefined\n >\n\n //set the root params to the wrapped mod params\n super(mutatedParams)\n this.wrapperParams = mutatedWrapperParams\n }\n\n get account() {\n return this.wrapperParams.account\n }\n\n get additionalSigners() {\n return this.wrapperParams.additionalSigners ?? []\n }\n\n get address() {\n return this.mod.address\n }\n\n get config() {\n return this.mod.config as Exclude<TWrappedModule['params']['config'], undefined>\n }\n\n get downResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance: AttachableModuleInstance | undefined = asAttachableModuleInstance(this.mod)\n if (instance) {\n return instance.downResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n get id() {\n return this.mod.id\n }\n\n get mod() {\n return this.wrapperParams.mod\n }\n\n get modName() {\n return this.mod.modName\n }\n\n get priority() {\n return ObjectResolverPriority.Low\n }\n\n get privateResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance = asAttachableModuleInstance(this.mod)\n if (instance) {\n return instance.privateResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n get queries(): string[] {\n return this.mod.queries\n }\n\n get status() {\n return this._status\n }\n\n get upResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance = asAttachableModuleInstance(this.mod)\n if (instance) {\n return instance.upResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n protected set status(value: ModuleStatus) {\n if (this._status !== 'dead') {\n this._status = value\n }\n }\n\n static canWrap(mod?: Module) {\n return !!mod && this.moduleIdentityCheck(mod)\n }\n\n static hasRequiredQueries(mod: Module) {\n return this.missingRequiredQueries(mod).length === 0\n }\n\n static is<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper: any,\n ): wrapper is TModuleWrapper {\n return wrapper instanceof this\n }\n\n static missingRequiredQueries(mod: Module): string[] {\n const modQueries = mod.queries\n return compact(\n this.requiredQueries.map((query) => {\n return modQueries.includes(query) ? null : query\n }),\n )\n }\n\n static tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n mod: Module | undefined,\n account: AccountInstance,\n checkIdentity = true,\n ): TModuleWrapper | undefined {\n if (!checkIdentity || this.canWrap(mod)) {\n if (!account) {\n this.defaultLogger?.info('Anonymous Module Wrapper Created')\n }\n return new this({ account, mod: mod as TModuleWrapper['mod'] })\n }\n }\n\n static with<TModuleWrapper extends ModuleWrapper, R extends Promisable<void> = void>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mod: any,\n\n closure: (mod: TModuleWrapper) => R,\n ): R | undefined {\n return this.is(mod) ? closure(mod) : undefined\n }\n\n static wrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n mod: Module | undefined,\n account: AccountInstance,\n checkIdentity = true,\n ): TModuleWrapper {\n assertEx(!checkIdentity || (mod && this.moduleIdentityCheck(mod)), () => `Passed mod failed identity check: ${mod?.config?.schema}`)\n return assertEx(this.tryWrap(mod, account, checkIdentity), () => 'Unable to wrap mod as ModuleWrapper')\n }\n\n addParent(mod: ModuleInstance) {\n const existingEntry = this._parents.find((parent) => parent.address === mod.address)\n if (!existingEntry) {\n this._parents.push(mod)\n }\n }\n\n async addressPreviousHash(): Promise<AddressPreviousHashPayload> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return assertEx(\n (await this.sendQuery(queryPayload)).find((payload) => payload.schema === AddressPreviousHashSchema) as WithMeta<AddressPreviousHashPayload>,\n () => 'Result did not include correct payload',\n )\n }\n\n clearListeners(eventNames: Parameters<TWrappedModule['clearListeners']>[0]) {\n return this.mod.clearListeners(eventNames)\n }\n\n emit(eventName: Parameters<TWrappedModule['emit']>[0], eventArgs: Parameters<TWrappedModule['emit']>[1]) {\n return this.mod.emit(eventName, eventArgs)\n }\n\n emitSerial(eventName: Parameters<TWrappedModule['emitSerial']>[0], eventArgs: Parameters<TWrappedModule['emitSerial']>[1]) {\n return this.mod.emitSerial(eventName, eventArgs)\n }\n\n listenerCount(eventNames: Parameters<TWrappedModule['listenerCount']>[0]) {\n return this.mod.listenerCount(eventNames)\n }\n\n async manifest(maxDepth?: number): Promise<ModuleManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth === undefined ? {} : { maxDepth }) }\n return (await this.sendQuery(queryPayload))[0] as WithMeta<ModuleManifestPayload>\n }\n\n async manifestQuery(account: AccountInstance, maxDepth?: number): Promise<ModuleQueryResult<ModuleManifestPayload>> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth === undefined ? {} : { maxDepth }) }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async moduleAddress(): Promise<AddressPreviousHashPayload[]> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return (await this.sendQuery(queryPayload)) as WithMeta<AddressPreviousHashPayload>[]\n }\n\n off<TEventName extends keyof TWrappedModule['eventData']>(\n eventNames: TEventName,\n listener: EventListener<TWrappedModule['eventData'][TEventName]>,\n ) {\n return this.mod.off(eventNames, listener)\n }\n\n offAny(listener: EventAnyListener) {\n return this.mod.offAny(listener)\n }\n\n on<TEventName extends keyof TWrappedModule['eventData']>(eventNames: TEventName, listener: EventListener<TWrappedModule['eventData'][TEventName]>) {\n return this.mod.on(eventNames, listener)\n }\n\n onAny(listener: EventAnyListener) {\n return this.mod.onAny(listener)\n }\n\n once<TEventName extends keyof TWrappedModule['eventData']>(\n eventName: TEventName,\n listener: EventListener<TWrappedModule['eventData'][TEventName]>,\n ) {\n return this.mod.once(eventName, listener)\n }\n\n parents(): Promisable<ModuleInstance[]> {\n return this._parents\n }\n\n async previousHash(): Promise<string | undefined> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return ((await this.sendQuery(queryPayload)).pop() as WithMeta<AddressPreviousHashPayload>).previousHash\n }\n\n async previousHashQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPreviousHashPayload>> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async privateChildren(): Promise<ModuleInstance[]> {\n if (isModuleInstance(this.mod)) {\n return await this.mod.privateChildren()\n }\n return []\n }\n\n async publicChildren(): Promise<ModuleInstance[]> {\n if (isModuleInstance(this.mod)) {\n return await this.mod.publicChildren()\n }\n return []\n }\n\n async query<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {\n return await this.mod.query(query, payloads)\n }\n\n queryable<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]) {\n return this.mod.queryable(query, payloads)\n }\n\n removeParent(address: Address) {\n this._parents = this._parents.filter((item) => item.address !== address)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n async resolve<T extends ModuleInstance = ModuleInstance>(): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T> | undefined, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T> | undefined,\n ): Promise<ModuleInstance>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T> | undefined, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleIdentifier | ModuleFilter<T> = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n const instance = asModuleInstance(this.mod)\n if (instance?.['resolve']) {\n if (idOrFilter === '*') {\n return await instance.resolve<T>('*', options)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return await instance.resolve<T>(idOrFilter, options)\n }\n default: {\n return await instance.resolve<T>(idOrFilter, options)\n }\n }\n }\n return typeof idOrFilter === 'string' && idOrFilter !== '*' ? undefined : []\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n async siblings(): Promise<ModuleInstance[]> {\n return (await Promise.all((await this.parents()).map((parent) => parent.publicChildren()))).flat().filter(duplicateModules)\n }\n\n async state(): Promise<Payload[]> {\n const cachedResult = this.cachedCalls.get('state')\n if (cachedResult) {\n return cachedResult\n }\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n const result = await this.sendQuery(queryPayload)\n this.cachedCalls.set('state', result)\n return result\n }\n\n async stateQuery(_account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n return await this.sendQueryRaw(queryPayload)\n }\n\n protected bindQuery<T extends Query>(\n query: T,\n payloads?: Payload[],\n account = this.account,\n additionalSigners = this.additionalSigners,\n ): PromiseEx<[QueryBoundWitness, Payload[], ModuleError[]], AccountInstance> {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n const promise = new PromiseEx<[QueryBoundWitness, Payload[], ModuleError[]], AccountInstance>(async (resolve) => {\n const result = await this.bindQueryInternal(query, payloads, account, additionalSigners)\n resolve?.(result)\n return result\n }, account)\n return promise\n }\n\n protected async bindQueryInternal<T extends Query>(\n query: T,\n payloads?: Payload[],\n account = this.account,\n additionalSigners = this.additionalSigners,\n ): Promise<[QueryBoundWitness, Payload[], ModuleError[]]> {\n const builder = await new QueryBoundWitnessBuilder().payloads(payloads).query(query)\n const accounts = [account, ...additionalSigners].filter(exists)\n const result = await (account ? builder.signers(accounts) : builder).build()\n return result\n }\n\n protected async filterErrors(result: ModuleQueryResult): Promise<ModuleError[]> {\n const wrapper = await BoundWitnessWrapper.wrap(result[0], result[1])\n return wrapper.payloadsBySchema<WithMeta<ModuleError>>(ModuleErrorSchema)\n }\n\n protected async sendQuery<T extends Query, P extends Payload = Payload, R extends Payload = Payload>(\n queryPayload: T,\n payloads?: P[],\n ): Promise<WithMeta<R>[]> {\n const queryResults = await this.sendQueryRaw(queryPayload, payloads)\n const [, resultPayloads, errors] = queryResults\n\n /* TODO: Figure out what to do with the returning BW. Should we store them in a queue in case the caller wants to see them? */\n\n if (errors && errors.length > 0) {\n /* TODO: Figure out how to rollup multiple Errors */\n throw errors[0]\n }\n\n return resultPayloads as WithMeta<R>[]\n }\n\n protected async sendQueryRaw<T extends Query, P extends Payload = Payload, R extends Payload = Payload>(\n queryPayload: T,\n payloads?: P[],\n account?: AccountInstance,\n ): Promise<ModuleQueryResult<R>> {\n // Bind them\n const query = await this.bindQuery(queryPayload, payloads, account)\n\n // Send them off\n return (await this.query(query[0], query[1])) as ModuleQueryResult<R>\n }\n}\n"],"mappings":"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","names":["constructableModuleWrapper","constructor","ModuleWrapper","Base","instanceIdentityCheck","isModuleInstance","moduleIdentityCheck","isModule","requiredQueries","ModuleStateQuerySchema","eventData","cachedCalls","LRUCache","max","ttl","ttlAutopurge","wrapperParams","_parents","_status","params","mutatedWrapperParams","mutatedParams","mod","config","account","additionalSigners","address","downResolver","instance","asAttachableModuleInstance","Error","id","modName","priority","ObjectResolverPriority","Low","privateResolver","queries","status","upResolver","value","canWrap","hasRequiredQueries","missingRequiredQueries","length","is","wrapper","modQueries","compact","map","query","includes","tryWrap","checkIdentity","defaultLogger","info","with","closure","undefined","wrap","assertEx","schema","addParent","existingEntry","find","parent","push","addressPreviousHash","queryPayload","ModuleAddressQuerySchema","sendQuery","payload","AddressPreviousHashSchema","clearListeners","eventNames","emit","eventName","eventArgs","emitSerial","listenerCount","manifest","maxDepth","ModuleManifestQuerySchema","manifestQuery","sendQueryRaw","moduleAddress","off","listener","offAny","on","onAny","once","parents","previousHash","pop","previousHashQuery","privateChildren","publicChildren","payloads","queryable","removeParent","filter","item","resolve","idOrFilter","options","asModuleInstance","resolvePrivate","_options","Promise","siblings","all","flat","duplicateModules","state","cachedResult","get","result","set","stateQuery","_account","bindQuery","promise","PromiseEx","bindQueryInternal","builder","QueryBoundWitnessBuilder","accounts","exists","signers","build","filterErrors","BoundWitnessWrapper","payloadsBySchema","ModuleErrorSchema","queryResults","resultPayloads","errors"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -7,7 +7,6 @@ import { exists } from "@xylabs/exists";
|
|
|
7
7
|
import { compact } from "@xylabs/lodash";
|
|
8
8
|
import { Base } from "@xylabs/object";
|
|
9
9
|
import { PromiseEx } from "@xylabs/promise";
|
|
10
|
-
import { Account } from "@xyo-network/account";
|
|
11
10
|
import { QueryBoundWitnessBuilder } from "@xyo-network/boundwitness-builder";
|
|
12
11
|
import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
|
|
13
12
|
import { AddressPreviousHashSchema, asAttachableModuleInstance, asModuleInstance, duplicateModules, isModule, isModuleInstance, ModuleAddressQuerySchema, ModuleManifestQuerySchema, ModuleStateQuerySchema, ObjectResolverPriority } from "@xyo-network/module-model";
|
|
@@ -53,9 +52,9 @@ var ModuleWrapper = class extends Base {
|
|
|
53
52
|
...params
|
|
54
53
|
};
|
|
55
54
|
const mutatedParams = {
|
|
56
|
-
...params.
|
|
55
|
+
...params.mod.params,
|
|
57
56
|
config: {
|
|
58
|
-
...params.
|
|
57
|
+
...params.mod.params.config
|
|
59
58
|
}
|
|
60
59
|
};
|
|
61
60
|
super(mutatedParams);
|
|
@@ -68,45 +67,45 @@ var ModuleWrapper = class extends Base {
|
|
|
68
67
|
return this.wrapperParams.additionalSigners ?? [];
|
|
69
68
|
}
|
|
70
69
|
get address() {
|
|
71
|
-
return this.
|
|
70
|
+
return this.mod.address;
|
|
72
71
|
}
|
|
73
72
|
get config() {
|
|
74
|
-
return this.
|
|
73
|
+
return this.mod.config;
|
|
75
74
|
}
|
|
76
75
|
get downResolver() {
|
|
77
|
-
const instance = asAttachableModuleInstance(this.
|
|
76
|
+
const instance = asAttachableModuleInstance(this.mod);
|
|
78
77
|
if (instance) {
|
|
79
78
|
return instance.downResolver;
|
|
80
79
|
}
|
|
81
80
|
throw new Error("Unsupported");
|
|
82
81
|
}
|
|
83
82
|
get id() {
|
|
84
|
-
return this.
|
|
83
|
+
return this.mod.id;
|
|
85
84
|
}
|
|
86
|
-
get
|
|
87
|
-
return this.
|
|
85
|
+
get mod() {
|
|
86
|
+
return this.wrapperParams.mod;
|
|
88
87
|
}
|
|
89
|
-
get
|
|
90
|
-
return this.
|
|
88
|
+
get modName() {
|
|
89
|
+
return this.mod.modName;
|
|
91
90
|
}
|
|
92
91
|
get priority() {
|
|
93
92
|
return ObjectResolverPriority.Low;
|
|
94
93
|
}
|
|
95
94
|
get privateResolver() {
|
|
96
|
-
const instance = asAttachableModuleInstance(this.
|
|
95
|
+
const instance = asAttachableModuleInstance(this.mod);
|
|
97
96
|
if (instance) {
|
|
98
97
|
return instance.privateResolver;
|
|
99
98
|
}
|
|
100
99
|
throw new Error("Unsupported");
|
|
101
100
|
}
|
|
102
101
|
get queries() {
|
|
103
|
-
return this.
|
|
102
|
+
return this.mod.queries;
|
|
104
103
|
}
|
|
105
104
|
get status() {
|
|
106
105
|
return this._status;
|
|
107
106
|
}
|
|
108
107
|
get upResolver() {
|
|
109
|
-
const instance = asAttachableModuleInstance(this.
|
|
108
|
+
const instance = asAttachableModuleInstance(this.mod);
|
|
110
109
|
if (instance) {
|
|
111
110
|
return instance.upResolver;
|
|
112
111
|
}
|
|
@@ -117,43 +116,43 @@ var ModuleWrapper = class extends Base {
|
|
|
117
116
|
this._status = value;
|
|
118
117
|
}
|
|
119
118
|
}
|
|
120
|
-
static canWrap(
|
|
121
|
-
return !!
|
|
119
|
+
static canWrap(mod) {
|
|
120
|
+
return !!mod && this.moduleIdentityCheck(mod);
|
|
122
121
|
}
|
|
123
|
-
static hasRequiredQueries(
|
|
124
|
-
return this.missingRequiredQueries(
|
|
122
|
+
static hasRequiredQueries(mod) {
|
|
123
|
+
return this.missingRequiredQueries(mod).length === 0;
|
|
125
124
|
}
|
|
126
125
|
static is(wrapper) {
|
|
127
126
|
return wrapper instanceof this;
|
|
128
127
|
}
|
|
129
|
-
static missingRequiredQueries(
|
|
130
|
-
const
|
|
128
|
+
static missingRequiredQueries(mod) {
|
|
129
|
+
const modQueries = mod.queries;
|
|
131
130
|
return compact(this.requiredQueries.map((query) => {
|
|
132
|
-
return
|
|
131
|
+
return modQueries.includes(query) ? null : query;
|
|
133
132
|
}));
|
|
134
133
|
}
|
|
135
|
-
static tryWrap(
|
|
136
|
-
if (!checkIdentity || this.canWrap(
|
|
134
|
+
static tryWrap(mod, account, checkIdentity = true) {
|
|
135
|
+
if (!checkIdentity || this.canWrap(mod)) {
|
|
137
136
|
if (!account) {
|
|
138
137
|
this.defaultLogger?.info("Anonymous Module Wrapper Created");
|
|
139
138
|
}
|
|
140
139
|
return new this({
|
|
141
|
-
account
|
|
142
|
-
|
|
140
|
+
account,
|
|
141
|
+
mod
|
|
143
142
|
});
|
|
144
143
|
}
|
|
145
144
|
}
|
|
146
|
-
static with(
|
|
147
|
-
return this.is(
|
|
145
|
+
static with(mod, closure) {
|
|
146
|
+
return this.is(mod) ? closure(mod) : void 0;
|
|
148
147
|
}
|
|
149
|
-
static wrap(
|
|
150
|
-
assertEx(!checkIdentity ||
|
|
151
|
-
return assertEx(this.tryWrap(
|
|
148
|
+
static wrap(mod, account, checkIdentity = true) {
|
|
149
|
+
assertEx(!checkIdentity || mod && this.moduleIdentityCheck(mod), () => `Passed mod failed identity check: ${mod?.config?.schema}`);
|
|
150
|
+
return assertEx(this.tryWrap(mod, account, checkIdentity), () => "Unable to wrap mod as ModuleWrapper");
|
|
152
151
|
}
|
|
153
|
-
addParent(
|
|
154
|
-
const existingEntry = this._parents.find((parent) => parent.address ===
|
|
152
|
+
addParent(mod) {
|
|
153
|
+
const existingEntry = this._parents.find((parent) => parent.address === mod.address);
|
|
155
154
|
if (!existingEntry) {
|
|
156
|
-
this._parents.push(
|
|
155
|
+
this._parents.push(mod);
|
|
157
156
|
}
|
|
158
157
|
}
|
|
159
158
|
async addressPreviousHash() {
|
|
@@ -163,16 +162,16 @@ var ModuleWrapper = class extends Base {
|
|
|
163
162
|
return assertEx((await this.sendQuery(queryPayload)).find((payload) => payload.schema === AddressPreviousHashSchema), () => "Result did not include correct payload");
|
|
164
163
|
}
|
|
165
164
|
clearListeners(eventNames) {
|
|
166
|
-
return this.
|
|
165
|
+
return this.mod.clearListeners(eventNames);
|
|
167
166
|
}
|
|
168
167
|
emit(eventName, eventArgs) {
|
|
169
|
-
return this.
|
|
168
|
+
return this.mod.emit(eventName, eventArgs);
|
|
170
169
|
}
|
|
171
170
|
emitSerial(eventName, eventArgs) {
|
|
172
|
-
return this.
|
|
171
|
+
return this.mod.emitSerial(eventName, eventArgs);
|
|
173
172
|
}
|
|
174
173
|
listenerCount(eventNames) {
|
|
175
|
-
return this.
|
|
174
|
+
return this.mod.listenerCount(eventNames);
|
|
176
175
|
}
|
|
177
176
|
async manifest(maxDepth) {
|
|
178
177
|
const queryPayload = {
|
|
@@ -199,19 +198,19 @@ var ModuleWrapper = class extends Base {
|
|
|
199
198
|
return await this.sendQuery(queryPayload);
|
|
200
199
|
}
|
|
201
200
|
off(eventNames, listener) {
|
|
202
|
-
return this.
|
|
201
|
+
return this.mod.off(eventNames, listener);
|
|
203
202
|
}
|
|
204
203
|
offAny(listener) {
|
|
205
|
-
return this.
|
|
204
|
+
return this.mod.offAny(listener);
|
|
206
205
|
}
|
|
207
206
|
on(eventNames, listener) {
|
|
208
|
-
return this.
|
|
207
|
+
return this.mod.on(eventNames, listener);
|
|
209
208
|
}
|
|
210
209
|
onAny(listener) {
|
|
211
|
-
return this.
|
|
210
|
+
return this.mod.onAny(listener);
|
|
212
211
|
}
|
|
213
212
|
once(eventName, listener) {
|
|
214
|
-
return this.
|
|
213
|
+
return this.mod.once(eventName, listener);
|
|
215
214
|
}
|
|
216
215
|
parents() {
|
|
217
216
|
return this._parents;
|
|
@@ -229,28 +228,28 @@ var ModuleWrapper = class extends Base {
|
|
|
229
228
|
return await this.sendQueryRaw(queryPayload, void 0, account);
|
|
230
229
|
}
|
|
231
230
|
async privateChildren() {
|
|
232
|
-
if (isModuleInstance(this.
|
|
233
|
-
return await this.
|
|
231
|
+
if (isModuleInstance(this.mod)) {
|
|
232
|
+
return await this.mod.privateChildren();
|
|
234
233
|
}
|
|
235
234
|
return [];
|
|
236
235
|
}
|
|
237
236
|
async publicChildren() {
|
|
238
|
-
if (isModuleInstance(this.
|
|
239
|
-
return await this.
|
|
237
|
+
if (isModuleInstance(this.mod)) {
|
|
238
|
+
return await this.mod.publicChildren();
|
|
240
239
|
}
|
|
241
240
|
return [];
|
|
242
241
|
}
|
|
243
242
|
async query(query, payloads) {
|
|
244
|
-
return await this.
|
|
243
|
+
return await this.mod.query(query, payloads);
|
|
245
244
|
}
|
|
246
245
|
queryable(query, payloads) {
|
|
247
|
-
return this.
|
|
246
|
+
return this.mod.queryable(query, payloads);
|
|
248
247
|
}
|
|
249
248
|
removeParent(address) {
|
|
250
249
|
this._parents = this._parents.filter((item) => item.address !== address);
|
|
251
250
|
}
|
|
252
251
|
async resolve(idOrFilter = "*", options) {
|
|
253
|
-
const instance = asModuleInstance(this.
|
|
252
|
+
const instance = asModuleInstance(this.mod);
|
|
254
253
|
if (instance?.["resolve"]) {
|
|
255
254
|
if (idOrFilter === "*") {
|
|
256
255
|
return await instance.resolve("*", options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ModuleWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Logger } from '@xylabs/logger'\nimport { Base } from '@xylabs/object'\nimport { Promisable, PromiseEx } from '@xylabs/promise'\nimport { Account } from '@xyo-network/account'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { QueryBoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload } from '@xyo-network/manifest-model'\nimport { EventAnyListener, EventListener } from '@xyo-network/module-events'\nimport {\n AddressPreviousHashPayload,\n AddressPreviousHashSchema,\n asAttachableModuleInstance,\n asModuleInstance,\n AttachableModuleInstance,\n duplicateModules,\n InstanceTypeCheck,\n isModule,\n isModuleInstance,\n Module,\n ModuleAddressQuery,\n ModuleAddressQuerySchema,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleManifestQuery,\n ModuleManifestQuerySchema,\n ModuleQueryResult,\n ModuleResolverInstance,\n ModuleStateQuery,\n ModuleStateQuerySchema,\n ModuleStatus,\n ModuleTypeCheck,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\nimport { ModuleError, ModuleErrorSchema, Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { ModuleWrapperParams } from './models'\n\nexport type ConstructableModuleWrapper<TWrapper extends ModuleWrapper> = {\n defaultLogger?: Logger\n instanceIdentityCheck: InstanceTypeCheck\n moduleIdentityCheck: ModuleTypeCheck\n requiredQueries: string[]\n new (params: ModuleWrapperParams<TWrapper['module']>): TWrapper\n\n canWrap(module: Module | undefined): boolean\n\n is<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper?: any,\n ): wrapper is TModuleWrapper\n\n /** @deprecated pass an account for second parameter */\n tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n ): TModuleWrapper | undefined\n tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper | undefined\n\n /** @deprecated pass an account for second parameter */\n wrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, module: Module | undefined): TModuleWrapper\n wrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper\n}\n\nexport function constructableModuleWrapper<TWrapper extends ModuleWrapper>() {\n return <U extends ConstructableModuleWrapper<TWrapper>>(constructor: U) => {\n constructor\n }\n}\n\n@constructableModuleWrapper()\nexport class ModuleWrapper<TWrappedModule extends Module = Module>\n extends Base<Exclude<Omit<TWrappedModule['params'], 'config'> & { config: Exclude<TWrappedModule['params']['config'], undefined> }, undefined>>\n implements AttachableModuleInstance<TWrappedModule['params'], TWrappedModule['eventData']>\n{\n static instanceIdentityCheck: InstanceTypeCheck = isModuleInstance\n static moduleIdentityCheck: ModuleTypeCheck = isModule\n static requiredQueries: string[] = [ModuleStateQuerySchema]\n\n eventData = {} as TWrappedModule['eventData']\n\n protected readonly cachedCalls = new LRUCache<string, Payload[]>({ max: 1000, ttl: 1000 * 60, ttlAutopurge: true })\n\n protected readonly wrapperParams: ModuleWrapperParams<TWrappedModule>\n\n private _parents: ModuleInstance[] = []\n private _status: ModuleStatus = 'wrapped'\n\n constructor(params: ModuleWrapperParams<TWrappedModule>) {\n const mutatedWrapperParams = { ...params } as ModuleWrapperParams<TWrappedModule>\n const mutatedParams = { ...params.module.params, config: { ...params.module.params.config } } as Exclude<\n Omit<TWrappedModule['params'], 'config'> & { config: Exclude<TWrappedModule['params']['config'], undefined> },\n undefined\n >\n\n //set the root params to the wrapped module params\n super(mutatedParams)\n this.wrapperParams = mutatedWrapperParams\n }\n\n get account() {\n return this.wrapperParams.account\n }\n\n get additionalSigners() {\n return this.wrapperParams.additionalSigners ?? []\n }\n\n get address() {\n return this.module.address\n }\n\n get config() {\n return this.module.config as Exclude<TWrappedModule['params']['config'], undefined>\n }\n\n get downResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance: AttachableModuleInstance | undefined = asAttachableModuleInstance(this.module)\n if (instance) {\n return instance.downResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n get id() {\n return this.module.id\n }\n\n get modName() {\n return this.module.modName\n }\n\n get module() {\n return this.wrapperParams.module\n }\n\n get priority() {\n return ObjectResolverPriority.Low\n }\n\n get privateResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance = asAttachableModuleInstance(this.module)\n if (instance) {\n return instance.privateResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n get queries(): string[] {\n return this.module.queries\n }\n\n get status() {\n return this._status\n }\n\n get upResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance = asAttachableModuleInstance(this.module)\n if (instance) {\n return instance.upResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n protected set status(value: ModuleStatus) {\n if (this._status !== 'dead') {\n this._status = value\n }\n }\n\n static canWrap(module?: Module) {\n return !!module && this.moduleIdentityCheck(module)\n }\n\n static hasRequiredQueries(module: Module) {\n return this.missingRequiredQueries(module).length === 0\n }\n\n static is<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper: any,\n ): wrapper is TModuleWrapper {\n return wrapper instanceof this\n }\n\n static missingRequiredQueries(module: Module): string[] {\n const moduleQueries = module.queries\n return compact(\n this.requiredQueries.map((query) => {\n return moduleQueries.includes(query) ? null : query\n }),\n )\n }\n\n /** @deprecated pass an account for second parameter */\n static tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n ): TModuleWrapper | undefined\n static tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper | undefined\n static tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account?: AccountInstance,\n checkIdentity = true,\n ): TModuleWrapper | undefined {\n if (!checkIdentity || this.canWrap(module)) {\n if (!account) {\n this.defaultLogger?.info('Anonymous Module Wrapper Created')\n }\n return new this({ account: account ?? Account.randomSync(), module: module as TModuleWrapper['module'] })\n }\n }\n\n static with<TModuleWrapper extends ModuleWrapper, R extends Promisable<void> = void>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n module: any,\n\n closure: (module: TModuleWrapper) => R,\n ): R | undefined {\n return this.is(module) ? closure(module) : undefined\n }\n\n /** @deprecated pass an account for second parameter */\n static wrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, module: Module | undefined): TModuleWrapper\n static wrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper\n static wrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n module: Module | undefined,\n account?: AccountInstance,\n checkIdentity = true,\n ): TModuleWrapper {\n assertEx(!checkIdentity || (module && this.moduleIdentityCheck(module)), () => `Passed module failed identity check: ${module?.config?.schema}`)\n return assertEx(this.tryWrap(module, account ?? Account.randomSync(), checkIdentity), () => 'Unable to wrap module as ModuleWrapper')\n }\n\n addParent(module: ModuleInstance) {\n const existingEntry = this._parents.find((parent) => parent.address === module.address)\n if (!existingEntry) {\n this._parents.push(module)\n }\n }\n\n async addressPreviousHash(): Promise<AddressPreviousHashPayload> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return assertEx(\n (await this.sendQuery(queryPayload)).find((payload) => payload.schema === AddressPreviousHashSchema) as WithMeta<AddressPreviousHashPayload>,\n () => 'Result did not include correct payload',\n )\n }\n\n clearListeners(eventNames: Parameters<TWrappedModule['clearListeners']>[0]) {\n return this.module.clearListeners(eventNames)\n }\n\n emit(eventName: Parameters<TWrappedModule['emit']>[0], eventArgs: Parameters<TWrappedModule['emit']>[1]) {\n return this.module.emit(eventName, eventArgs)\n }\n\n emitSerial(eventName: Parameters<TWrappedModule['emitSerial']>[0], eventArgs: Parameters<TWrappedModule['emitSerial']>[1]) {\n return this.module.emitSerial(eventName, eventArgs)\n }\n\n listenerCount(eventNames: Parameters<TWrappedModule['listenerCount']>[0]) {\n return this.module.listenerCount(eventNames)\n }\n\n async manifest(maxDepth?: number): Promise<ModuleManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth === undefined ? {} : { maxDepth }) }\n return (await this.sendQuery(queryPayload))[0] as WithMeta<ModuleManifestPayload>\n }\n\n async manifestQuery(account: AccountInstance, maxDepth?: number): Promise<ModuleQueryResult<ModuleManifestPayload>> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth === undefined ? {} : { maxDepth }) }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async moduleAddress(): Promise<AddressPreviousHashPayload[]> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return (await this.sendQuery(queryPayload)) as WithMeta<AddressPreviousHashPayload>[]\n }\n\n off<TEventName extends keyof TWrappedModule['eventData']>(\n eventNames: TEventName,\n listener: EventListener<TWrappedModule['eventData'][TEventName]>,\n ) {\n return this.module.off(eventNames, listener)\n }\n\n offAny(listener: EventAnyListener) {\n return this.module.offAny(listener)\n }\n\n on<TEventName extends keyof TWrappedModule['eventData']>(eventNames: TEventName, listener: EventListener<TWrappedModule['eventData'][TEventName]>) {\n return this.module.on(eventNames, listener)\n }\n\n onAny(listener: EventAnyListener) {\n return this.module.onAny(listener)\n }\n\n once<TEventName extends keyof TWrappedModule['eventData']>(\n eventName: TEventName,\n listener: EventListener<TWrappedModule['eventData'][TEventName]>,\n ) {\n return this.module.once(eventName, listener)\n }\n\n parents(): Promisable<ModuleInstance[]> {\n return this._parents\n }\n\n async previousHash(): Promise<string | undefined> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return ((await this.sendQuery(queryPayload)).pop() as WithMeta<AddressPreviousHashPayload>).previousHash\n }\n\n async previousHashQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPreviousHashPayload>> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async privateChildren(): Promise<ModuleInstance[]> {\n if (isModuleInstance(this.module)) {\n return await this.module.privateChildren()\n }\n return []\n }\n\n async publicChildren(): Promise<ModuleInstance[]> {\n if (isModuleInstance(this.module)) {\n return await this.module.publicChildren()\n }\n return []\n }\n\n async query<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {\n return await this.module.query(query, payloads)\n }\n\n queryable<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]) {\n return this.module.queryable(query, payloads)\n }\n\n removeParent(address: Address) {\n this._parents = this._parents.filter((item) => item.address !== address)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n async resolve<T extends ModuleInstance = ModuleInstance>(): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T> | undefined, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T> | undefined,\n ): Promise<ModuleInstance>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T> | undefined, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleIdentifier | ModuleFilter<T> = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n const instance = asModuleInstance(this.module)\n if (instance?.['resolve']) {\n if (idOrFilter === '*') {\n return await instance.resolve<T>('*', options)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return await instance.resolve<T>(idOrFilter, options)\n }\n default: {\n return await instance.resolve<T>(idOrFilter, options)\n }\n }\n }\n return typeof idOrFilter === 'string' && idOrFilter !== '*' ? undefined : []\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n async siblings(): Promise<ModuleInstance[]> {\n return (await Promise.all((await this.parents()).map((parent) => parent.publicChildren()))).flat().filter(duplicateModules)\n }\n\n async state(): Promise<Payload[]> {\n const cachedResult = this.cachedCalls.get('state')\n if (cachedResult) {\n return cachedResult\n }\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n const result = await this.sendQuery(queryPayload)\n this.cachedCalls.set('state', result)\n return result\n }\n\n async stateQuery(_account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n return await this.sendQueryRaw(queryPayload)\n }\n\n protected bindQuery<T extends Query>(\n query: T,\n payloads?: Payload[],\n account = this.account,\n additionalSigners = this.additionalSigners,\n ): PromiseEx<[QueryBoundWitness, Payload[], ModuleError[]], AccountInstance> {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n const promise = new PromiseEx<[QueryBoundWitness, Payload[], ModuleError[]], AccountInstance>(async (resolve) => {\n const result = await this.bindQueryInternal(query, payloads, account, additionalSigners)\n resolve?.(result)\n return result\n }, account)\n return promise\n }\n\n protected async bindQueryInternal<T extends Query>(\n query: T,\n payloads?: Payload[],\n account = this.account,\n additionalSigners = this.additionalSigners,\n ): Promise<[QueryBoundWitness, Payload[], ModuleError[]]> {\n const builder = await new QueryBoundWitnessBuilder().payloads(payloads).query(query)\n const accounts = [account, ...additionalSigners].filter(exists)\n const result = await (account ? builder.signers(accounts) : builder).build()\n return result\n }\n\n protected async filterErrors(result: ModuleQueryResult): Promise<ModuleError[]> {\n const wrapper = await BoundWitnessWrapper.wrap(result[0], result[1])\n return wrapper.payloadsBySchema<WithMeta<ModuleError>>(ModuleErrorSchema)\n }\n\n protected async sendQuery<T extends Query, P extends Payload = Payload, R extends Payload = Payload>(\n queryPayload: T,\n payloads?: P[],\n ): Promise<WithMeta<R>[]> {\n const queryResults = await this.sendQueryRaw(queryPayload, payloads)\n const [, resultPayloads, errors] = queryResults\n\n /* TODO: Figure out what to do with the returning BW. Should we store them in a queue in case the caller wants to see them? */\n\n if (errors && errors.length > 0) {\n /* TODO: Figure out how to rollup multiple Errors */\n throw errors[0]\n }\n\n return resultPayloads as WithMeta<R>[]\n }\n\n protected async sendQueryRaw<T extends Query, P extends Payload = Payload, R extends Payload = Payload>(\n queryPayload: T,\n payloads?: P[],\n account?: AccountInstance,\n ): Promise<ModuleQueryResult<R>> {\n // Bind them\n const query = await this.bindQuery(queryPayload, payloads, account)\n\n // Send them off\n return (await this.query(query[0], query[1])) as ModuleQueryResult<R>\n }\n}\n"],"mappings":"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","names":["assertEx","exists","compact","Base","PromiseEx","Account","QueryBoundWitnessBuilder","BoundWitnessWrapper","AddressPreviousHashSchema","asAttachableModuleInstance","asModuleInstance","duplicateModules","isModule","isModuleInstance","ModuleAddressQuerySchema","ModuleManifestQuerySchema","ModuleStateQuerySchema","ObjectResolverPriority","ModuleErrorSchema","LRUCache","constructableModuleWrapper","constructor","ModuleWrapper","Base","instanceIdentityCheck","isModuleInstance","moduleIdentityCheck","isModule","requiredQueries","ModuleStateQuerySchema","eventData","cachedCalls","LRUCache","max","ttl","ttlAutopurge","wrapperParams","_parents","_status","params","mutatedWrapperParams","mutatedParams","module","config","account","additionalSigners","address","downResolver","instance","asAttachableModuleInstance","Error","id","modName","priority","ObjectResolverPriority","Low","privateResolver","queries","status","upResolver","value","canWrap","hasRequiredQueries","missingRequiredQueries","length","is","wrapper","moduleQueries","compact","map","query","includes","tryWrap","checkIdentity","defaultLogger","info","Account","randomSync","with","closure","undefined","wrap","assertEx","schema","addParent","existingEntry","find","parent","push","addressPreviousHash","queryPayload","ModuleAddressQuerySchema","sendQuery","payload","AddressPreviousHashSchema","clearListeners","eventNames","emit","eventName","eventArgs","emitSerial","listenerCount","manifest","maxDepth","ModuleManifestQuerySchema","manifestQuery","sendQueryRaw","moduleAddress","off","listener","offAny","on","onAny","once","parents","previousHash","pop","previousHashQuery","privateChildren","publicChildren","payloads","queryable","removeParent","filter","item","resolve","idOrFilter","options","asModuleInstance","resolvePrivate","_options","Promise","siblings","all","flat","duplicateModules","state","cachedResult","get","result","set","stateQuery","_account","bindQuery","promise","PromiseEx","bindQueryInternal","builder","QueryBoundWitnessBuilder","accounts","exists","signers","build","filterErrors","BoundWitnessWrapper","payloadsBySchema","ModuleErrorSchema","queryResults","resultPayloads","errors"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ModuleWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Logger } from '@xylabs/logger'\nimport { Base } from '@xylabs/object'\nimport { Promisable, PromiseEx } from '@xylabs/promise'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { QueryBoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { ModuleManifestPayload } from '@xyo-network/manifest-model'\nimport { EventAnyListener, EventListener } from '@xyo-network/module-events'\nimport {\n AddressPreviousHashPayload,\n AddressPreviousHashSchema,\n asAttachableModuleInstance,\n asModuleInstance,\n AttachableModuleInstance,\n duplicateModules,\n InstanceTypeCheck,\n isModule,\n isModuleInstance,\n Module,\n ModuleAddressQuery,\n ModuleAddressQuerySchema,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleManifestQuery,\n ModuleManifestQuerySchema,\n ModuleQueryResult,\n ModuleResolverInstance,\n ModuleStateQuery,\n ModuleStateQuerySchema,\n ModuleStatus,\n ModuleTypeCheck,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\nimport { ModuleError, ModuleErrorSchema, Payload, Query, WithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { ModuleWrapperParams } from './models'\n\nexport type ConstructableModuleWrapper<TWrapper extends ModuleWrapper> = {\n defaultLogger?: Logger\n instanceIdentityCheck: InstanceTypeCheck\n moduleIdentityCheck: ModuleTypeCheck\n requiredQueries: string[]\n new (params: ModuleWrapperParams<TWrapper['mod']>): TWrapper\n\n canWrap(mod: Module | undefined): boolean\n\n is<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper?: any,\n ): wrapper is TModuleWrapper\n\n tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n mod: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper | undefined\n\n wrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n mod: Module | undefined,\n account: AccountInstance,\n checkIdentity?: boolean,\n ): TModuleWrapper\n}\n\nexport function constructableModuleWrapper<TWrapper extends ModuleWrapper>() {\n return <U extends ConstructableModuleWrapper<TWrapper>>(constructor: U) => {\n constructor\n }\n}\n\n@constructableModuleWrapper()\nexport class ModuleWrapper<TWrappedModule extends Module = Module>\n extends Base<Exclude<Omit<TWrappedModule['params'], 'config'> & { config: Exclude<TWrappedModule['params']['config'], undefined> }, undefined>>\n implements AttachableModuleInstance<TWrappedModule['params'], TWrappedModule['eventData']>\n{\n static instanceIdentityCheck: InstanceTypeCheck = isModuleInstance\n static moduleIdentityCheck: ModuleTypeCheck = isModule\n static requiredQueries: string[] = [ModuleStateQuerySchema]\n\n eventData = {} as TWrappedModule['eventData']\n\n protected readonly cachedCalls = new LRUCache<string, Payload[]>({ max: 1000, ttl: 1000 * 60, ttlAutopurge: true })\n\n protected readonly wrapperParams: ModuleWrapperParams<TWrappedModule>\n\n private _parents: ModuleInstance[] = []\n private _status: ModuleStatus = 'wrapped'\n\n constructor(params: ModuleWrapperParams<TWrappedModule>) {\n const mutatedWrapperParams = { ...params } as ModuleWrapperParams<TWrappedModule>\n const mutatedParams = { ...params.mod.params, config: { ...params.mod.params.config } } as Exclude<\n Omit<TWrappedModule['params'], 'config'> & { config: Exclude<TWrappedModule['params']['config'], undefined> },\n undefined\n >\n\n //set the root params to the wrapped mod params\n super(mutatedParams)\n this.wrapperParams = mutatedWrapperParams\n }\n\n get account() {\n return this.wrapperParams.account\n }\n\n get additionalSigners() {\n return this.wrapperParams.additionalSigners ?? []\n }\n\n get address() {\n return this.mod.address\n }\n\n get config() {\n return this.mod.config as Exclude<TWrappedModule['params']['config'], undefined>\n }\n\n get downResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance: AttachableModuleInstance | undefined = asAttachableModuleInstance(this.mod)\n if (instance) {\n return instance.downResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n get id() {\n return this.mod.id\n }\n\n get mod() {\n return this.wrapperParams.mod\n }\n\n get modName() {\n return this.mod.modName\n }\n\n get priority() {\n return ObjectResolverPriority.Low\n }\n\n get privateResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance = asAttachableModuleInstance(this.mod)\n if (instance) {\n return instance.privateResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n get queries(): string[] {\n return this.mod.queries\n }\n\n get status() {\n return this._status\n }\n\n get upResolver(): ModuleResolverInstance {\n //Should we be allowing this?\n const instance = asAttachableModuleInstance(this.mod)\n if (instance) {\n return instance.upResolver as ModuleResolverInstance\n }\n throw new Error('Unsupported')\n }\n\n protected set status(value: ModuleStatus) {\n if (this._status !== 'dead') {\n this._status = value\n }\n }\n\n static canWrap(mod?: Module) {\n return !!mod && this.moduleIdentityCheck(mod)\n }\n\n static hasRequiredQueries(mod: Module) {\n return this.missingRequiredQueries(mod).length === 0\n }\n\n static is<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper: any,\n ): wrapper is TModuleWrapper {\n return wrapper instanceof this\n }\n\n static missingRequiredQueries(mod: Module): string[] {\n const modQueries = mod.queries\n return compact(\n this.requiredQueries.map((query) => {\n return modQueries.includes(query) ? null : query\n }),\n )\n }\n\n static tryWrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n mod: Module | undefined,\n account: AccountInstance,\n checkIdentity = true,\n ): TModuleWrapper | undefined {\n if (!checkIdentity || this.canWrap(mod)) {\n if (!account) {\n this.defaultLogger?.info('Anonymous Module Wrapper Created')\n }\n return new this({ account, mod: mod as TModuleWrapper['mod'] })\n }\n }\n\n static with<TModuleWrapper extends ModuleWrapper, R extends Promisable<void> = void>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mod: any,\n\n closure: (mod: TModuleWrapper) => R,\n ): R | undefined {\n return this.is(mod) ? closure(mod) : undefined\n }\n\n static wrap<TModuleWrapper extends ModuleWrapper>(\n this: ConstructableModuleWrapper<TModuleWrapper>,\n mod: Module | undefined,\n account: AccountInstance,\n checkIdentity = true,\n ): TModuleWrapper {\n assertEx(!checkIdentity || (mod && this.moduleIdentityCheck(mod)), () => `Passed mod failed identity check: ${mod?.config?.schema}`)\n return assertEx(this.tryWrap(mod, account, checkIdentity), () => 'Unable to wrap mod as ModuleWrapper')\n }\n\n addParent(mod: ModuleInstance) {\n const existingEntry = this._parents.find((parent) => parent.address === mod.address)\n if (!existingEntry) {\n this._parents.push(mod)\n }\n }\n\n async addressPreviousHash(): Promise<AddressPreviousHashPayload> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return assertEx(\n (await this.sendQuery(queryPayload)).find((payload) => payload.schema === AddressPreviousHashSchema) as WithMeta<AddressPreviousHashPayload>,\n () => 'Result did not include correct payload',\n )\n }\n\n clearListeners(eventNames: Parameters<TWrappedModule['clearListeners']>[0]) {\n return this.mod.clearListeners(eventNames)\n }\n\n emit(eventName: Parameters<TWrappedModule['emit']>[0], eventArgs: Parameters<TWrappedModule['emit']>[1]) {\n return this.mod.emit(eventName, eventArgs)\n }\n\n emitSerial(eventName: Parameters<TWrappedModule['emitSerial']>[0], eventArgs: Parameters<TWrappedModule['emitSerial']>[1]) {\n return this.mod.emitSerial(eventName, eventArgs)\n }\n\n listenerCount(eventNames: Parameters<TWrappedModule['listenerCount']>[0]) {\n return this.mod.listenerCount(eventNames)\n }\n\n async manifest(maxDepth?: number): Promise<ModuleManifestPayload> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth === undefined ? {} : { maxDepth }) }\n return (await this.sendQuery(queryPayload))[0] as WithMeta<ModuleManifestPayload>\n }\n\n async manifestQuery(account: AccountInstance, maxDepth?: number): Promise<ModuleQueryResult<ModuleManifestPayload>> {\n const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth === undefined ? {} : { maxDepth }) }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async moduleAddress(): Promise<AddressPreviousHashPayload[]> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return (await this.sendQuery(queryPayload)) as WithMeta<AddressPreviousHashPayload>[]\n }\n\n off<TEventName extends keyof TWrappedModule['eventData']>(\n eventNames: TEventName,\n listener: EventListener<TWrappedModule['eventData'][TEventName]>,\n ) {\n return this.mod.off(eventNames, listener)\n }\n\n offAny(listener: EventAnyListener) {\n return this.mod.offAny(listener)\n }\n\n on<TEventName extends keyof TWrappedModule['eventData']>(eventNames: TEventName, listener: EventListener<TWrappedModule['eventData'][TEventName]>) {\n return this.mod.on(eventNames, listener)\n }\n\n onAny(listener: EventAnyListener) {\n return this.mod.onAny(listener)\n }\n\n once<TEventName extends keyof TWrappedModule['eventData']>(\n eventName: TEventName,\n listener: EventListener<TWrappedModule['eventData'][TEventName]>,\n ) {\n return this.mod.once(eventName, listener)\n }\n\n parents(): Promisable<ModuleInstance[]> {\n return this._parents\n }\n\n async previousHash(): Promise<string | undefined> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return ((await this.sendQuery(queryPayload)).pop() as WithMeta<AddressPreviousHashPayload>).previousHash\n }\n\n async previousHashQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPreviousHashPayload>> {\n const queryPayload: ModuleAddressQuery = { schema: ModuleAddressQuerySchema }\n return await this.sendQueryRaw(queryPayload, undefined, account)\n }\n\n async privateChildren(): Promise<ModuleInstance[]> {\n if (isModuleInstance(this.mod)) {\n return await this.mod.privateChildren()\n }\n return []\n }\n\n async publicChildren(): Promise<ModuleInstance[]> {\n if (isModuleInstance(this.mod)) {\n return await this.mod.publicChildren()\n }\n return []\n }\n\n async query<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]): Promise<ModuleQueryResult> {\n return await this.mod.query(query, payloads)\n }\n\n queryable<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads?: Payload[]) {\n return this.mod.queryable(query, payloads)\n }\n\n removeParent(address: Address) {\n this._parents = this._parents.filter((item) => item.address !== address)\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n async resolve<T extends ModuleInstance = ModuleInstance>(): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T> | undefined, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T> | undefined,\n ): Promise<ModuleInstance>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T> | undefined, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleIdentifier | ModuleFilter<T> = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n const instance = asModuleInstance(this.mod)\n if (instance?.['resolve']) {\n if (idOrFilter === '*') {\n return await instance.resolve<T>('*', options)\n }\n switch (typeof idOrFilter) {\n case 'string': {\n return await instance.resolve<T>(idOrFilter, options)\n }\n default: {\n return await instance.resolve<T>(idOrFilter, options)\n }\n }\n }\n return typeof idOrFilter === 'string' && idOrFilter !== '*' ? undefined : []\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n async siblings(): Promise<ModuleInstance[]> {\n return (await Promise.all((await this.parents()).map((parent) => parent.publicChildren()))).flat().filter(duplicateModules)\n }\n\n async state(): Promise<Payload[]> {\n const cachedResult = this.cachedCalls.get('state')\n if (cachedResult) {\n return cachedResult\n }\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n const result = await this.sendQuery(queryPayload)\n this.cachedCalls.set('state', result)\n return result\n }\n\n async stateQuery(_account: AccountInstance): Promise<ModuleQueryResult> {\n const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n return await this.sendQueryRaw(queryPayload)\n }\n\n protected bindQuery<T extends Query>(\n query: T,\n payloads?: Payload[],\n account = this.account,\n additionalSigners = this.additionalSigners,\n ): PromiseEx<[QueryBoundWitness, Payload[], ModuleError[]], AccountInstance> {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n const promise = new PromiseEx<[QueryBoundWitness, Payload[], ModuleError[]], AccountInstance>(async (resolve) => {\n const result = await this.bindQueryInternal(query, payloads, account, additionalSigners)\n resolve?.(result)\n return result\n }, account)\n return promise\n }\n\n protected async bindQueryInternal<T extends Query>(\n query: T,\n payloads?: Payload[],\n account = this.account,\n additionalSigners = this.additionalSigners,\n ): Promise<[QueryBoundWitness, Payload[], ModuleError[]]> {\n const builder = await new QueryBoundWitnessBuilder().payloads(payloads).query(query)\n const accounts = [account, ...additionalSigners].filter(exists)\n const result = await (account ? builder.signers(accounts) : builder).build()\n return result\n }\n\n protected async filterErrors(result: ModuleQueryResult): Promise<ModuleError[]> {\n const wrapper = await BoundWitnessWrapper.wrap(result[0], result[1])\n return wrapper.payloadsBySchema<WithMeta<ModuleError>>(ModuleErrorSchema)\n }\n\n protected async sendQuery<T extends Query, P extends Payload = Payload, R extends Payload = Payload>(\n queryPayload: T,\n payloads?: P[],\n ): Promise<WithMeta<R>[]> {\n const queryResults = await this.sendQueryRaw(queryPayload, payloads)\n const [, resultPayloads, errors] = queryResults\n\n /* TODO: Figure out what to do with the returning BW. Should we store them in a queue in case the caller wants to see them? */\n\n if (errors && errors.length > 0) {\n /* TODO: Figure out how to rollup multiple Errors */\n throw errors[0]\n }\n\n return resultPayloads as WithMeta<R>[]\n }\n\n protected async sendQueryRaw<T extends Query, P extends Payload = Payload, R extends Payload = Payload>(\n queryPayload: T,\n payloads?: P[],\n account?: AccountInstance,\n ): Promise<ModuleQueryResult<R>> {\n // Bind them\n const query = await this.bindQuery(queryPayload, payloads, account)\n\n // Send them off\n return (await this.query(query[0], query[1])) as ModuleQueryResult<R>\n }\n}\n"],"mappings":"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","names":["assertEx","exists","compact","Base","PromiseEx","QueryBoundWitnessBuilder","BoundWitnessWrapper","AddressPreviousHashSchema","asAttachableModuleInstance","asModuleInstance","duplicateModules","isModule","isModuleInstance","ModuleAddressQuerySchema","ModuleManifestQuerySchema","ModuleStateQuerySchema","ObjectResolverPriority","ModuleErrorSchema","LRUCache","constructableModuleWrapper","constructor","ModuleWrapper","Base","instanceIdentityCheck","isModuleInstance","moduleIdentityCheck","isModule","requiredQueries","ModuleStateQuerySchema","eventData","cachedCalls","LRUCache","max","ttl","ttlAutopurge","wrapperParams","_parents","_status","params","mutatedWrapperParams","mutatedParams","mod","config","account","additionalSigners","address","downResolver","instance","asAttachableModuleInstance","Error","id","modName","priority","ObjectResolverPriority","Low","privateResolver","queries","status","upResolver","value","canWrap","hasRequiredQueries","missingRequiredQueries","length","is","wrapper","modQueries","compact","map","query","includes","tryWrap","checkIdentity","defaultLogger","info","with","closure","undefined","wrap","assertEx","schema","addParent","existingEntry","find","parent","push","addressPreviousHash","queryPayload","ModuleAddressQuerySchema","sendQuery","payload","AddressPreviousHashSchema","clearListeners","eventNames","emit","eventName","eventArgs","emitSerial","listenerCount","manifest","maxDepth","ModuleManifestQuerySchema","manifestQuery","sendQueryRaw","moduleAddress","off","listener","offAny","on","onAny","once","parents","previousHash","pop","previousHashQuery","privateChildren","publicChildren","payloads","queryable","removeParent","filter","item","resolve","idOrFilter","options","asModuleInstance","resolvePrivate","_options","Promise","siblings","all","flat","duplicateModules","state","cachedResult","get","result","set","stateQuery","_account","bindQuery","promise","PromiseEx","bindQueryInternal","builder","QueryBoundWitnessBuilder","accounts","exists","signers","build","filterErrors","BoundWitnessWrapper","payloadsBySchema","ModuleErrorSchema","queryResults","resultPayloads","errors"]}
|
|
@@ -4,6 +4,6 @@ import { Module } from '@xyo-network/module-model';
|
|
|
4
4
|
export type ModuleWrapperParams<TWrappedModule extends Module = Module> = BaseParams<{
|
|
5
5
|
account: AccountInstance;
|
|
6
6
|
additionalSigners?: AccountInstance[];
|
|
7
|
-
|
|
7
|
+
mod: TWrappedModule;
|
|
8
8
|
}>;
|
|
9
9
|
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,MAAM,MAAM,mBAAmB,CAAC,cAAc,SAAS,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;IACnF,OAAO,EAAE,eAAe,CAAA;IACxB,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,MAAM,MAAM,mBAAmB,CAAC,cAAc,SAAS,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;IACnF,OAAO,EAAE,eAAe,CAAA;IACxB,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,GAAG,EAAE,cAAc,CAAA;CACpB,CAAC,CAAA"}
|
|
@@ -4,6 +4,6 @@ import { Module } from '@xyo-network/module-model';
|
|
|
4
4
|
export type ModuleWrapperParams<TWrappedModule extends Module = Module> = BaseParams<{
|
|
5
5
|
account: AccountInstance;
|
|
6
6
|
additionalSigners?: AccountInstance[];
|
|
7
|
-
|
|
7
|
+
mod: TWrappedModule;
|
|
8
8
|
}>;
|
|
9
9
|
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,MAAM,MAAM,mBAAmB,CAAC,cAAc,SAAS,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;IACnF,OAAO,EAAE,eAAe,CAAA;IACxB,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,MAAM,MAAM,mBAAmB,CAAC,cAAc,SAAS,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;IACnF,OAAO,EAAE,eAAe,CAAA;IACxB,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,GAAG,EAAE,cAAc,CAAA;CACpB,CAAC,CAAA"}
|
package/dist/browser/models.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ import { Module } from '@xyo-network/module-model';
|
|
|
4
4
|
export type ModuleWrapperParams<TWrappedModule extends Module = Module> = BaseParams<{
|
|
5
5
|
account: AccountInstance;
|
|
6
6
|
additionalSigners?: AccountInstance[];
|
|
7
|
-
|
|
7
|
+
mod: TWrappedModule;
|
|
8
8
|
}>;
|
|
9
9
|
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,MAAM,MAAM,mBAAmB,CAAC,cAAc,SAAS,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;IACnF,OAAO,EAAE,eAAe,CAAA;IACxB,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,MAAM,MAAM,mBAAmB,CAAC,cAAc,SAAS,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;IACnF,OAAO,EAAE,eAAe,CAAA;IACxB,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAA;IACrC,GAAG,EAAE,cAAc,CAAA;CACpB,CAAC,CAAA"}
|
|
@@ -15,13 +15,11 @@ export type ConstructableModuleWrapper<TWrapper extends ModuleWrapper> = {
|
|
|
15
15
|
instanceIdentityCheck: InstanceTypeCheck;
|
|
16
16
|
moduleIdentityCheck: ModuleTypeCheck;
|
|
17
17
|
requiredQueries: string[];
|
|
18
|
-
new (params: ModuleWrapperParams<TWrapper['
|
|
19
|
-
canWrap(
|
|
18
|
+
new (params: ModuleWrapperParams<TWrapper['mod']>): TWrapper;
|
|
19
|
+
canWrap(mod: Module | undefined): boolean;
|
|
20
20
|
is<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, wrapper?: any): wrapper is TModuleWrapper;
|
|
21
|
-
tryWrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>,
|
|
22
|
-
|
|
23
|
-
wrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, module: Module | undefined): TModuleWrapper;
|
|
24
|
-
wrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, module: Module | undefined, account: AccountInstance, checkIdentity?: boolean): TModuleWrapper;
|
|
21
|
+
tryWrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, mod: Module | undefined, account: AccountInstance, checkIdentity?: boolean): TModuleWrapper | undefined;
|
|
22
|
+
wrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, mod: Module | undefined, account: AccountInstance, checkIdentity?: boolean): TModuleWrapper;
|
|
25
23
|
};
|
|
26
24
|
export declare function constructableModuleWrapper<TWrapper extends ModuleWrapper>(): <U extends ConstructableModuleWrapper<TWrapper>>(constructor: U) => void;
|
|
27
25
|
export declare class ModuleWrapper<TWrappedModule extends Module = Module> extends Base<Exclude<Omit<TWrappedModule['params'], 'config'> & {
|
|
@@ -44,15 +42,15 @@ export declare class ModuleWrapper<TWrappedModule extends Module = Module> exten
|
|
|
44
42
|
get config(): Exclude<TWrappedModule["params"]["config"], undefined>;
|
|
45
43
|
get downResolver(): ModuleResolverInstance;
|
|
46
44
|
get id(): string;
|
|
45
|
+
get mod(): TWrappedModule;
|
|
47
46
|
get modName(): string | undefined;
|
|
48
|
-
get module(): TWrappedModule;
|
|
49
47
|
get priority(): ObjectResolverPriority;
|
|
50
48
|
get privateResolver(): ModuleResolverInstance;
|
|
51
49
|
get queries(): string[];
|
|
52
50
|
get status(): ModuleStatus;
|
|
53
51
|
get upResolver(): ModuleResolverInstance;
|
|
54
52
|
protected set status(value: ModuleStatus);
|
|
55
|
-
static canWrap(
|
|
53
|
+
static canWrap(mod?: Module): mod is Module<import("@xylabs/object").BaseParamsFields & {
|
|
56
54
|
account?: AccountInstance | "random";
|
|
57
55
|
addToResolvers?: boolean;
|
|
58
56
|
additionalSigners?: AccountInstance[];
|
|
@@ -65,15 +63,13 @@ export declare class ModuleWrapper<TWrappedModule extends Module = Module> exten
|
|
|
65
63
|
ephemeralQueryAccountEnabled?: boolean;
|
|
66
64
|
moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
|
|
67
65
|
}, import("@xyo-network/module-model").ModuleEventData<object>>;
|
|
68
|
-
static hasRequiredQueries(
|
|
66
|
+
static hasRequiredQueries(mod: Module): boolean;
|
|
69
67
|
static is<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, wrapper: any): wrapper is TModuleWrapper;
|
|
70
|
-
static missingRequiredQueries(
|
|
71
|
-
static tryWrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>,
|
|
72
|
-
static
|
|
73
|
-
static
|
|
74
|
-
|
|
75
|
-
static wrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, module: Module | undefined, account: AccountInstance, checkIdentity?: boolean): TModuleWrapper;
|
|
76
|
-
addParent(module: ModuleInstance): void;
|
|
68
|
+
static missingRequiredQueries(mod: Module): string[];
|
|
69
|
+
static tryWrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, mod: Module | undefined, account: AccountInstance, checkIdentity?: boolean): TModuleWrapper | undefined;
|
|
70
|
+
static with<TModuleWrapper extends ModuleWrapper, R extends Promisable<void> = void>(this: ConstructableModuleWrapper<TModuleWrapper>, mod: any, closure: (mod: TModuleWrapper) => R): R | undefined;
|
|
71
|
+
static wrap<TModuleWrapper extends ModuleWrapper>(this: ConstructableModuleWrapper<TModuleWrapper>, mod: Module | undefined, account: AccountInstance, checkIdentity?: boolean): TModuleWrapper;
|
|
72
|
+
addParent(mod: ModuleInstance): void;
|
|
77
73
|
addressPreviousHash(): Promise<AddressPreviousHashPayload>;
|
|
78
74
|
clearListeners(eventNames: Parameters<TWrappedModule['clearListeners']>[0]): void;
|
|
79
75
|
emit(eventName: Parameters<TWrappedModule['emit']>[0], eventArgs: Parameters<TWrappedModule['emit']>[1]): Promise<void>;
|