@xyo-network/module-wrapper 2.107.1 → 2.107.4

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.
@@ -1,2 +1,359 @@
1
- "use strict";var l=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var d=(n,e)=>l(n,"name",{value:e,configurable:!0});var S=(n,e)=>{for(var t in e)l(n,t,{get:e[t],enumerable:!0})},M=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of C(e))!_.call(n,a)&&a!==t&&l(n,a,{get:()=>e[a],enumerable:!(r=b(e,a))||r.enumerable});return n};var W=n=>M(l({},"__esModule",{value:!0}),n);var x={};S(x,{ModuleWrapper:()=>c,constructableModuleWrapper:()=>q});module.exports=W(x);var h=require("@xylabs/assert"),y=require("@xylabs/exists"),f=require("@xylabs/lodash"),w=require("@xylabs/object"),g=require("@xylabs/promise"),m=require("@xyo-network/account"),P=require("@xyo-network/boundwitness-builder"),v=require("@xyo-network/boundwitness-wrapper"),s=require("@xyo-network/module-model"),Q=require("@xyo-network/payload-model"),R=require("lru-cache");function A(n,e,t,r){var a=arguments.length,i=a<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(n,e,t,r);else for(var o=n.length-1;o>=0;o--)(u=n[o])&&(i=(a<3?u(i):a>3?u(e,t,i):u(e,t))||i);return a>3&&i&&Object.defineProperty(e,t,i),i}d(A,"_ts_decorate");function p(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)}d(p,"_ts_metadata");function q(){return n=>{}}d(q,"constructableModuleWrapper");var c=class extends w.Base{static{d(this,"ModuleWrapper")}static instanceIdentityCheck=s.isModuleInstance;static moduleIdentityCheck=s.isModule;static requiredQueries=[s.ModuleStateQuerySchema];eventData={};cachedCalls=new R.LRUCache({max:1e3,ttl:1e3*60,ttlAutopurge:!0});wrapperParams;_parents=[];_status="wrapped";constructor(e){let t={...e},r={...e.module.params,config:{...e.module.params.config}};super(r),this.wrapperParams=t}get account(){return this.wrapperParams.account}get additionalSigners(){return this.wrapperParams.additionalSigners??[]}get address(){return this.module.address}get config(){return this.module.config}get downResolver(){let e=(0,s.asAttachableModuleInstance)(this.module);if(e)return e.downResolver;throw new Error("Unsupported")}get id(){return this.module.id}get modName(){return this.module.modName}get module(){return this.wrapperParams.module}get priority(){return s.ObjectResolverPriority.Low}get privateResolver(){let e=(0,s.asAttachableModuleInstance)(this.module);if(e)return e.privateResolver;throw new Error("Unsupported")}get queries(){return this.module.queries}get status(){return this._status}get upResolver(){let e=(0,s.asAttachableModuleInstance)(this.module);if(e)return e.upResolver;throw new Error("Unsupported")}set status(e){this._status!=="dead"&&(this._status=e)}static canWrap(e){return!!e&&this.moduleIdentityCheck(e)}static hasRequiredQueries(e){return this.missingRequiredQueries(e).length===0}static is(e){return e instanceof this}static missingRequiredQueries(e){let t=e.queries;return(0,f.compact)(this.requiredQueries.map(r=>t.includes(r)?null:r))}static tryWrap(e,t,r=!0){if(!r||this.canWrap(e))return t||this.defaultLogger?.info("Anonymous Module Wrapper Created"),new this({account:t??m.Account.randomSync(),module:e})}static with(e,t){return this.is(e)?t(e):void 0}static wrap(e,t,r=!0){return(0,h.assertEx)(!r||e&&this.moduleIdentityCheck(e),()=>`Passed module failed identity check: ${e?.config?.schema}`),(0,h.assertEx)(this.tryWrap(e,t??m.Account.randomSync(),r),()=>"Unable to wrap module as ModuleWrapper")}addParent(e){this._parents.find(r=>r.address===e.address)||this._parents.push(e)}async addressPreviousHash(){let e={schema:s.ModuleAddressQuerySchema};return(0,h.assertEx)((await this.sendQuery(e)).find(t=>t.schema===s.AddressPreviousHashSchema),()=>"Result did not include correct payload")}clearListeners(e){return this.module.clearListeners(e)}emit(e,t){return this.module.emit(e,t)}emitSerial(e,t){return this.module.emitSerial(e,t)}listenerCount(e){return this.module.listenerCount(e)}async manifest(e){let t={schema:s.ModuleManifestQuerySchema,...e===void 0?{}:{maxDepth:e}};return(await this.sendQuery(t))[0]}async manifestQuery(e,t){let r={schema:s.ModuleManifestQuerySchema,...t===void 0?{}:{maxDepth:t}};return await this.sendQueryRaw(r,void 0,e)}async moduleAddress(){let e={schema:s.ModuleAddressQuerySchema};return await this.sendQuery(e)}off(e,t){return this.module.off(e,t)}offAny(e){return this.module.offAny(e)}on(e,t){return this.module.on(e,t)}onAny(e){return this.module.onAny(e)}once(e,t){return this.module.once(e,t)}parents(){return this._parents}async previousHash(){let e={schema:s.ModuleAddressQuerySchema};return(await this.sendQuery(e)).pop().previousHash}async previousHashQuery(e){let t={schema:s.ModuleAddressQuerySchema};return await this.sendQueryRaw(t,void 0,e)}async privateChildren(){return(0,s.isModuleInstance)(this.module)?await this.module.privateChildren():[]}async publicChildren(){return(0,s.isModuleInstance)(this.module)?await this.module.publicChildren():[]}async query(e,t){return await this.module.query(e,t)}queryable(e,t){return this.module.queryable(e,t)}removeParent(e){this._parents=this._parents.filter(t=>t.address!==e)}async resolve(e="*",t){let r=(0,s.asModuleInstance)(this.module);if(r?.resolve){if(e==="*")return await r.resolve("*",t);switch(typeof e){case"string":return await r.resolve(e,t);default:return await r.resolve(e,t)}}return typeof e=="string"&&e!=="*"?void 0:[]}async resolvePrivate(e,t){if(e==="*")return await Promise.resolve([])}async siblings(){return(await Promise.all((await this.parents()).map(e=>e.publicChildren()))).flat().filter(s.duplicateModules)}async state(){let e=this.cachedCalls.get("state");if(e)return e;let t={schema:s.ModuleStateQuerySchema},r=await this.sendQuery(t);return this.cachedCalls.set("state",r),r}async stateQuery(e){let t={schema:s.ModuleStateQuerySchema};return await this.sendQueryRaw(t)}bindQuery(e,t,r=this.account,a=this.additionalSigners){return new g.PromiseEx(async u=>{let o=await this.bindQueryInternal(e,t,r,a);return u?.(o),o},r)}async bindQueryInternal(e,t,r=this.account,a=this.additionalSigners){let i=await new P.QueryBoundWitnessBuilder().payloads(t).query(e),u=[r,...a].filter(y.exists);return await(r?i.signers(u):i).build()}async filterErrors(e){return(await v.BoundWitnessWrapper.wrap(e[0],e[1])).payloadsBySchema(Q.ModuleErrorSchema)}async sendQuery(e,t){let r=await this.sendQueryRaw(e,t),[,a,i]=r;if(i&&i.length>0)throw i[0];return a}async sendQueryRaw(e,t,r){let a=await this.bindQuery(e,t,r);return await this.query(a[0],a[1])}};c=A([q(),p("design:type",Function),p("design:paramtypes",[typeof ModuleWrapperParams>"u"?Object:ModuleWrapperParams])],c);
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/index.ts
22
+ var src_exports = {};
23
+ __export(src_exports, {
24
+ ModuleWrapper: () => ModuleWrapper,
25
+ constructableModuleWrapper: () => constructableModuleWrapper
26
+ });
27
+ module.exports = __toCommonJS(src_exports);
28
+
29
+ // src/ModuleWrapper.ts
30
+ var import_assert = require("@xylabs/assert");
31
+ var import_exists = require("@xylabs/exists");
32
+ var import_lodash = require("@xylabs/lodash");
33
+ var import_object = require("@xylabs/object");
34
+ var import_promise = require("@xylabs/promise");
35
+ var import_account = require("@xyo-network/account");
36
+ var import_boundwitness_builder = require("@xyo-network/boundwitness-builder");
37
+ var import_boundwitness_wrapper = require("@xyo-network/boundwitness-wrapper");
38
+ var import_module_model = require("@xyo-network/module-model");
39
+ var import_payload_model = require("@xyo-network/payload-model");
40
+ var import_lru_cache = require("lru-cache");
41
+ function _ts_decorate(decorators, target, key, desc) {
42
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
43
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
44
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
45
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
46
+ }
47
+ __name(_ts_decorate, "_ts_decorate");
48
+ function _ts_metadata(k, v) {
49
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
50
+ }
51
+ __name(_ts_metadata, "_ts_metadata");
52
+ function constructableModuleWrapper() {
53
+ return (constructor) => {
54
+ constructor;
55
+ };
56
+ }
57
+ __name(constructableModuleWrapper, "constructableModuleWrapper");
58
+ var ModuleWrapper = class extends import_object.Base {
59
+ static {
60
+ __name(this, "ModuleWrapper");
61
+ }
62
+ static instanceIdentityCheck = import_module_model.isModuleInstance;
63
+ static moduleIdentityCheck = import_module_model.isModule;
64
+ static requiredQueries = [
65
+ import_module_model.ModuleStateQuerySchema
66
+ ];
67
+ eventData = {};
68
+ cachedCalls = new import_lru_cache.LRUCache({
69
+ max: 1e3,
70
+ ttl: 1e3 * 60,
71
+ ttlAutopurge: true
72
+ });
73
+ wrapperParams;
74
+ _parents = [];
75
+ _status = "wrapped";
76
+ constructor(params) {
77
+ const mutatedWrapperParams = {
78
+ ...params
79
+ };
80
+ const mutatedParams = {
81
+ ...params.module.params,
82
+ config: {
83
+ ...params.module.params.config
84
+ }
85
+ };
86
+ super(mutatedParams);
87
+ this.wrapperParams = mutatedWrapperParams;
88
+ }
89
+ get account() {
90
+ return this.wrapperParams.account;
91
+ }
92
+ get additionalSigners() {
93
+ return this.wrapperParams.additionalSigners ?? [];
94
+ }
95
+ get address() {
96
+ return this.module.address;
97
+ }
98
+ get config() {
99
+ return this.module.config;
100
+ }
101
+ get downResolver() {
102
+ const instance = (0, import_module_model.asAttachableModuleInstance)(this.module);
103
+ if (instance) {
104
+ return instance.downResolver;
105
+ }
106
+ throw new Error("Unsupported");
107
+ }
108
+ get id() {
109
+ return this.module.id;
110
+ }
111
+ get modName() {
112
+ return this.module.modName;
113
+ }
114
+ get module() {
115
+ return this.wrapperParams.module;
116
+ }
117
+ get priority() {
118
+ return import_module_model.ObjectResolverPriority.Low;
119
+ }
120
+ get privateResolver() {
121
+ const instance = (0, import_module_model.asAttachableModuleInstance)(this.module);
122
+ if (instance) {
123
+ return instance.privateResolver;
124
+ }
125
+ throw new Error("Unsupported");
126
+ }
127
+ get queries() {
128
+ return this.module.queries;
129
+ }
130
+ get status() {
131
+ return this._status;
132
+ }
133
+ get upResolver() {
134
+ const instance = (0, import_module_model.asAttachableModuleInstance)(this.module);
135
+ if (instance) {
136
+ return instance.upResolver;
137
+ }
138
+ throw new Error("Unsupported");
139
+ }
140
+ set status(value) {
141
+ if (this._status !== "dead") {
142
+ this._status = value;
143
+ }
144
+ }
145
+ static canWrap(module2) {
146
+ return !!module2 && this.moduleIdentityCheck(module2);
147
+ }
148
+ static hasRequiredQueries(module2) {
149
+ return this.missingRequiredQueries(module2).length === 0;
150
+ }
151
+ static is(wrapper) {
152
+ return wrapper instanceof this;
153
+ }
154
+ static missingRequiredQueries(module2) {
155
+ const moduleQueries = module2.queries;
156
+ return (0, import_lodash.compact)(this.requiredQueries.map((query) => {
157
+ return moduleQueries.includes(query) ? null : query;
158
+ }));
159
+ }
160
+ static tryWrap(module2, account, checkIdentity = true) {
161
+ if (!checkIdentity || this.canWrap(module2)) {
162
+ if (!account) {
163
+ this.defaultLogger?.info("Anonymous Module Wrapper Created");
164
+ }
165
+ return new this({
166
+ account: account ?? import_account.Account.randomSync(),
167
+ module: module2
168
+ });
169
+ }
170
+ }
171
+ static with(module2, closure) {
172
+ return this.is(module2) ? closure(module2) : void 0;
173
+ }
174
+ static wrap(module2, account, checkIdentity = true) {
175
+ (0, import_assert.assertEx)(!checkIdentity || module2 && this.moduleIdentityCheck(module2), () => `Passed module failed identity check: ${module2?.config?.schema}`);
176
+ return (0, import_assert.assertEx)(this.tryWrap(module2, account ?? import_account.Account.randomSync(), checkIdentity), () => "Unable to wrap module as ModuleWrapper");
177
+ }
178
+ addParent(module2) {
179
+ const existingEntry = this._parents.find((parent) => parent.address === module2.address);
180
+ if (!existingEntry) {
181
+ this._parents.push(module2);
182
+ }
183
+ }
184
+ async addressPreviousHash() {
185
+ const queryPayload = {
186
+ schema: import_module_model.ModuleAddressQuerySchema
187
+ };
188
+ return (0, import_assert.assertEx)((await this.sendQuery(queryPayload)).find((payload) => payload.schema === import_module_model.AddressPreviousHashSchema), () => "Result did not include correct payload");
189
+ }
190
+ clearListeners(eventNames) {
191
+ return this.module.clearListeners(eventNames);
192
+ }
193
+ emit(eventName, eventArgs) {
194
+ return this.module.emit(eventName, eventArgs);
195
+ }
196
+ emitSerial(eventName, eventArgs) {
197
+ return this.module.emitSerial(eventName, eventArgs);
198
+ }
199
+ listenerCount(eventNames) {
200
+ return this.module.listenerCount(eventNames);
201
+ }
202
+ async manifest(maxDepth) {
203
+ const queryPayload = {
204
+ schema: import_module_model.ModuleManifestQuerySchema,
205
+ ...maxDepth === void 0 ? {} : {
206
+ maxDepth
207
+ }
208
+ };
209
+ return (await this.sendQuery(queryPayload))[0];
210
+ }
211
+ async manifestQuery(account, maxDepth) {
212
+ const queryPayload = {
213
+ schema: import_module_model.ModuleManifestQuerySchema,
214
+ ...maxDepth === void 0 ? {} : {
215
+ maxDepth
216
+ }
217
+ };
218
+ return await this.sendQueryRaw(queryPayload, void 0, account);
219
+ }
220
+ async moduleAddress() {
221
+ const queryPayload = {
222
+ schema: import_module_model.ModuleAddressQuerySchema
223
+ };
224
+ return await this.sendQuery(queryPayload);
225
+ }
226
+ off(eventNames, listener) {
227
+ return this.module.off(eventNames, listener);
228
+ }
229
+ offAny(listener) {
230
+ return this.module.offAny(listener);
231
+ }
232
+ on(eventNames, listener) {
233
+ return this.module.on(eventNames, listener);
234
+ }
235
+ onAny(listener) {
236
+ return this.module.onAny(listener);
237
+ }
238
+ once(eventName, listener) {
239
+ return this.module.once(eventName, listener);
240
+ }
241
+ parents() {
242
+ return this._parents;
243
+ }
244
+ async previousHash() {
245
+ const queryPayload = {
246
+ schema: import_module_model.ModuleAddressQuerySchema
247
+ };
248
+ return (await this.sendQuery(queryPayload)).pop().previousHash;
249
+ }
250
+ async previousHashQuery(account) {
251
+ const queryPayload = {
252
+ schema: import_module_model.ModuleAddressQuerySchema
253
+ };
254
+ return await this.sendQueryRaw(queryPayload, void 0, account);
255
+ }
256
+ async privateChildren() {
257
+ if ((0, import_module_model.isModuleInstance)(this.module)) {
258
+ return await this.module.privateChildren();
259
+ }
260
+ return [];
261
+ }
262
+ async publicChildren() {
263
+ if ((0, import_module_model.isModuleInstance)(this.module)) {
264
+ return await this.module.publicChildren();
265
+ }
266
+ return [];
267
+ }
268
+ async query(query, payloads) {
269
+ return await this.module.query(query, payloads);
270
+ }
271
+ queryable(query, payloads) {
272
+ return this.module.queryable(query, payloads);
273
+ }
274
+ removeParent(address) {
275
+ this._parents = this._parents.filter((item) => item.address !== address);
276
+ }
277
+ async resolve(idOrFilter = "*", options) {
278
+ const instance = (0, import_module_model.asModuleInstance)(this.module);
279
+ if (instance?.["resolve"]) {
280
+ if (idOrFilter === "*") {
281
+ return await instance.resolve("*", options);
282
+ }
283
+ switch (typeof idOrFilter) {
284
+ case "string": {
285
+ return await instance.resolve(idOrFilter, options);
286
+ }
287
+ default: {
288
+ return await instance.resolve(idOrFilter, options);
289
+ }
290
+ }
291
+ }
292
+ return typeof idOrFilter === "string" && idOrFilter !== "*" ? void 0 : [];
293
+ }
294
+ async resolvePrivate(id, _options) {
295
+ if (id === "*") return await Promise.resolve([]);
296
+ }
297
+ async siblings() {
298
+ return (await Promise.all((await this.parents()).map((parent) => parent.publicChildren()))).flat().filter(import_module_model.duplicateModules);
299
+ }
300
+ async state() {
301
+ const cachedResult = this.cachedCalls.get("state");
302
+ if (cachedResult) {
303
+ return cachedResult;
304
+ }
305
+ const queryPayload = {
306
+ schema: import_module_model.ModuleStateQuerySchema
307
+ };
308
+ const result = await this.sendQuery(queryPayload);
309
+ this.cachedCalls.set("state", result);
310
+ return result;
311
+ }
312
+ async stateQuery(_account) {
313
+ const queryPayload = {
314
+ schema: import_module_model.ModuleStateQuerySchema
315
+ };
316
+ return await this.sendQueryRaw(queryPayload);
317
+ }
318
+ bindQuery(query, payloads, account = this.account, additionalSigners = this.additionalSigners) {
319
+ const promise = new import_promise.PromiseEx(async (resolve) => {
320
+ const result = await this.bindQueryInternal(query, payloads, account, additionalSigners);
321
+ resolve?.(result);
322
+ return result;
323
+ }, account);
324
+ return promise;
325
+ }
326
+ async bindQueryInternal(query, payloads, account = this.account, additionalSigners = this.additionalSigners) {
327
+ const builder = await new import_boundwitness_builder.QueryBoundWitnessBuilder().payloads(payloads).query(query);
328
+ const accounts = [
329
+ account,
330
+ ...additionalSigners
331
+ ].filter(import_exists.exists);
332
+ const result = await (account ? builder.signers(accounts) : builder).build();
333
+ return result;
334
+ }
335
+ async filterErrors(result) {
336
+ const wrapper = await import_boundwitness_wrapper.BoundWitnessWrapper.wrap(result[0], result[1]);
337
+ return wrapper.payloadsBySchema(import_payload_model.ModuleErrorSchema);
338
+ }
339
+ async sendQuery(queryPayload, payloads) {
340
+ const queryResults = await this.sendQueryRaw(queryPayload, payloads);
341
+ const [, resultPayloads, errors] = queryResults;
342
+ if (errors && errors.length > 0) {
343
+ throw errors[0];
344
+ }
345
+ return resultPayloads;
346
+ }
347
+ async sendQueryRaw(queryPayload, payloads, account) {
348
+ const query = await this.bindQuery(queryPayload, payloads, account);
349
+ return await this.query(query[0], query[1]);
350
+ }
351
+ };
352
+ ModuleWrapper = _ts_decorate([
353
+ constructableModuleWrapper(),
354
+ _ts_metadata("design:type", Function),
355
+ _ts_metadata("design:paramtypes", [
356
+ typeof ModuleWrapperParams === "undefined" ? Object : ModuleWrapperParams
357
+ ])
358
+ ], ModuleWrapper);
2
359
  //# sourceMappingURL=index.cjs.map
@@ -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":["src_exports","__export","ModuleWrapper","constructableModuleWrapper","__toCommonJS","import_assert","import_exists","import_lodash","import_object","import_promise","import_account","import_boundwitness_builder","import_boundwitness_wrapper","import_module_model","import_payload_model","import_lru_cache","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","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","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 { 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"]}