@xyo-network/module-abstract 2.74.4 → 2.75.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.
Files changed (166) hide show
  1. package/dist/browser/AbstractModule.cjs +756 -0
  2. package/dist/browser/AbstractModule.cjs.map +1 -0
  3. package/dist/browser/AbstractModule.d.mts.map +1 -0
  4. package/dist/browser/AbstractModule.d.ts.map +1 -0
  5. package/dist/browser/AbstractModule.js +737 -0
  6. package/dist/browser/AbstractModule.js.map +1 -0
  7. package/dist/browser/AbstractModuleInstance.cjs +798 -0
  8. package/dist/browser/AbstractModuleInstance.cjs.map +1 -0
  9. package/dist/browser/AbstractModuleInstance.d.mts.map +1 -0
  10. package/dist/browser/AbstractModuleInstance.d.ts.map +1 -0
  11. package/dist/browser/AbstractModuleInstance.js +779 -0
  12. package/dist/browser/AbstractModuleInstance.js.map +1 -0
  13. package/dist/browser/BaseEmitter.cjs +68 -0
  14. package/dist/browser/BaseEmitter.cjs.map +1 -0
  15. package/dist/browser/BaseEmitter.d.mts.map +1 -0
  16. package/dist/browser/BaseEmitter.d.ts.map +1 -0
  17. package/dist/browser/BaseEmitter.js +49 -0
  18. package/dist/browser/BaseEmitter.js.map +1 -0
  19. package/dist/browser/Error.cjs +68 -0
  20. package/dist/browser/Error.cjs.map +1 -0
  21. package/dist/browser/Error.d.mts.map +1 -0
  22. package/dist/browser/Error.d.ts.map +1 -0
  23. package/dist/browser/Error.js +49 -0
  24. package/dist/browser/Error.js.map +1 -0
  25. package/dist/browser/QueryValidator/ModuleConfigQueryValidator.cjs +83 -0
  26. package/dist/browser/QueryValidator/ModuleConfigQueryValidator.cjs.map +1 -0
  27. package/dist/browser/QueryValidator/ModuleConfigQueryValidator.d.mts.map +1 -0
  28. package/dist/browser/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -0
  29. package/dist/browser/QueryValidator/ModuleConfigQueryValidator.js +64 -0
  30. package/dist/browser/QueryValidator/ModuleConfigQueryValidator.js.map +1 -0
  31. package/dist/browser/QueryValidator/QueryValidator.cjs +19 -0
  32. package/dist/browser/QueryValidator/QueryValidator.cjs.map +1 -0
  33. package/dist/browser/QueryValidator/QueryValidator.d.mts.map +1 -0
  34. package/dist/browser/QueryValidator/QueryValidator.d.ts.map +1 -0
  35. package/dist/browser/QueryValidator/QueryValidator.js +1 -0
  36. package/dist/browser/QueryValidator/QueryValidator.js.map +1 -0
  37. package/dist/browser/QueryValidator/SupportedQueryValidator.cjs +47 -0
  38. package/dist/browser/QueryValidator/SupportedQueryValidator.cjs.map +1 -0
  39. package/dist/browser/QueryValidator/SupportedQueryValidator.d.mts.map +1 -0
  40. package/dist/browser/QueryValidator/SupportedQueryValidator.d.ts.map +1 -0
  41. package/dist/browser/QueryValidator/SupportedQueryValidator.js +28 -0
  42. package/dist/browser/QueryValidator/SupportedQueryValidator.js.map +1 -0
  43. package/dist/browser/QueryValidator/index.cjs +108 -0
  44. package/dist/browser/QueryValidator/index.cjs.map +1 -0
  45. package/dist/browser/QueryValidator/index.d.mts.map +1 -0
  46. package/dist/browser/QueryValidator/index.d.ts.map +1 -0
  47. package/dist/browser/QueryValidator/index.js +87 -0
  48. package/dist/browser/QueryValidator/index.js.map +1 -0
  49. package/dist/{index.js → browser/index.cjs} +1 -11
  50. package/dist/browser/index.cjs.map +1 -0
  51. package/dist/browser/index.d.mts.map +1 -0
  52. package/dist/browser/index.d.ts.map +1 -0
  53. package/dist/{index.mjs → browser/index.js} +1 -1
  54. package/dist/browser/index.js.map +1 -0
  55. package/dist/node/AbstractModule.d.mts +84 -0
  56. package/dist/node/AbstractModule.d.mts.map +1 -0
  57. package/dist/node/AbstractModule.d.ts +84 -0
  58. package/dist/node/AbstractModule.d.ts.map +1 -0
  59. package/dist/node/AbstractModule.js +594 -0
  60. package/dist/node/AbstractModule.js.map +1 -0
  61. package/dist/node/AbstractModule.mjs +571 -0
  62. package/dist/node/AbstractModule.mjs.map +1 -0
  63. package/dist/node/AbstractModuleInstance.d.mts +14 -0
  64. package/dist/node/AbstractModuleInstance.d.mts.map +1 -0
  65. package/dist/node/AbstractModuleInstance.d.ts +14 -0
  66. package/dist/node/AbstractModuleInstance.d.ts.map +1 -0
  67. package/dist/node/AbstractModuleInstance.js +68 -0
  68. package/dist/node/AbstractModuleInstance.js.map +1 -0
  69. package/dist/node/AbstractModuleInstance.mjs +45 -0
  70. package/dist/node/AbstractModuleInstance.mjs.map +1 -0
  71. package/dist/node/BaseEmitter.d.mts +17 -0
  72. package/dist/node/BaseEmitter.d.mts.map +1 -0
  73. package/dist/node/BaseEmitter.d.ts +17 -0
  74. package/dist/node/BaseEmitter.d.ts.map +1 -0
  75. package/dist/node/BaseEmitter.js +70 -0
  76. package/dist/node/BaseEmitter.js.map +1 -0
  77. package/dist/node/BaseEmitter.mjs +47 -0
  78. package/dist/node/BaseEmitter.mjs.map +1 -0
  79. package/dist/node/Error.d.mts +15 -0
  80. package/dist/node/Error.d.mts.map +1 -0
  81. package/dist/node/Error.d.ts +15 -0
  82. package/dist/node/Error.d.ts.map +1 -0
  83. package/dist/node/Error.js +70 -0
  84. package/dist/node/Error.js.map +1 -0
  85. package/dist/node/Error.mjs +47 -0
  86. package/dist/node/Error.mjs.map +1 -0
  87. package/dist/node/QueryValidator/ModuleConfigQueryValidator.d.mts +15 -0
  88. package/dist/node/QueryValidator/ModuleConfigQueryValidator.d.mts.map +1 -0
  89. package/dist/node/QueryValidator/ModuleConfigQueryValidator.d.ts +15 -0
  90. package/dist/node/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -0
  91. package/dist/node/QueryValidator/ModuleConfigQueryValidator.js +85 -0
  92. package/dist/node/QueryValidator/ModuleConfigQueryValidator.js.map +1 -0
  93. package/dist/node/QueryValidator/ModuleConfigQueryValidator.mjs +62 -0
  94. package/dist/node/QueryValidator/ModuleConfigQueryValidator.mjs.map +1 -0
  95. package/dist/node/QueryValidator/QueryValidator.d.mts +8 -0
  96. package/dist/node/QueryValidator/QueryValidator.d.mts.map +1 -0
  97. package/dist/node/QueryValidator/QueryValidator.d.ts +8 -0
  98. package/dist/node/QueryValidator/QueryValidator.d.ts.map +1 -0
  99. package/dist/node/QueryValidator/QueryValidator.js +17 -0
  100. package/dist/node/QueryValidator/QueryValidator.js.map +1 -0
  101. package/dist/node/QueryValidator/QueryValidator.mjs +1 -0
  102. package/dist/node/QueryValidator/QueryValidator.mjs.map +1 -0
  103. package/dist/node/QueryValidator/SupportedQueryValidator.d.mts +22 -0
  104. package/dist/node/QueryValidator/SupportedQueryValidator.d.mts.map +1 -0
  105. package/dist/node/QueryValidator/SupportedQueryValidator.d.ts +22 -0
  106. package/dist/node/QueryValidator/SupportedQueryValidator.d.ts.map +1 -0
  107. package/dist/node/QueryValidator/SupportedQueryValidator.js +50 -0
  108. package/dist/node/QueryValidator/SupportedQueryValidator.js.map +1 -0
  109. package/dist/node/QueryValidator/SupportedQueryValidator.mjs +26 -0
  110. package/dist/node/QueryValidator/SupportedQueryValidator.mjs.map +1 -0
  111. package/dist/node/QueryValidator/index.d.mts +4 -0
  112. package/dist/node/QueryValidator/index.d.mts.map +1 -0
  113. package/dist/node/QueryValidator/index.d.ts +4 -0
  114. package/dist/node/QueryValidator/index.d.ts.map +1 -0
  115. package/dist/node/QueryValidator/index.js +27 -0
  116. package/dist/node/QueryValidator/index.js.map +1 -0
  117. package/dist/node/QueryValidator/index.mjs +4 -0
  118. package/dist/node/QueryValidator/index.mjs.map +1 -0
  119. package/dist/node/index.d.mts +6 -0
  120. package/dist/node/index.d.mts.map +1 -0
  121. package/dist/node/index.d.ts +6 -0
  122. package/dist/node/index.d.ts.map +1 -0
  123. package/dist/node/index.js +31 -0
  124. package/dist/node/index.js.map +1 -0
  125. package/dist/node/index.mjs +6 -0
  126. package/dist/node/index.mjs.map +1 -0
  127. package/package.json +46 -43
  128. package/dist/AbstractModule.d.mts.map +0 -1
  129. package/dist/AbstractModule.d.ts.map +0 -1
  130. package/dist/AbstractModuleInstance.d.mts.map +0 -1
  131. package/dist/AbstractModuleInstance.d.ts.map +0 -1
  132. package/dist/BaseEmitter.d.mts.map +0 -1
  133. package/dist/BaseEmitter.d.ts.map +0 -1
  134. package/dist/Error.d.mts.map +0 -1
  135. package/dist/Error.d.ts.map +0 -1
  136. package/dist/QueryValidator/ModuleConfigQueryValidator.d.mts.map +0 -1
  137. package/dist/QueryValidator/ModuleConfigQueryValidator.d.ts.map +0 -1
  138. package/dist/QueryValidator/QueryValidator.d.mts.map +0 -1
  139. package/dist/QueryValidator/QueryValidator.d.ts.map +0 -1
  140. package/dist/QueryValidator/SupportedQueryValidator.d.mts.map +0 -1
  141. package/dist/QueryValidator/SupportedQueryValidator.d.ts.map +0 -1
  142. package/dist/QueryValidator/index.d.mts.map +0 -1
  143. package/dist/QueryValidator/index.d.ts.map +0 -1
  144. package/dist/docs.json +0 -42701
  145. package/dist/index.d.mts.map +0 -1
  146. package/dist/index.d.ts.map +0 -1
  147. package/dist/index.js.map +0 -1
  148. package/dist/index.mjs.map +0 -1
  149. /package/dist/{AbstractModule.d.mts → browser/AbstractModule.d.mts} +0 -0
  150. /package/dist/{AbstractModule.d.ts → browser/AbstractModule.d.ts} +0 -0
  151. /package/dist/{AbstractModuleInstance.d.mts → browser/AbstractModuleInstance.d.mts} +0 -0
  152. /package/dist/{AbstractModuleInstance.d.ts → browser/AbstractModuleInstance.d.ts} +0 -0
  153. /package/dist/{BaseEmitter.d.mts → browser/BaseEmitter.d.mts} +0 -0
  154. /package/dist/{BaseEmitter.d.ts → browser/BaseEmitter.d.ts} +0 -0
  155. /package/dist/{Error.d.mts → browser/Error.d.mts} +0 -0
  156. /package/dist/{Error.d.ts → browser/Error.d.ts} +0 -0
  157. /package/dist/{QueryValidator → browser/QueryValidator}/ModuleConfigQueryValidator.d.mts +0 -0
  158. /package/dist/{QueryValidator → browser/QueryValidator}/ModuleConfigQueryValidator.d.ts +0 -0
  159. /package/dist/{QueryValidator → browser/QueryValidator}/QueryValidator.d.mts +0 -0
  160. /package/dist/{QueryValidator → browser/QueryValidator}/QueryValidator.d.ts +0 -0
  161. /package/dist/{QueryValidator → browser/QueryValidator}/SupportedQueryValidator.d.mts +0 -0
  162. /package/dist/{QueryValidator → browser/QueryValidator}/SupportedQueryValidator.d.ts +0 -0
  163. /package/dist/{QueryValidator → browser/QueryValidator}/index.d.mts +0 -0
  164. /package/dist/{QueryValidator → browser/QueryValidator}/index.d.ts +0 -0
  165. /package/dist/{index.d.mts → browser/index.d.mts} +0 -0
  166. /package/dist/{index.d.ts → browser/index.d.ts} +0 -0
@@ -0,0 +1,594 @@
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
+ var AbstractModule_exports = {};
21
+ __export(AbstractModule_exports, {
22
+ AbstractModule: () => AbstractModule
23
+ });
24
+ module.exports = __toCommonJS(AbstractModule_exports);
25
+ var import_assert = require("@xylabs/assert");
26
+ var import_exists = require("@xylabs/exists");
27
+ var import_lodash = require("@xylabs/lodash");
28
+ var import_account = require("@xyo-network/account");
29
+ var import_address_payload_plugin = require("@xyo-network/address-payload-plugin");
30
+ var import_archivist_model = require("@xyo-network/archivist-model");
31
+ var import_boundwitness_builder = require("@xyo-network/boundwitness-builder");
32
+ var import_config_payload_plugin = require("@xyo-network/config-payload-plugin");
33
+ var import_core = require("@xyo-network/core");
34
+ var import_error = require("@xyo-network/error");
35
+ var import_manifest_model = require("@xyo-network/manifest-model");
36
+ var import_module_model = require("@xyo-network/module-model");
37
+ var import_module_resolver = require("@xyo-network/module-resolver");
38
+ var import_payload_builder = require("@xyo-network/payload-builder");
39
+ var import_promise = require("@xyo-network/promise");
40
+ var import_query_payload_plugin = require("@xyo-network/query-payload-plugin");
41
+ var import_shared = require("@xyo-network/shared");
42
+ var import_BaseEmitter = require("./BaseEmitter");
43
+ var import_Error = require("./Error");
44
+ var import_QueryValidator = require("./QueryValidator");
45
+ class AbstractModule extends import_BaseEmitter.BaseEmitter {
46
+ static {
47
+ __name(this, "AbstractModule");
48
+ }
49
+ static configSchemas;
50
+ static enableLazyLoad = false;
51
+ static privateConstructorKey = Date.now().toString();
52
+ downResolver = new import_module_resolver.CompositeModuleResolver();
53
+ upResolver = new import_module_resolver.CompositeModuleResolver();
54
+ _account = void 0;
55
+ _baseModuleQueryAccountPaths = {
56
+ [import_module_model.ModuleAddressQuerySchema]: "1",
57
+ [import_module_model.ModuleDescribeQuerySchema]: "4",
58
+ [import_module_model.ModuleDiscoverQuerySchema]: "2",
59
+ [import_module_model.ModuleManifestQuerySchema]: "5",
60
+ [import_module_model.ModuleSubscribeQuerySchema]: "3"
61
+ };
62
+ _queryAccounts = {
63
+ [import_module_model.ModuleAddressQuerySchema]: void 0,
64
+ [import_module_model.ModuleDescribeQuerySchema]: void 0,
65
+ [import_module_model.ModuleDiscoverQuerySchema]: void 0,
66
+ [import_module_model.ModuleManifestQuerySchema]: void 0,
67
+ [import_module_model.ModuleSubscribeQuerySchema]: void 0
68
+ };
69
+ _startPromise = void 0;
70
+ _started = void 0;
71
+ moduleConfigQueryValidator;
72
+ supportedQueryValidator;
73
+ _busyCount = 0;
74
+ constructor(privateConstructorKey, params, account) {
75
+ (0, import_assert.assertEx)(AbstractModule.privateConstructorKey === privateConstructorKey, "Use create function instead of constructor");
76
+ const mutatedParams = {
77
+ ...params
78
+ };
79
+ super(mutatedParams);
80
+ this._account = account;
81
+ this.supportedQueryValidator = new import_QueryValidator.SupportedQueryValidator(this).queryable;
82
+ this.moduleConfigQueryValidator = new import_QueryValidator.ModuleConfigQueryValidator(mutatedParams?.config).queryable;
83
+ }
84
+ static get configSchema() {
85
+ return this.configSchemas[0];
86
+ }
87
+ get account() {
88
+ return (0, import_assert.assertEx)(this._account, "Missing account");
89
+ }
90
+ get address() {
91
+ return this.account.address;
92
+ }
93
+ get allowAnonymous() {
94
+ return !!this.config.security?.allowAnonymous;
95
+ }
96
+ get config() {
97
+ return this.params.config;
98
+ }
99
+ get ephemeralQueryAccountEnabled() {
100
+ return !!this.params.ephemeralQueryAccountEnabled;
101
+ }
102
+ get queries() {
103
+ return [
104
+ import_module_model.ModuleDiscoverQuerySchema,
105
+ import_module_model.ModuleAddressQuerySchema,
106
+ import_module_model.ModuleSubscribeQuerySchema,
107
+ import_module_model.ModuleDescribeQuerySchema,
108
+ import_module_model.ModuleManifestQuerySchema
109
+ ];
110
+ }
111
+ get queryAccountPaths() {
112
+ return {
113
+ ...this._baseModuleQueryAccountPaths,
114
+ ...this._queryAccountPaths
115
+ };
116
+ }
117
+ get queryAccounts() {
118
+ return this._queryAccounts;
119
+ }
120
+ get timestamp() {
121
+ return this.config.timestamp ?? false;
122
+ }
123
+ static _getRootFunction(funcName) {
124
+ let anyThis = this;
125
+ while (anyThis.__proto__[funcName]) {
126
+ anyThis = anyThis.__proto__;
127
+ }
128
+ return anyThis[funcName];
129
+ }
130
+ static _noOverride(functionName) {
131
+ const thisFunc = this[functionName];
132
+ const rootFunc = this._getRootFunction(functionName);
133
+ (0, import_assert.assertEx)(thisFunc === rootFunc, `Override not allowed for [${functionName}] - override ${functionName}Handler instead`);
134
+ }
135
+ static async create(params) {
136
+ this._noOverride("create");
137
+ if (!this.configSchemas || this.configSchemas.length === 0) {
138
+ throw Error(`Missing configSchema [${params?.config?.schema}][${this.name}]`);
139
+ }
140
+ const { account, config, wallet } = params ?? {};
141
+ const { accountDerivationPath } = config ?? {};
142
+ (0, import_assert.assertEx)(!(!!account && !!wallet), `Specifying both {account} and {wallet} are not allowed [${config?.schema}] [${account === "random" ? "random" : account?.address}, ${wallet?.address}]`);
143
+ const schema = params?.config?.schema ?? this.configSchema;
144
+ const allowedSchemas = this.configSchemas;
145
+ (0, import_assert.assertEx)(allowedSchemas.filter((allowedSchema) => allowedSchema === schema).length > 0, `Bad Config Schema [Received ${schema}] [Expected ${JSON.stringify(allowedSchemas)}]`);
146
+ const mutatedConfig = {
147
+ ...params?.config,
148
+ schema
149
+ };
150
+ params?.logger?.debug(`config: ${JSON.stringify(mutatedConfig, null, 2)}`);
151
+ const mutatedParams = {
152
+ ...params,
153
+ config: mutatedConfig
154
+ };
155
+ const activeLogger = params?.logger ?? AbstractModule.defaultLogger;
156
+ const generatedAccount = await AbstractModule.determineAccount({
157
+ account,
158
+ accountDerivationPath,
159
+ wallet
160
+ });
161
+ const address = generatedAccount.address;
162
+ mutatedParams.logger = activeLogger ? new import_shared.IdLogger(activeLogger, () => `0x${address}`) : void 0;
163
+ const newModule = new this(AbstractModule.privateConstructorKey, mutatedParams, generatedAccount);
164
+ if (!AbstractModule.enableLazyLoad) {
165
+ await newModule.start?.();
166
+ }
167
+ return newModule;
168
+ }
169
+ static async determineAccount({ account, accountDerivationPath, wallet }) {
170
+ if (wallet) {
171
+ return (0, import_assert.assertEx)(accountDerivationPath ? await wallet.derivePath(accountDerivationPath) : wallet, "Failed to derive account from path");
172
+ } else if (account === "random") {
173
+ return await import_account.HDWallet.random();
174
+ } else if (account) {
175
+ return account;
176
+ } else {
177
+ console.warn("AbstractModule.determineAccount: No account provided - Creating Random account");
178
+ return await import_account.HDWallet.random();
179
+ }
180
+ }
181
+ static factory(params) {
182
+ return import_module_model.ModuleFactory.withParams(this, params);
183
+ }
184
+ _getRootFunction(funcName) {
185
+ let anyThis = this;
186
+ while (anyThis.__proto__[funcName]) {
187
+ anyThis = anyThis.__proto__;
188
+ }
189
+ return anyThis[funcName];
190
+ }
191
+ _noOverride(functionName) {
192
+ const thisFunc = this[functionName];
193
+ const rootFunc = this._getRootFunction(functionName);
194
+ (0, import_assert.assertEx)(thisFunc === rootFunc, `Override not allowed for [${functionName}] - override ${functionName}Handler instead`);
195
+ }
196
+ async busy(closure) {
197
+ if (this._busyCount <= 0) {
198
+ this._busyCount = 0;
199
+ const args = {
200
+ busy: true,
201
+ module: this
202
+ };
203
+ await this.emit("moduleBusy", args);
204
+ }
205
+ this._busyCount++;
206
+ try {
207
+ return await closure();
208
+ } finally {
209
+ this._busyCount--;
210
+ if (this._busyCount <= 0) {
211
+ this._busyCount = 0;
212
+ const args = {
213
+ busy: false,
214
+ module: this
215
+ };
216
+ await this.emit("moduleBusy", args);
217
+ }
218
+ }
219
+ }
220
+ emit(eventName, eventArgs) {
221
+ return super.emit(eventName, eventArgs);
222
+ }
223
+ previousHash() {
224
+ return this.account.previousHash;
225
+ }
226
+ async query(query, payloads, queryConfig) {
227
+ this._noOverride("query");
228
+ return await this.busy(async () => {
229
+ const resultPayloads = [];
230
+ const errorPayloads = [];
231
+ const queryAccount = this.ephemeralQueryAccountEnabled ? await import_account.HDWallet.random() : void 0;
232
+ try {
233
+ await this.started("throw");
234
+ if (!this.allowAnonymous) {
235
+ if (query.addresses.length === 0) {
236
+ throw Error(`Anonymous Queries not allowed, but running anyway [${this.config.name}], [${this.address}]`);
237
+ }
238
+ }
239
+ resultPayloads.push(...await this.queryHandler((0, import_assert.assertEx)(import_boundwitness_builder.QueryBoundWitnessWrapper.unwrap(query)), payloads, queryConfig));
240
+ } catch (ex) {
241
+ await (0, import_error.handleErrorAsync)(ex, async (error) => {
242
+ errorPayloads.push(new import_Error.ModuleErrorBuilder().sources([
243
+ await import_core.PayloadHasher.hashAsync(query)
244
+ ]).name(this.config.name ?? "<Unknown>").query(query.schema).message(error.message).build());
245
+ });
246
+ }
247
+ if (this.timestamp) {
248
+ const timestamp = {
249
+ schema: "network.xyo.timestamp",
250
+ timestamp: Date.now()
251
+ };
252
+ resultPayloads.push(timestamp);
253
+ }
254
+ const result = await this.bindQueryResult(query, resultPayloads, queryAccount ? [
255
+ queryAccount
256
+ ] : [], errorPayloads);
257
+ const args = {
258
+ module: this,
259
+ payloads,
260
+ query,
261
+ result
262
+ };
263
+ await this.emit("moduleQueried", args);
264
+ return result;
265
+ });
266
+ }
267
+ queryable(query, payloads, queryConfig) {
268
+ if (!this.started("warn"))
269
+ return false;
270
+ const configValidator = queryConfig ? new import_QueryValidator.ModuleConfigQueryValidator(Object.assign({}, this.config, queryConfig)).queryable : this.moduleConfigQueryValidator;
271
+ const validators = [
272
+ this.supportedQueryValidator,
273
+ configValidator
274
+ ];
275
+ return validators.every((validator) => validator(query, payloads));
276
+ }
277
+ async resolve(nameOrAddressOrFilter, options) {
278
+ const direction = options?.direction ?? "all";
279
+ const up = direction === "up" || direction === "all";
280
+ const down = direction === "down" || direction === "all";
281
+ switch (typeof nameOrAddressOrFilter) {
282
+ case "string": {
283
+ return (down ? await this.downResolver.resolve(nameOrAddressOrFilter, options) : void 0) ?? (up ? await this.upResolver.resolve(nameOrAddressOrFilter, options) : void 0);
284
+ }
285
+ default: {
286
+ const filter = nameOrAddressOrFilter;
287
+ return [
288
+ ...down ? await this.downResolver.resolve(filter, options) : [],
289
+ ...up ? await this.upResolver.resolve(filter, options) : []
290
+ ].filter(import_module_model.duplicateModules);
291
+ }
292
+ }
293
+ }
294
+ start(_timeout) {
295
+ this._startPromise = this._startPromise ?? this.startHandler();
296
+ return this._startPromise;
297
+ }
298
+ async started(notStartedAction = "log", tryStart = true) {
299
+ const started = await this._started;
300
+ if (started === true) {
301
+ return true;
302
+ }
303
+ if (!started) {
304
+ this._started = (async () => {
305
+ if (tryStart) {
306
+ try {
307
+ await this.start();
308
+ return true;
309
+ } catch (ex) {
310
+ (0, import_error.handleError)(ex, (error) => {
311
+ this.logger?.warn(`Autostart of Module Failed: ${error.message})`);
312
+ this._started = void 0;
313
+ });
314
+ }
315
+ }
316
+ switch (notStartedAction) {
317
+ case "throw":
318
+ throw Error(`Module not Started [${this.address}]`);
319
+ case "warn":
320
+ this.logger?.warn("Module not started");
321
+ break;
322
+ case "error":
323
+ this.logger?.error("Module not started");
324
+ break;
325
+ case "none":
326
+ break;
327
+ case "log":
328
+ default: {
329
+ this.logger?.log("Module not started");
330
+ break;
331
+ }
332
+ }
333
+ return false;
334
+ })();
335
+ }
336
+ if (!this._started) {
337
+ throw "Failed to create start promise";
338
+ }
339
+ return await this._started;
340
+ }
341
+ async stop(_timeout) {
342
+ return await this.busy(async () => {
343
+ const result = await this.stopHandler();
344
+ this._started = void 0;
345
+ this._startPromise = void 0;
346
+ return result;
347
+ });
348
+ }
349
+ bindHashes(hashes, schema, account) {
350
+ const promise = new import_promise.PromiseEx((resolve) => {
351
+ const result = this.bindHashesInternal(hashes, schema, account);
352
+ resolve?.(result);
353
+ return result;
354
+ }, account);
355
+ return promise;
356
+ }
357
+ async bindHashesInternal(hashes, schema, account) {
358
+ const builder = new import_boundwitness_builder.BoundWitnessBuilder().hashes(hashes, schema).witness(this.account);
359
+ const result = (await (account ? builder.witness(account) : builder).build())[0];
360
+ this.logger?.debug(`result: ${JSON.stringify(result, null, 2)}`);
361
+ return result;
362
+ }
363
+ bindQuery(query, payloads, account) {
364
+ const promise = new import_promise.PromiseEx(async (resolve) => {
365
+ const result = await this.bindQueryInternal(query, payloads, account);
366
+ resolve?.(result);
367
+ return result;
368
+ }, account);
369
+ return promise;
370
+ }
371
+ async bindQueryInternal(query, payloads, account) {
372
+ const builder = new import_boundwitness_builder.QueryBoundWitnessBuilder().payloads(payloads).witness(this.account).query(query);
373
+ const result = await (account ? builder.witness(account) : builder).build();
374
+ return result;
375
+ }
376
+ async bindQueryResult(query, payloads, additionalWitnesses = [], errors) {
377
+ const builder = new import_boundwitness_builder.BoundWitnessBuilder().payloads(payloads).errors(errors);
378
+ const queryWitnessAccount = this.queryAccounts[query.schema];
379
+ const witnesses = [
380
+ this.account,
381
+ queryWitnessAccount,
382
+ ...additionalWitnesses
383
+ ].filter(import_exists.exists);
384
+ builder.witnesses(witnesses);
385
+ const result = [
386
+ (await builder.build())[0],
387
+ payloads,
388
+ errors ?? []
389
+ ];
390
+ return result;
391
+ }
392
+ commitArchivist = () => this.getArchivist("commit");
393
+ async describeHandler() {
394
+ const description = {
395
+ address: this.address,
396
+ queries: this.queries,
397
+ schema: import_module_model.ModuleDescriptionSchema
398
+ };
399
+ if (this.config?.name) {
400
+ description.name = this.config.name;
401
+ }
402
+ const discover = await this.discoverHandler();
403
+ description.children = (0, import_lodash.compact)(discover?.map((payload) => {
404
+ const address = payload.schema === import_address_payload_plugin.AddressSchema ? payload.address : void 0;
405
+ return address != this.address ? address : void 0;
406
+ }) ?? []);
407
+ return description;
408
+ }
409
+ discoverHandler() {
410
+ const config = this.config;
411
+ const address = new import_payload_builder.PayloadBuilder({
412
+ schema: import_address_payload_plugin.AddressSchema
413
+ }).fields({
414
+ address: this.address,
415
+ name: this.config?.name
416
+ }).build();
417
+ const queries = this.queries.map((query) => {
418
+ return new import_payload_builder.PayloadBuilder({
419
+ schema: import_query_payload_plugin.QuerySchema
420
+ }).fields({
421
+ query
422
+ }).build();
423
+ });
424
+ const configSchema = {
425
+ config: config.schema,
426
+ schema: import_config_payload_plugin.ConfigSchema
427
+ };
428
+ return (0, import_lodash.compact)([
429
+ config,
430
+ configSchema,
431
+ address,
432
+ ...queries
433
+ ]);
434
+ }
435
+ async getArchivist(kind) {
436
+ if (!this.config.archivist)
437
+ return void 0;
438
+ const filter = typeof this.config.archivist === "string" || this.config.archivist instanceof String ? this.config.archivist : this.config?.archivist?.[kind];
439
+ const resolved = await this.upResolver.resolve(filter);
440
+ return (0, import_archivist_model.asArchivistInstance)(resolved);
441
+ }
442
+ async initializeQueryAccounts() {
443
+ const paths = Object.values(this.queryAccountPaths).filter(import_exists.exists);
444
+ const distinctPaths = new Set(paths);
445
+ (0, import_assert.assertEx)(distinctPaths.size === paths.length, `${this.config?.name ? this.config.name + ": " : ""}Duplicate query account paths`);
446
+ const wallet = this.account;
447
+ if (wallet?.derivePath) {
448
+ for (const key in this.queryAccountPaths) {
449
+ if (Object.prototype.hasOwnProperty.call(this.queryAccountPaths, key)) {
450
+ const query = key;
451
+ const queryAccountPath = this.queryAccountPaths[query];
452
+ if (queryAccountPath) {
453
+ this._queryAccounts[query] = await wallet.derivePath?.(queryAccountPath);
454
+ }
455
+ }
456
+ }
457
+ }
458
+ }
459
+ manifestHandler(_ignoreAddresses) {
460
+ const name = this.config.name ?? "Anonymous";
461
+ return {
462
+ config: {
463
+ name,
464
+ ...this.config
465
+ },
466
+ schema: import_manifest_model.ModuleManifestPayloadSchema
467
+ };
468
+ }
469
+ moduleAddressHandler() {
470
+ const queryAccounts = Object.entries(this.queryAccounts).filter((value) => {
471
+ return (0, import_exists.exists)(value[1]);
472
+ }).map(([name2, account]) => {
473
+ const address2 = account.address;
474
+ const previousHash2 = account.previousHash;
475
+ return [
476
+ {
477
+ address: address2,
478
+ name: name2,
479
+ schema: import_address_payload_plugin.AddressSchema
480
+ },
481
+ {
482
+ address: address2,
483
+ previousHash: previousHash2,
484
+ schema: import_module_model.AddressPreviousHashSchema
485
+ }
486
+ ];
487
+ });
488
+ const address = this.address;
489
+ const name = this.config.name;
490
+ const previousHash = this.address;
491
+ const moduleAccount = name ? {
492
+ address,
493
+ name,
494
+ schema: import_address_payload_plugin.AddressSchema
495
+ } : {
496
+ address,
497
+ schema: import_address_payload_plugin.AddressSchema
498
+ };
499
+ const moduleAccountPreviousHash = previousHash ? {
500
+ address,
501
+ previousHash,
502
+ schema: import_module_model.AddressPreviousHashSchema
503
+ } : {
504
+ address,
505
+ schema: import_module_model.AddressPreviousHashSchema
506
+ };
507
+ return [
508
+ moduleAccount,
509
+ moduleAccountPreviousHash,
510
+ ...queryAccounts
511
+ ].flat();
512
+ }
513
+ async queryHandler(query, payloads, queryConfig) {
514
+ await this.started("throw");
515
+ const wrapper = import_boundwitness_builder.QueryBoundWitnessWrapper.parseQuery(query, payloads);
516
+ const queryPayload = await wrapper.getQuery();
517
+ (0, import_assert.assertEx)(this.queryable(query, payloads, queryConfig));
518
+ const resultPayloads = [];
519
+ switch (queryPayload.schema) {
520
+ case import_module_model.ModuleManifestQuerySchema: {
521
+ resultPayloads.push(await this.manifestHandler());
522
+ break;
523
+ }
524
+ case import_module_model.ModuleDiscoverQuerySchema: {
525
+ resultPayloads.push(...await this.discoverHandler());
526
+ break;
527
+ }
528
+ case import_module_model.ModuleDescribeQuerySchema: {
529
+ resultPayloads.push(await this.describeHandler());
530
+ break;
531
+ }
532
+ case import_module_model.ModuleAddressQuerySchema: {
533
+ resultPayloads.push(...await this.moduleAddressHandler());
534
+ break;
535
+ }
536
+ case import_module_model.ModuleSubscribeQuerySchema: {
537
+ this.subscribeHandler();
538
+ break;
539
+ }
540
+ default:
541
+ throw Error(`Unsupported Query [${queryPayload.schema}]`);
542
+ }
543
+ return resultPayloads;
544
+ }
545
+ readArchivist = () => this.getArchivist("read");
546
+ async startHandler() {
547
+ this.validateConfig();
548
+ await this.initializeQueryAccounts();
549
+ this._started = true;
550
+ return true;
551
+ }
552
+ stopHandler(_timeout) {
553
+ this._started = void 0;
554
+ return true;
555
+ }
556
+ subscribeHandler() {
557
+ return;
558
+ }
559
+ validateConfig(config, parents = []) {
560
+ return Object.entries(config ?? this.config ?? {}).reduce((valid, [key, value]) => {
561
+ switch (typeof value) {
562
+ case "function":
563
+ this.logger?.warn(`Fields of type function not allowed in config [${parents?.join(".")}.${key}]`);
564
+ return false;
565
+ case "object": {
566
+ if (Array.isArray(value)) {
567
+ return value.reduce((valid2, value2) => {
568
+ return this.validateConfig(value2, [
569
+ ...parents,
570
+ key
571
+ ]) && valid2;
572
+ }, true) && valid;
573
+ }
574
+ if (!(0, import_module_model.serializableField)(value)) {
575
+ this.logger?.warn(`Fields that are not serializable to JSON are not allowed in config [${parents?.join(".")}.${key}]`);
576
+ return false;
577
+ }
578
+ return value ? this.validateConfig(value, [
579
+ ...parents,
580
+ key
581
+ ]) && valid : true;
582
+ }
583
+ default:
584
+ return valid;
585
+ }
586
+ }, true);
587
+ }
588
+ writeArchivist = () => this.getArchivist("write");
589
+ }
590
+ // Annotate the CommonJS export names for ESM import in node:
591
+ 0 && (module.exports = {
592
+ AbstractModule
593
+ });
594
+ //# sourceMappingURL=AbstractModule.js.map