@xyo-network/module-abstract 2.74.5 → 2.75.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/AbstractModule.cjs +756 -0
- package/dist/browser/AbstractModule.cjs.map +1 -0
- package/dist/browser/AbstractModule.d.cts.map +1 -0
- package/dist/browser/AbstractModule.d.mts.map +1 -0
- package/dist/browser/AbstractModule.d.ts +84 -0
- package/dist/browser/AbstractModule.d.ts.map +1 -0
- package/dist/browser/AbstractModule.js +571 -0
- package/dist/browser/AbstractModule.js.map +1 -0
- package/dist/browser/AbstractModuleInstance.cjs +798 -0
- package/dist/browser/AbstractModuleInstance.cjs.map +1 -0
- package/dist/browser/AbstractModuleInstance.d.cts.map +1 -0
- package/dist/browser/AbstractModuleInstance.d.mts.map +1 -0
- package/dist/browser/AbstractModuleInstance.d.ts +14 -0
- package/dist/browser/AbstractModuleInstance.d.ts.map +1 -0
- package/dist/browser/AbstractModuleInstance.js +45 -0
- package/dist/browser/AbstractModuleInstance.js.map +1 -0
- package/dist/browser/BaseEmitter.cjs +68 -0
- package/dist/browser/BaseEmitter.cjs.map +1 -0
- package/dist/browser/BaseEmitter.d.cts.map +1 -0
- package/dist/browser/BaseEmitter.d.mts.map +1 -0
- package/dist/browser/BaseEmitter.d.ts +17 -0
- package/dist/browser/BaseEmitter.d.ts.map +1 -0
- package/dist/browser/BaseEmitter.js +47 -0
- package/dist/browser/BaseEmitter.js.map +1 -0
- package/dist/browser/Error.cjs +68 -0
- package/dist/browser/Error.cjs.map +1 -0
- package/dist/browser/Error.d.cts.map +1 -0
- package/dist/browser/Error.d.mts.map +1 -0
- package/dist/browser/Error.d.ts +15 -0
- package/dist/browser/Error.d.ts.map +1 -0
- package/dist/browser/Error.js +47 -0
- package/dist/browser/Error.js.map +1 -0
- package/dist/browser/QueryValidator/ModuleConfigQueryValidator.cjs +83 -0
- package/dist/browser/QueryValidator/ModuleConfigQueryValidator.cjs.map +1 -0
- package/dist/browser/QueryValidator/ModuleConfigQueryValidator.d.cts.map +1 -0
- package/dist/browser/QueryValidator/ModuleConfigQueryValidator.d.mts.map +1 -0
- package/dist/browser/QueryValidator/ModuleConfigQueryValidator.d.ts +15 -0
- package/dist/browser/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -0
- package/dist/browser/QueryValidator/ModuleConfigQueryValidator.js +62 -0
- package/dist/browser/QueryValidator/ModuleConfigQueryValidator.js.map +1 -0
- package/dist/browser/QueryValidator/QueryValidator.cjs +19 -0
- package/dist/browser/QueryValidator/QueryValidator.cjs.map +1 -0
- package/dist/browser/QueryValidator/QueryValidator.d.cts.map +1 -0
- package/dist/browser/QueryValidator/QueryValidator.d.mts.map +1 -0
- package/dist/browser/QueryValidator/QueryValidator.d.ts +8 -0
- package/dist/browser/QueryValidator/QueryValidator.d.ts.map +1 -0
- package/dist/browser/QueryValidator/QueryValidator.js +1 -0
- package/dist/browser/QueryValidator/QueryValidator.js.map +1 -0
- package/dist/browser/QueryValidator/SupportedQueryValidator.cjs +47 -0
- package/dist/browser/QueryValidator/SupportedQueryValidator.cjs.map +1 -0
- package/dist/browser/QueryValidator/SupportedQueryValidator.d.cts.map +1 -0
- package/dist/browser/QueryValidator/SupportedQueryValidator.d.mts.map +1 -0
- package/dist/browser/QueryValidator/SupportedQueryValidator.d.ts +22 -0
- package/dist/browser/QueryValidator/SupportedQueryValidator.d.ts.map +1 -0
- package/dist/browser/QueryValidator/SupportedQueryValidator.js +26 -0
- package/dist/browser/QueryValidator/SupportedQueryValidator.js.map +1 -0
- package/dist/browser/QueryValidator/index.cjs +108 -0
- package/dist/browser/QueryValidator/index.cjs.map +1 -0
- package/dist/browser/QueryValidator/index.d.cts.map +1 -0
- package/dist/browser/QueryValidator/index.d.mts.map +1 -0
- package/dist/browser/QueryValidator/index.d.ts +4 -0
- package/dist/browser/QueryValidator/index.d.ts.map +1 -0
- package/dist/browser/QueryValidator/index.js +4 -0
- package/dist/browser/QueryValidator/index.js.map +1 -0
- package/dist/{index.js → browser/index.cjs} +1 -11
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.cts.map +1 -0
- package/dist/browser/index.d.mts.map +1 -0
- package/dist/browser/index.d.ts +6 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +6 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/docs.json +1031 -1031
- package/dist/node/AbstractModule.d.cts +84 -0
- package/dist/node/AbstractModule.d.cts.map +1 -0
- package/dist/node/AbstractModule.d.mts +84 -0
- package/dist/node/AbstractModule.d.mts.map +1 -0
- package/dist/node/AbstractModule.d.ts +84 -0
- package/dist/node/AbstractModule.d.ts.map +1 -0
- package/dist/node/AbstractModule.js +778 -0
- package/dist/node/AbstractModule.js.map +1 -0
- package/dist/node/AbstractModule.mjs +755 -0
- package/dist/node/AbstractModule.mjs.map +1 -0
- package/dist/node/AbstractModuleInstance.d.cts +14 -0
- package/dist/node/AbstractModuleInstance.d.cts.map +1 -0
- package/dist/node/AbstractModuleInstance.d.mts +14 -0
- package/dist/node/AbstractModuleInstance.d.mts.map +1 -0
- package/dist/node/AbstractModuleInstance.d.ts +14 -0
- package/dist/node/AbstractModuleInstance.d.ts.map +1 -0
- package/dist/node/AbstractModuleInstance.js +819 -0
- package/dist/node/AbstractModuleInstance.js.map +1 -0
- package/dist/node/AbstractModuleInstance.mjs +796 -0
- package/dist/node/AbstractModuleInstance.mjs.map +1 -0
- package/dist/node/BaseEmitter.d.cts +17 -0
- package/dist/node/BaseEmitter.d.cts.map +1 -0
- package/dist/node/BaseEmitter.d.mts +17 -0
- package/dist/node/BaseEmitter.d.mts.map +1 -0
- package/dist/node/BaseEmitter.d.ts +17 -0
- package/dist/node/BaseEmitter.d.ts.map +1 -0
- package/dist/node/BaseEmitter.js +71 -0
- package/dist/node/BaseEmitter.js.map +1 -0
- package/dist/node/BaseEmitter.mjs +48 -0
- package/dist/node/BaseEmitter.mjs.map +1 -0
- package/dist/node/Error.d.cts +15 -0
- package/dist/node/Error.d.cts.map +1 -0
- package/dist/node/Error.d.mts +15 -0
- package/dist/node/Error.d.mts.map +1 -0
- package/dist/node/Error.d.ts +15 -0
- package/dist/node/Error.d.ts.map +1 -0
- package/dist/node/Error.js +71 -0
- package/dist/node/Error.js.map +1 -0
- package/dist/node/Error.mjs +48 -0
- package/dist/node/Error.mjs.map +1 -0
- package/dist/node/QueryValidator/ModuleConfigQueryValidator.d.cts +15 -0
- package/dist/node/QueryValidator/ModuleConfigQueryValidator.d.cts.map +1 -0
- package/dist/node/QueryValidator/ModuleConfigQueryValidator.d.mts +15 -0
- package/dist/node/QueryValidator/ModuleConfigQueryValidator.d.mts.map +1 -0
- package/dist/node/QueryValidator/ModuleConfigQueryValidator.d.ts +15 -0
- package/dist/node/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -0
- package/dist/node/QueryValidator/ModuleConfigQueryValidator.js +94 -0
- package/dist/node/QueryValidator/ModuleConfigQueryValidator.js.map +1 -0
- package/dist/node/QueryValidator/ModuleConfigQueryValidator.mjs +71 -0
- package/dist/node/QueryValidator/ModuleConfigQueryValidator.mjs.map +1 -0
- package/dist/node/QueryValidator/QueryValidator.d.cts +8 -0
- package/dist/node/QueryValidator/QueryValidator.d.cts.map +1 -0
- package/dist/node/QueryValidator/QueryValidator.d.mts +8 -0
- package/dist/node/QueryValidator/QueryValidator.d.mts.map +1 -0
- package/dist/node/QueryValidator/QueryValidator.d.ts +8 -0
- package/dist/node/QueryValidator/QueryValidator.d.ts.map +1 -0
- package/dist/node/QueryValidator/QueryValidator.js +19 -0
- package/dist/node/QueryValidator/QueryValidator.js.map +1 -0
- package/dist/node/QueryValidator/QueryValidator.mjs +1 -0
- package/dist/node/QueryValidator/QueryValidator.mjs.map +1 -0
- package/dist/node/QueryValidator/SupportedQueryValidator.d.cts +22 -0
- package/dist/node/QueryValidator/SupportedQueryValidator.d.cts.map +1 -0
- package/dist/node/QueryValidator/SupportedQueryValidator.d.mts +22 -0
- package/dist/node/QueryValidator/SupportedQueryValidator.d.mts.map +1 -0
- package/dist/node/QueryValidator/SupportedQueryValidator.d.ts +22 -0
- package/dist/node/QueryValidator/SupportedQueryValidator.d.ts.map +1 -0
- package/dist/node/QueryValidator/SupportedQueryValidator.js +51 -0
- package/dist/node/QueryValidator/SupportedQueryValidator.js.map +1 -0
- package/dist/node/QueryValidator/SupportedQueryValidator.mjs +27 -0
- package/dist/node/QueryValidator/SupportedQueryValidator.mjs.map +1 -0
- package/dist/node/QueryValidator/index.d.cts +4 -0
- package/dist/node/QueryValidator/index.d.cts.map +1 -0
- package/dist/node/QueryValidator/index.d.mts +4 -0
- package/dist/node/QueryValidator/index.d.mts.map +1 -0
- package/dist/node/QueryValidator/index.d.ts +4 -0
- package/dist/node/QueryValidator/index.d.ts.map +1 -0
- package/dist/node/QueryValidator/index.js +120 -0
- package/dist/node/QueryValidator/index.js.map +1 -0
- package/dist/node/QueryValidator/index.mjs +93 -0
- package/dist/node/QueryValidator/index.mjs.map +1 -0
- package/dist/node/index.d.cts +6 -0
- package/dist/node/index.d.cts.map +1 -0
- package/dist/node/index.d.mts +6 -0
- package/dist/node/index.d.mts.map +1 -0
- package/dist/node/index.d.ts +6 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +831 -0
- package/dist/node/index.js.map +1 -0
- package/dist/{index.mjs → node/index.mjs} +78 -61
- package/dist/node/index.mjs.map +1 -0
- package/package.json +46 -43
- package/dist/AbstractModule.d.mts.map +0 -1
- package/dist/AbstractModule.d.ts.map +0 -1
- package/dist/AbstractModuleInstance.d.mts.map +0 -1
- package/dist/AbstractModuleInstance.d.ts.map +0 -1
- package/dist/BaseEmitter.d.mts.map +0 -1
- package/dist/BaseEmitter.d.ts.map +0 -1
- package/dist/Error.d.mts.map +0 -1
- package/dist/Error.d.ts.map +0 -1
- package/dist/QueryValidator/ModuleConfigQueryValidator.d.mts.map +0 -1
- package/dist/QueryValidator/ModuleConfigQueryValidator.d.ts.map +0 -1
- package/dist/QueryValidator/QueryValidator.d.mts.map +0 -1
- package/dist/QueryValidator/QueryValidator.d.ts.map +0 -1
- package/dist/QueryValidator/SupportedQueryValidator.d.mts.map +0 -1
- package/dist/QueryValidator/SupportedQueryValidator.d.ts.map +0 -1
- package/dist/QueryValidator/index.d.mts.map +0 -1
- package/dist/QueryValidator/index.d.ts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- /package/dist/{AbstractModule.d.mts → browser/AbstractModule.d.cts} +0 -0
- /package/dist/{AbstractModule.d.ts → browser/AbstractModule.d.mts} +0 -0
- /package/dist/{AbstractModuleInstance.d.mts → browser/AbstractModuleInstance.d.cts} +0 -0
- /package/dist/{AbstractModuleInstance.d.ts → browser/AbstractModuleInstance.d.mts} +0 -0
- /package/dist/{BaseEmitter.d.mts → browser/BaseEmitter.d.cts} +0 -0
- /package/dist/{BaseEmitter.d.ts → browser/BaseEmitter.d.mts} +0 -0
- /package/dist/{Error.d.mts → browser/Error.d.cts} +0 -0
- /package/dist/{Error.d.ts → browser/Error.d.mts} +0 -0
- /package/dist/{QueryValidator/ModuleConfigQueryValidator.d.mts → browser/QueryValidator/ModuleConfigQueryValidator.d.cts} +0 -0
- /package/dist/{QueryValidator/ModuleConfigQueryValidator.d.ts → browser/QueryValidator/ModuleConfigQueryValidator.d.mts} +0 -0
- /package/dist/{QueryValidator/QueryValidator.d.mts → browser/QueryValidator/QueryValidator.d.cts} +0 -0
- /package/dist/{QueryValidator/QueryValidator.d.ts → browser/QueryValidator/QueryValidator.d.mts} +0 -0
- /package/dist/{QueryValidator/SupportedQueryValidator.d.mts → browser/QueryValidator/SupportedQueryValidator.d.cts} +0 -0
- /package/dist/{QueryValidator/SupportedQueryValidator.d.ts → browser/QueryValidator/SupportedQueryValidator.d.mts} +0 -0
- /package/dist/{QueryValidator/index.d.mts → browser/QueryValidator/index.d.cts} +0 -0
- /package/dist/{QueryValidator/index.d.ts → browser/QueryValidator/index.d.mts} +0 -0
- /package/dist/{index.d.mts → browser/index.d.cts} +0 -0
- /package/dist/{index.d.ts → browser/index.d.mts} +0 -0
|
@@ -0,0 +1,83 @@
|
|
|
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/QueryValidator/ModuleConfigQueryValidator.ts
|
|
22
|
+
var ModuleConfigQueryValidator_exports = {};
|
|
23
|
+
__export(ModuleConfigQueryValidator_exports, {
|
|
24
|
+
ModuleConfigQueryValidator: () => ModuleConfigQueryValidator
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(ModuleConfigQueryValidator_exports);
|
|
27
|
+
var import_boundwitness_builder = require("@xyo-network/boundwitness-builder");
|
|
28
|
+
var delimiter = "";
|
|
29
|
+
var ModuleConfigQueryValidator = class {
|
|
30
|
+
static {
|
|
31
|
+
__name(this, "ModuleConfigQueryValidator");
|
|
32
|
+
}
|
|
33
|
+
allowed = {};
|
|
34
|
+
disallowed = {};
|
|
35
|
+
hasAllowedRules;
|
|
36
|
+
hasDisallowedRules;
|
|
37
|
+
hasRules;
|
|
38
|
+
constructor(config) {
|
|
39
|
+
if (config?.security?.allowed) {
|
|
40
|
+
Object.entries(config.security?.allowed).forEach(([schema, addresses]) => {
|
|
41
|
+
this.allowed[schema] = addresses.map(toAddressesString);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (config?.security?.disallowed) {
|
|
45
|
+
Object.entries(config.security?.disallowed).forEach(([schema, addresses]) => {
|
|
46
|
+
this.disallowed[schema] = addresses.map(toAddressesString);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
this.hasAllowedRules = Object.keys(this.allowed).length > 0;
|
|
50
|
+
this.hasDisallowedRules = Object.keys(this.disallowed).length > 0;
|
|
51
|
+
this.hasRules = this.hasAllowedRules || this.hasDisallowedRules;
|
|
52
|
+
}
|
|
53
|
+
queryable = async (query, payloads) => {
|
|
54
|
+
if (!this.hasRules)
|
|
55
|
+
return true;
|
|
56
|
+
const addresses = query.addresses;
|
|
57
|
+
if (!addresses.length)
|
|
58
|
+
return false;
|
|
59
|
+
const wrapper = import_boundwitness_builder.QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
60
|
+
const schema = (await wrapper.getQuery()).schema;
|
|
61
|
+
return this.queryAllowed(schema, addresses) && !this.queryDisallowed(schema, addresses);
|
|
62
|
+
};
|
|
63
|
+
queryAllowed = (schema, addresses) => {
|
|
64
|
+
if (!this.hasAllowedRules)
|
|
65
|
+
return true;
|
|
66
|
+
if (addresses.length > 1) {
|
|
67
|
+
const signatories = toAddressesString(addresses);
|
|
68
|
+
const validCosigners = this.allowed?.[schema]?.includes(signatories);
|
|
69
|
+
if (validCosigners)
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
return addresses.every((address) => this.allowed?.[schema]?.includes(address) || false);
|
|
73
|
+
};
|
|
74
|
+
queryDisallowed = (schema, addresses) => {
|
|
75
|
+
if (!this.hasDisallowedRules)
|
|
76
|
+
return false;
|
|
77
|
+
return addresses.some((address) => this.disallowed?.[schema]?.includes(address));
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
var toAddressesString = /* @__PURE__ */ __name((addresses) => {
|
|
81
|
+
return Array.isArray(addresses) ? addresses.sort().map((address) => address.toLowerCase()).join(delimiter) : addresses.toLowerCase();
|
|
82
|
+
}, "toAddressesString");
|
|
83
|
+
//# sourceMappingURL=ModuleConfigQueryValidator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/QueryValidator/ModuleConfigQueryValidator.ts"],"sourcesContent":["import { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { AddressString, AnyConfigSchema, CosigningAddressSet, ModuleConfig, ModuleQuery, SchemaString } from '@xyo-network/module-model'\n\nimport { Queryable, QueryValidator } from './QueryValidator'\n\nexport type SortedPipedAddressesString = string\n\nconst delimiter = ''\n\nexport class ModuleConfigQueryValidator<TConfig extends AnyConfigSchema<ModuleConfig>> implements QueryValidator {\n protected allowed: Record<SchemaString, SortedPipedAddressesString[]> = {}\n protected disallowed: Record<SchemaString, AddressString[]> = {}\n protected readonly hasAllowedRules: boolean\n protected readonly hasDisallowedRules: boolean\n protected readonly hasRules: boolean\n\n constructor(config?: TConfig) {\n if (config?.security?.allowed) {\n Object.entries(config.security?.allowed).forEach(([schema, addresses]) => {\n this.allowed[schema] = addresses.map(toAddressesString)\n })\n }\n if (config?.security?.disallowed) {\n Object.entries(config.security?.disallowed).forEach(([schema, addresses]) => {\n this.disallowed[schema] = addresses.map(toAddressesString)\n })\n }\n this.hasAllowedRules = Object.keys(this.allowed).length > 0\n this.hasDisallowedRules = Object.keys(this.disallowed).length > 0\n this.hasRules = this.hasAllowedRules || this.hasDisallowedRules\n }\n\n queryable: Queryable = async (query, payloads) => {\n if (!this.hasRules) return true\n const addresses = query.addresses\n if (!addresses.length) return false\n const wrapper = QueryBoundWitnessWrapper.parseQuery<ModuleQuery>(query, payloads)\n const schema = (await wrapper.getQuery()).schema\n return this.queryAllowed(schema, addresses) && !this.queryDisallowed(schema, addresses)\n }\n\n protected queryAllowed = (schema: SchemaString, addresses: string[]): boolean => {\n if (!this.hasAllowedRules) return true\n // All cosigners must sign\n if (addresses.length > 1) {\n const signatories = toAddressesString(addresses)\n const validCosigners = this.allowed?.[schema]?.includes(signatories)\n if (validCosigners) return true\n }\n // OR all signers have to be allowed individually\n return addresses.every((address) => this.allowed?.[schema]?.includes(address) || false)\n }\n protected queryDisallowed = (schema: SchemaString, addresses: string[]): boolean => {\n if (!this.hasDisallowedRules) return false\n return addresses.some((address) => this.disallowed?.[schema]?.includes(address))\n }\n}\n\n// TODO: Handle 0x prefix\nconst toAddressesString = (addresses: string | CosigningAddressSet): SortedPipedAddressesString => {\n return Array.isArray(addresses)\n ? addresses\n .sort()\n .map((address) => address.toLowerCase())\n .join(delimiter)\n : addresses.toLowerCase()\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;kCAAyC;AAOzC,IAAMA,YAAY;AAEX,IAAMC,6BAAN,MAAMA;EATb,OASaA;;;EACDC,UAA8D,CAAC;EAC/DC,aAAoD,CAAC;EAC5CC;EACAC;EACAC;EAEnBC,YAAYC,QAAkB;AAC5B,QAAIA,QAAQC,UAAUP,SAAS;AAC7BQ,aAAOC,QAAQH,OAAOC,UAAUP,OAAAA,EAASU,QAAQ,CAAC,CAACC,QAAQC,SAAAA,MAAU;AACnE,aAAKZ,QAAQW,MAAAA,IAAUC,UAAUC,IAAIC,iBAAAA;MACvC,CAAA;IACF;AACA,QAAIR,QAAQC,UAAUN,YAAY;AAChCO,aAAOC,QAAQH,OAAOC,UAAUN,UAAAA,EAAYS,QAAQ,CAAC,CAACC,QAAQC,SAAAA,MAAU;AACtE,aAAKX,WAAWU,MAAAA,IAAUC,UAAUC,IAAIC,iBAAAA;MAC1C,CAAA;IACF;AACA,SAAKZ,kBAAkBM,OAAOO,KAAK,KAAKf,OAAO,EAAEgB,SAAS;AAC1D,SAAKb,qBAAqBK,OAAOO,KAAK,KAAKd,UAAU,EAAEe,SAAS;AAChE,SAAKZ,WAAW,KAAKF,mBAAmB,KAAKC;EAC/C;EAEAc,YAAuB,OAAOC,OAAOC,aAAAA;AACnC,QAAI,CAAC,KAAKf;AAAU,aAAO;AAC3B,UAAMQ,YAAYM,MAAMN;AACxB,QAAI,CAACA,UAAUI;AAAQ,aAAO;AAC9B,UAAMI,UAAUC,qDAAyBC,WAAwBJ,OAAOC,QAAAA;AACxE,UAAMR,UAAU,MAAMS,QAAQG,SAAQ,GAAIZ;AAC1C,WAAO,KAAKa,aAAab,QAAQC,SAAAA,KAAc,CAAC,KAAKa,gBAAgBd,QAAQC,SAAAA;EAC/E;EAEUY,eAAe,CAACb,QAAsBC,cAAAA;AAC9C,QAAI,CAAC,KAAKV;AAAiB,aAAO;AAElC,QAAIU,UAAUI,SAAS,GAAG;AACxB,YAAMU,cAAcZ,kBAAkBF,SAAAA;AACtC,YAAMe,iBAAiB,KAAK3B,UAAUW,MAAAA,GAASiB,SAASF,WAAAA;AACxD,UAAIC;AAAgB,eAAO;IAC7B;AAEA,WAAOf,UAAUiB,MAAM,CAACC,YAAY,KAAK9B,UAAUW,MAAAA,GAASiB,SAASE,OAAAA,KAAY,KAAA;EACnF;EACUL,kBAAkB,CAACd,QAAsBC,cAAAA;AACjD,QAAI,CAAC,KAAKT;AAAoB,aAAO;AACrC,WAAOS,UAAUmB,KAAK,CAACD,YAAY,KAAK7B,aAAaU,MAAAA,GAASiB,SAASE,OAAAA,CAAAA;EACzE;AACF;AAGA,IAAMhB,oBAAoB,wBAACF,cAAAA;AACzB,SAAOoB,MAAMC,QAAQrB,SAAAA,IACjBA,UACGsB,KAAI,EACJrB,IAAI,CAACiB,YAAYA,QAAQK,YAAW,CAAA,EACpCC,KAAKtC,SAAAA,IACRc,UAAUuB,YAAW;AAC3B,GAP0B;","names":["delimiter","ModuleConfigQueryValidator","allowed","disallowed","hasAllowedRules","hasDisallowedRules","hasRules","constructor","config","security","Object","entries","forEach","schema","addresses","map","toAddressesString","keys","length","queryable","query","payloads","wrapper","QueryBoundWitnessWrapper","parseQuery","getQuery","queryAllowed","queryDisallowed","signatories","validCosigners","includes","every","address","some","Array","isArray","sort","toLowerCase","join"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModuleConfigQueryValidator.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/ModuleConfigQueryValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAuB,YAAY,EAAe,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExI,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE5D,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAA;AAI/C,qBAAa,0BAA0B,CAAC,OAAO,SAAS,eAAe,CAAC,YAAY,CAAC,CAAE,YAAW,cAAc;IAC9G,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,0BAA0B,EAAE,CAAC,CAAK;IAC1E,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAK;IAChE,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IAC3C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IAC9C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;gBAExB,MAAM,CAAC,EAAE,OAAO;IAgB5B,SAAS,EAAE,SAAS,CAOnB;IAED,SAAS,CAAC,YAAY,WAAY,YAAY,aAAa,MAAM,EAAE,KAAG,OAAO,CAU5E;IACD,SAAS,CAAC,eAAe,WAAY,YAAY,aAAa,MAAM,EAAE,KAAG,OAAO,CAG/E;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModuleConfigQueryValidator.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/ModuleConfigQueryValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAuB,YAAY,EAAe,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExI,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE5D,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAA;AAI/C,qBAAa,0BAA0B,CAAC,OAAO,SAAS,eAAe,CAAC,YAAY,CAAC,CAAE,YAAW,cAAc;IAC9G,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,0BAA0B,EAAE,CAAC,CAAK;IAC1E,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAK;IAChE,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IAC3C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IAC9C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;gBAExB,MAAM,CAAC,EAAE,OAAO;IAgB5B,SAAS,EAAE,SAAS,CAOnB;IAED,SAAS,CAAC,YAAY,WAAY,YAAY,aAAa,MAAM,EAAE,KAAG,OAAO,CAU5E;IACD,SAAS,CAAC,eAAe,WAAY,YAAY,aAAa,MAAM,EAAE,KAAG,OAAO,CAG/E;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AddressString, AnyConfigSchema, ModuleConfig, SchemaString } from '@xyo-network/module-model';
|
|
2
|
+
import { Queryable, QueryValidator } from './QueryValidator';
|
|
3
|
+
export type SortedPipedAddressesString = string;
|
|
4
|
+
export declare class ModuleConfigQueryValidator<TConfig extends AnyConfigSchema<ModuleConfig>> implements QueryValidator {
|
|
5
|
+
protected allowed: Record<SchemaString, SortedPipedAddressesString[]>;
|
|
6
|
+
protected disallowed: Record<SchemaString, AddressString[]>;
|
|
7
|
+
protected readonly hasAllowedRules: boolean;
|
|
8
|
+
protected readonly hasDisallowedRules: boolean;
|
|
9
|
+
protected readonly hasRules: boolean;
|
|
10
|
+
constructor(config?: TConfig);
|
|
11
|
+
queryable: Queryable;
|
|
12
|
+
protected queryAllowed: (schema: SchemaString, addresses: string[]) => boolean;
|
|
13
|
+
protected queryDisallowed: (schema: SchemaString, addresses: string[]) => boolean;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ModuleConfigQueryValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModuleConfigQueryValidator.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/ModuleConfigQueryValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAuB,YAAY,EAAe,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExI,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE5D,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAA;AAI/C,qBAAa,0BAA0B,CAAC,OAAO,SAAS,eAAe,CAAC,YAAY,CAAC,CAAE,YAAW,cAAc;IAC9G,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,0BAA0B,EAAE,CAAC,CAAK;IAC1E,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAK;IAChE,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IAC3C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IAC9C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;gBAExB,MAAM,CAAC,EAAE,OAAO;IAgB5B,SAAS,EAAE,SAAS,CAOnB;IAED,SAAS,CAAC,YAAY,WAAY,YAAY,aAAa,MAAM,EAAE,KAAG,OAAO,CAU5E;IACD,SAAS,CAAC,eAAe,WAAY,YAAY,aAAa,MAAM,EAAE,KAAG,OAAO,CAG/E;CACF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-builder";
|
|
4
|
+
const delimiter = "";
|
|
5
|
+
class ModuleConfigQueryValidator {
|
|
6
|
+
static {
|
|
7
|
+
__name(this, "ModuleConfigQueryValidator");
|
|
8
|
+
}
|
|
9
|
+
allowed = {};
|
|
10
|
+
disallowed = {};
|
|
11
|
+
hasAllowedRules;
|
|
12
|
+
hasDisallowedRules;
|
|
13
|
+
hasRules;
|
|
14
|
+
constructor(config) {
|
|
15
|
+
if (config?.security?.allowed) {
|
|
16
|
+
Object.entries(config.security?.allowed).forEach(([schema, addresses]) => {
|
|
17
|
+
this.allowed[schema] = addresses.map(toAddressesString);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
if (config?.security?.disallowed) {
|
|
21
|
+
Object.entries(config.security?.disallowed).forEach(([schema, addresses]) => {
|
|
22
|
+
this.disallowed[schema] = addresses.map(toAddressesString);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
this.hasAllowedRules = Object.keys(this.allowed).length > 0;
|
|
26
|
+
this.hasDisallowedRules = Object.keys(this.disallowed).length > 0;
|
|
27
|
+
this.hasRules = this.hasAllowedRules || this.hasDisallowedRules;
|
|
28
|
+
}
|
|
29
|
+
queryable = async (query, payloads) => {
|
|
30
|
+
if (!this.hasRules)
|
|
31
|
+
return true;
|
|
32
|
+
const addresses = query.addresses;
|
|
33
|
+
if (!addresses.length)
|
|
34
|
+
return false;
|
|
35
|
+
const wrapper = QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
36
|
+
const schema = (await wrapper.getQuery()).schema;
|
|
37
|
+
return this.queryAllowed(schema, addresses) && !this.queryDisallowed(schema, addresses);
|
|
38
|
+
};
|
|
39
|
+
queryAllowed = (schema, addresses) => {
|
|
40
|
+
if (!this.hasAllowedRules)
|
|
41
|
+
return true;
|
|
42
|
+
if (addresses.length > 1) {
|
|
43
|
+
const signatories = toAddressesString(addresses);
|
|
44
|
+
const validCosigners = this.allowed?.[schema]?.includes(signatories);
|
|
45
|
+
if (validCosigners)
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
return addresses.every((address) => this.allowed?.[schema]?.includes(address) || false);
|
|
49
|
+
};
|
|
50
|
+
queryDisallowed = (schema, addresses) => {
|
|
51
|
+
if (!this.hasDisallowedRules)
|
|
52
|
+
return false;
|
|
53
|
+
return addresses.some((address) => this.disallowed?.[schema]?.includes(address));
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const toAddressesString = /* @__PURE__ */ __name((addresses) => {
|
|
57
|
+
return Array.isArray(addresses) ? addresses.sort().map((address) => address.toLowerCase()).join(delimiter) : addresses.toLowerCase();
|
|
58
|
+
}, "toAddressesString");
|
|
59
|
+
export {
|
|
60
|
+
ModuleConfigQueryValidator
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=ModuleConfigQueryValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/QueryValidator/ModuleConfigQueryValidator.ts"],"sourcesContent":["import { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { AddressString, AnyConfigSchema, CosigningAddressSet, ModuleConfig, ModuleQuery, SchemaString } from '@xyo-network/module-model'\n\nimport { Queryable, QueryValidator } from './QueryValidator'\n\nexport type SortedPipedAddressesString = string\n\nconst delimiter = ''\n\nexport class ModuleConfigQueryValidator<TConfig extends AnyConfigSchema<ModuleConfig>> implements QueryValidator {\n protected allowed: Record<SchemaString, SortedPipedAddressesString[]> = {}\n protected disallowed: Record<SchemaString, AddressString[]> = {}\n protected readonly hasAllowedRules: boolean\n protected readonly hasDisallowedRules: boolean\n protected readonly hasRules: boolean\n\n constructor(config?: TConfig) {\n if (config?.security?.allowed) {\n Object.entries(config.security?.allowed).forEach(([schema, addresses]) => {\n this.allowed[schema] = addresses.map(toAddressesString)\n })\n }\n if (config?.security?.disallowed) {\n Object.entries(config.security?.disallowed).forEach(([schema, addresses]) => {\n this.disallowed[schema] = addresses.map(toAddressesString)\n })\n }\n this.hasAllowedRules = Object.keys(this.allowed).length > 0\n this.hasDisallowedRules = Object.keys(this.disallowed).length > 0\n this.hasRules = this.hasAllowedRules || this.hasDisallowedRules\n }\n\n queryable: Queryable = async (query, payloads) => {\n if (!this.hasRules) return true\n const addresses = query.addresses\n if (!addresses.length) return false\n const wrapper = QueryBoundWitnessWrapper.parseQuery<ModuleQuery>(query, payloads)\n const schema = (await wrapper.getQuery()).schema\n return this.queryAllowed(schema, addresses) && !this.queryDisallowed(schema, addresses)\n }\n\n protected queryAllowed = (schema: SchemaString, addresses: string[]): boolean => {\n if (!this.hasAllowedRules) return true\n // All cosigners must sign\n if (addresses.length > 1) {\n const signatories = toAddressesString(addresses)\n const validCosigners = this.allowed?.[schema]?.includes(signatories)\n if (validCosigners) return true\n }\n // OR all signers have to be allowed individually\n return addresses.every((address) => this.allowed?.[schema]?.includes(address) || false)\n }\n protected queryDisallowed = (schema: SchemaString, addresses: string[]): boolean => {\n if (!this.hasDisallowedRules) return false\n return addresses.some((address) => this.disallowed?.[schema]?.includes(address))\n }\n}\n\n// TODO: Handle 0x prefix\nconst toAddressesString = (addresses: string | CosigningAddressSet): SortedPipedAddressesString => {\n return Array.isArray(addresses)\n ? addresses\n .sort()\n .map((address) => address.toLowerCase())\n .join(delimiter)\n : addresses.toLowerCase()\n}\n"],"mappings":";;AAAA,SAASA,gCAAgC;AAOzC,MAAMC,YAAY;AAEX,MAAMC,2BAAAA;EATb,OASaA;;;EACDC,UAA8D,CAAC;EAC/DC,aAAoD,CAAC;EAC5CC;EACAC;EACAC;EAEnBC,YAAYC,QAAkB;AAC5B,QAAIA,QAAQC,UAAUP,SAAS;AAC7BQ,aAAOC,QAAQH,OAAOC,UAAUP,OAAAA,EAASU,QAAQ,CAAC,CAACC,QAAQC,SAAAA,MAAU;AACnE,aAAKZ,QAAQW,MAAAA,IAAUC,UAAUC,IAAIC,iBAAAA;MACvC,CAAA;IACF;AACA,QAAIR,QAAQC,UAAUN,YAAY;AAChCO,aAAOC,QAAQH,OAAOC,UAAUN,UAAAA,EAAYS,QAAQ,CAAC,CAACC,QAAQC,SAAAA,MAAU;AACtE,aAAKX,WAAWU,MAAAA,IAAUC,UAAUC,IAAIC,iBAAAA;MAC1C,CAAA;IACF;AACA,SAAKZ,kBAAkBM,OAAOO,KAAK,KAAKf,OAAO,EAAEgB,SAAS;AAC1D,SAAKb,qBAAqBK,OAAOO,KAAK,KAAKd,UAAU,EAAEe,SAAS;AAChE,SAAKZ,WAAW,KAAKF,mBAAmB,KAAKC;EAC/C;EAEAc,YAAuB,OAAOC,OAAOC,aAAAA;AACnC,QAAI,CAAC,KAAKf;AAAU,aAAO;AAC3B,UAAMQ,YAAYM,MAAMN;AACxB,QAAI,CAACA,UAAUI;AAAQ,aAAO;AAC9B,UAAMI,UAAUvB,yBAAyBwB,WAAwBH,OAAOC,QAAAA;AACxE,UAAMR,UAAU,MAAMS,QAAQE,SAAQ,GAAIX;AAC1C,WAAO,KAAKY,aAAaZ,QAAQC,SAAAA,KAAc,CAAC,KAAKY,gBAAgBb,QAAQC,SAAAA;EAC/E;EAEUW,eAAe,CAACZ,QAAsBC,cAAAA;AAC9C,QAAI,CAAC,KAAKV;AAAiB,aAAO;AAElC,QAAIU,UAAUI,SAAS,GAAG;AACxB,YAAMS,cAAcX,kBAAkBF,SAAAA;AACtC,YAAMc,iBAAiB,KAAK1B,UAAUW,MAAAA,GAASgB,SAASF,WAAAA;AACxD,UAAIC;AAAgB,eAAO;IAC7B;AAEA,WAAOd,UAAUgB,MAAM,CAACC,YAAY,KAAK7B,UAAUW,MAAAA,GAASgB,SAASE,OAAAA,KAAY,KAAA;EACnF;EACUL,kBAAkB,CAACb,QAAsBC,cAAAA;AACjD,QAAI,CAAC,KAAKT;AAAoB,aAAO;AACrC,WAAOS,UAAUkB,KAAK,CAACD,YAAY,KAAK5B,aAAaU,MAAAA,GAASgB,SAASE,OAAAA,CAAAA;EACzE;AACF;AAGA,MAAMf,oBAAoB,wBAACF,cAAAA;AACzB,SAAOmB,MAAMC,QAAQpB,SAAAA,IACjBA,UACGqB,KAAI,EACJpB,IAAI,CAACgB,YAAYA,QAAQK,YAAW,CAAA,EACpCC,KAAKrC,SAAAA,IACRc,UAAUsB,YAAW;AAC3B,GAP0B;","names":["QueryBoundWitnessWrapper","delimiter","ModuleConfigQueryValidator","allowed","disallowed","hasAllowedRules","hasDisallowedRules","hasRules","constructor","config","security","Object","entries","forEach","schema","addresses","map","toAddressesString","keys","length","queryable","query","payloads","wrapper","parseQuery","getQuery","queryAllowed","queryDisallowed","signatories","validCosigners","includes","every","address","some","Array","isArray","sort","toLowerCase","join"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
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 __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
|
|
16
|
+
// src/QueryValidator/QueryValidator.ts
|
|
17
|
+
var QueryValidator_exports = {};
|
|
18
|
+
module.exports = __toCommonJS(QueryValidator_exports);
|
|
19
|
+
//# sourceMappingURL=QueryValidator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/QueryValidator/QueryValidator.ts"],"sourcesContent":["import { QueryBoundWitness } from '@xyo-network/boundwitness-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { Promisable } from '@xyo-network/promise'\n\nexport type Queryable<T extends QueryBoundWitness = QueryBoundWitness> = (query: T, payloads?: Payload[]) => Promisable<boolean>\n\nexport interface QueryValidator<T extends QueryBoundWitness = QueryBoundWitness> {\n queryable: Queryable<T>\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAMA;;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryValidator.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/QueryValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,UAAU,CAAC,OAAO,CAAC,CAAA;AAEhI,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB;IAC7E,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryValidator.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/QueryValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,UAAU,CAAC,OAAO,CAAC,CAAA;AAEhI,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB;IAC7E,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;CACxB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { QueryBoundWitness } from '@xyo-network/boundwitness-builder';
|
|
2
|
+
import { Payload } from '@xyo-network/payload-model';
|
|
3
|
+
import { Promisable } from '@xyo-network/promise';
|
|
4
|
+
export type Queryable<T extends QueryBoundWitness = QueryBoundWitness> = (query: T, payloads?: Payload[]) => Promisable<boolean>;
|
|
5
|
+
export interface QueryValidator<T extends QueryBoundWitness = QueryBoundWitness> {
|
|
6
|
+
queryable: Queryable<T>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=QueryValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryValidator.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/QueryValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,UAAU,CAAC,OAAO,CAAC,CAAA;AAEhI,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB;IAC7E,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=QueryValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
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/QueryValidator/SupportedQueryValidator.ts
|
|
22
|
+
var SupportedQueryValidator_exports = {};
|
|
23
|
+
__export(SupportedQueryValidator_exports, {
|
|
24
|
+
SupportedQueryValidator: () => SupportedQueryValidator,
|
|
25
|
+
isQuerySupportedByModule: () => isQuerySupportedByModule
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(SupportedQueryValidator_exports);
|
|
28
|
+
var import_boundwitness_builder = require("@xyo-network/boundwitness-builder");
|
|
29
|
+
var isQuerySupportedByModule = /* @__PURE__ */ __name(async (mod, query, payloads) => {
|
|
30
|
+
const wrapper = import_boundwitness_builder.QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
31
|
+
const schema = (await wrapper.getQuery()).schema;
|
|
32
|
+
return mod.queries.includes(schema);
|
|
33
|
+
}, "isQuerySupportedByModule");
|
|
34
|
+
var SupportedQueryValidator = class {
|
|
35
|
+
static {
|
|
36
|
+
__name(this, "SupportedQueryValidator");
|
|
37
|
+
}
|
|
38
|
+
mod;
|
|
39
|
+
constructor(mod) {
|
|
40
|
+
this.mod = mod;
|
|
41
|
+
this.queryable = (query, payloads) => {
|
|
42
|
+
return isQuerySupportedByModule(this.mod, query, payloads);
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
queryable;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=SupportedQueryValidator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/QueryValidator/SupportedQueryValidator.ts"],"sourcesContent":["import { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { Module, ModuleQuery } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { Queryable, QueryValidator } from './QueryValidator'\n\nexport const isQuerySupportedByModule = async <T extends QueryBoundWitness = QueryBoundWitness>(\n mod: Module,\n query: T,\n payloads?: Payload[],\n): Promise<boolean> => {\n const wrapper = QueryBoundWitnessWrapper.parseQuery<ModuleQuery>(query, payloads)\n const schema = (await wrapper.getQuery()).schema\n return mod.queries.includes(schema)\n}\n\nexport class SupportedQueryValidator implements QueryValidator {\n constructor(protected readonly mod: Module) {}\n queryable: Queryable = (query, payloads) => {\n return isQuerySupportedByModule(this.mod, query, payloads)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;kCAA4D;AAMrD,IAAMA,2BAA2B,8BACtCC,KACAC,OACAC,aAAAA;AAEA,QAAMC,UAAUC,qDAAyBC,WAAwBJ,OAAOC,QAAAA;AACxE,QAAMI,UAAU,MAAMH,QAAQI,SAAQ,GAAID;AAC1C,SAAON,IAAIQ,QAAQC,SAASH,MAAAA;AAC9B,GARwC;AAUjC,IAAMI,0BAAN,MAAMA;EAhBb,OAgBaA;;;;EACXC,YAA+BX,KAAa;SAAbA,MAAAA;SAC/BY,YAAuB,CAACX,OAAOC,aAAAA;AAC7B,aAAOH,yBAAyB,KAAKC,KAAKC,OAAOC,QAAAA;IACnD;EAH6C;EAC7CU;AAGF;","names":["isQuerySupportedByModule","mod","query","payloads","wrapper","QueryBoundWitnessWrapper","parseQuery","schema","getQuery","queries","includes","SupportedQueryValidator","constructor","queryable"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SupportedQueryValidator.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/SupportedQueryValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAe,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE5D,eAAO,MAAM,wBAAwB;;;;;;;;;;;;QAC9B,MAAM,uBAEA,OAAO,EAAE,KACnB,QAAQ,OAAO,CAIjB,CAAA;AAED,qBAAa,uBAAwB,YAAW,cAAc;IAChD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;IAC1C,SAAS,EAAE,SAAS,CAEnB;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SupportedQueryValidator.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/SupportedQueryValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAe,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE5D,eAAO,MAAM,wBAAwB;;;;;;;;;;;;QAC9B,MAAM,uBAEA,OAAO,EAAE,KACnB,QAAQ,OAAO,CAIjB,CAAA;AAED,qBAAa,uBAAwB,YAAW,cAAc;IAChD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;IAC1C,SAAS,EAAE,SAAS,CAEnB;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Module } from '@xyo-network/module-model';
|
|
2
|
+
import { Payload } from '@xyo-network/payload-model';
|
|
3
|
+
import { Queryable, QueryValidator } from './QueryValidator';
|
|
4
|
+
export declare const isQuerySupportedByModule: <T extends import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/boundwitness-model").BoundWitnessFields & {
|
|
5
|
+
query: string;
|
|
6
|
+
resultSet?: string | undefined;
|
|
7
|
+
schema: "network.xyo.boundwitness";
|
|
8
|
+
}, "schema"> & {
|
|
9
|
+
schema: "network.xyo.boundwitness";
|
|
10
|
+
} = import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/boundwitness-model").BoundWitnessFields & {
|
|
11
|
+
query: string;
|
|
12
|
+
resultSet?: string | undefined;
|
|
13
|
+
schema: "network.xyo.boundwitness";
|
|
14
|
+
}, "schema"> & {
|
|
15
|
+
schema: "network.xyo.boundwitness";
|
|
16
|
+
}>(mod: Module, query: T, payloads?: Payload[]) => Promise<boolean>;
|
|
17
|
+
export declare class SupportedQueryValidator implements QueryValidator {
|
|
18
|
+
protected readonly mod: Module;
|
|
19
|
+
constructor(mod: Module);
|
|
20
|
+
queryable: Queryable;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=SupportedQueryValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SupportedQueryValidator.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/SupportedQueryValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAe,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE5D,eAAO,MAAM,wBAAwB;;;;;;;;;;;;QAC9B,MAAM,uBAEA,OAAO,EAAE,KACnB,QAAQ,OAAO,CAIjB,CAAA;AAED,qBAAa,uBAAwB,YAAW,cAAc;IAChD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;IAC1C,SAAS,EAAE,SAAS,CAEnB;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { QueryBoundWitnessWrapper } from "@xyo-network/boundwitness-builder";
|
|
4
|
+
const isQuerySupportedByModule = /* @__PURE__ */ __name(async (mod, query, payloads) => {
|
|
5
|
+
const wrapper = QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
6
|
+
const schema = (await wrapper.getQuery()).schema;
|
|
7
|
+
return mod.queries.includes(schema);
|
|
8
|
+
}, "isQuerySupportedByModule");
|
|
9
|
+
class SupportedQueryValidator {
|
|
10
|
+
static {
|
|
11
|
+
__name(this, "SupportedQueryValidator");
|
|
12
|
+
}
|
|
13
|
+
mod;
|
|
14
|
+
constructor(mod) {
|
|
15
|
+
this.mod = mod;
|
|
16
|
+
this.queryable = (query, payloads) => {
|
|
17
|
+
return isQuerySupportedByModule(this.mod, query, payloads);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
queryable;
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
SupportedQueryValidator,
|
|
24
|
+
isQuerySupportedByModule
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=SupportedQueryValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/QueryValidator/SupportedQueryValidator.ts"],"sourcesContent":["import { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { Module, ModuleQuery } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { Queryable, QueryValidator } from './QueryValidator'\n\nexport const isQuerySupportedByModule = async <T extends QueryBoundWitness = QueryBoundWitness>(\n mod: Module,\n query: T,\n payloads?: Payload[],\n): Promise<boolean> => {\n const wrapper = QueryBoundWitnessWrapper.parseQuery<ModuleQuery>(query, payloads)\n const schema = (await wrapper.getQuery()).schema\n return mod.queries.includes(schema)\n}\n\nexport class SupportedQueryValidator implements QueryValidator {\n constructor(protected readonly mod: Module) {}\n queryable: Queryable = (query, payloads) => {\n return isQuerySupportedByModule(this.mod, query, payloads)\n }\n}\n"],"mappings":";;AAAA,SAA4BA,gCAAgC;AAMrD,MAAMC,2BAA2B,8BACtCC,KACAC,OACAC,aAAAA;AAEA,QAAMC,UAAUL,yBAAyBM,WAAwBH,OAAOC,QAAAA;AACxE,QAAMG,UAAU,MAAMF,QAAQG,SAAQ,GAAID;AAC1C,SAAOL,IAAIO,QAAQC,SAASH,MAAAA;AAC9B,GARwC;AAUjC,MAAMI,wBAAAA;EAhBb,OAgBaA;;;;EACXC,YAA+BV,KAAa;SAAbA,MAAAA;SAC/BW,YAAuB,CAACV,OAAOC,aAAAA;AAC7B,aAAOH,yBAAyB,KAAKC,KAAKC,OAAOC,QAAAA;IACnD;EAH6C;EAC7CS;AAGF;","names":["QueryBoundWitnessWrapper","isQuerySupportedByModule","mod","query","payloads","wrapper","parseQuery","schema","getQuery","queries","includes","SupportedQueryValidator","constructor","queryable"]}
|
|
@@ -0,0 +1,108 @@
|
|
|
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/QueryValidator/index.ts
|
|
22
|
+
var QueryValidator_exports = {};
|
|
23
|
+
__export(QueryValidator_exports, {
|
|
24
|
+
ModuleConfigQueryValidator: () => ModuleConfigQueryValidator,
|
|
25
|
+
SupportedQueryValidator: () => SupportedQueryValidator,
|
|
26
|
+
isQuerySupportedByModule: () => isQuerySupportedByModule
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(QueryValidator_exports);
|
|
29
|
+
|
|
30
|
+
// src/QueryValidator/ModuleConfigQueryValidator.ts
|
|
31
|
+
var import_boundwitness_builder = require("@xyo-network/boundwitness-builder");
|
|
32
|
+
var delimiter = "";
|
|
33
|
+
var ModuleConfigQueryValidator = class {
|
|
34
|
+
static {
|
|
35
|
+
__name(this, "ModuleConfigQueryValidator");
|
|
36
|
+
}
|
|
37
|
+
allowed = {};
|
|
38
|
+
disallowed = {};
|
|
39
|
+
hasAllowedRules;
|
|
40
|
+
hasDisallowedRules;
|
|
41
|
+
hasRules;
|
|
42
|
+
constructor(config) {
|
|
43
|
+
if (config?.security?.allowed) {
|
|
44
|
+
Object.entries(config.security?.allowed).forEach(([schema, addresses]) => {
|
|
45
|
+
this.allowed[schema] = addresses.map(toAddressesString);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
if (config?.security?.disallowed) {
|
|
49
|
+
Object.entries(config.security?.disallowed).forEach(([schema, addresses]) => {
|
|
50
|
+
this.disallowed[schema] = addresses.map(toAddressesString);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
this.hasAllowedRules = Object.keys(this.allowed).length > 0;
|
|
54
|
+
this.hasDisallowedRules = Object.keys(this.disallowed).length > 0;
|
|
55
|
+
this.hasRules = this.hasAllowedRules || this.hasDisallowedRules;
|
|
56
|
+
}
|
|
57
|
+
queryable = async (query, payloads) => {
|
|
58
|
+
if (!this.hasRules)
|
|
59
|
+
return true;
|
|
60
|
+
const addresses = query.addresses;
|
|
61
|
+
if (!addresses.length)
|
|
62
|
+
return false;
|
|
63
|
+
const wrapper = import_boundwitness_builder.QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
64
|
+
const schema = (await wrapper.getQuery()).schema;
|
|
65
|
+
return this.queryAllowed(schema, addresses) && !this.queryDisallowed(schema, addresses);
|
|
66
|
+
};
|
|
67
|
+
queryAllowed = (schema, addresses) => {
|
|
68
|
+
if (!this.hasAllowedRules)
|
|
69
|
+
return true;
|
|
70
|
+
if (addresses.length > 1) {
|
|
71
|
+
const signatories = toAddressesString(addresses);
|
|
72
|
+
const validCosigners = this.allowed?.[schema]?.includes(signatories);
|
|
73
|
+
if (validCosigners)
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return addresses.every((address) => this.allowed?.[schema]?.includes(address) || false);
|
|
77
|
+
};
|
|
78
|
+
queryDisallowed = (schema, addresses) => {
|
|
79
|
+
if (!this.hasDisallowedRules)
|
|
80
|
+
return false;
|
|
81
|
+
return addresses.some((address) => this.disallowed?.[schema]?.includes(address));
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
var toAddressesString = /* @__PURE__ */ __name((addresses) => {
|
|
85
|
+
return Array.isArray(addresses) ? addresses.sort().map((address) => address.toLowerCase()).join(delimiter) : addresses.toLowerCase();
|
|
86
|
+
}, "toAddressesString");
|
|
87
|
+
|
|
88
|
+
// src/QueryValidator/SupportedQueryValidator.ts
|
|
89
|
+
var import_boundwitness_builder2 = require("@xyo-network/boundwitness-builder");
|
|
90
|
+
var isQuerySupportedByModule = /* @__PURE__ */ __name(async (mod, query, payloads) => {
|
|
91
|
+
const wrapper = import_boundwitness_builder2.QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
92
|
+
const schema = (await wrapper.getQuery()).schema;
|
|
93
|
+
return mod.queries.includes(schema);
|
|
94
|
+
}, "isQuerySupportedByModule");
|
|
95
|
+
var SupportedQueryValidator = class {
|
|
96
|
+
static {
|
|
97
|
+
__name(this, "SupportedQueryValidator");
|
|
98
|
+
}
|
|
99
|
+
mod;
|
|
100
|
+
constructor(mod) {
|
|
101
|
+
this.mod = mod;
|
|
102
|
+
this.queryable = (query, payloads) => {
|
|
103
|
+
return isQuerySupportedByModule(this.mod, query, payloads);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
queryable;
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/QueryValidator/index.ts","../../../src/QueryValidator/ModuleConfigQueryValidator.ts","../../../src/QueryValidator/SupportedQueryValidator.ts"],"sourcesContent":["export * from './ModuleConfigQueryValidator'\nexport * from './QueryValidator'\nexport * from './SupportedQueryValidator'\n","import { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { AddressString, AnyConfigSchema, CosigningAddressSet, ModuleConfig, ModuleQuery, SchemaString } from '@xyo-network/module-model'\n\nimport { Queryable, QueryValidator } from './QueryValidator'\n\nexport type SortedPipedAddressesString = string\n\nconst delimiter = ''\n\nexport class ModuleConfigQueryValidator<TConfig extends AnyConfigSchema<ModuleConfig>> implements QueryValidator {\n protected allowed: Record<SchemaString, SortedPipedAddressesString[]> = {}\n protected disallowed: Record<SchemaString, AddressString[]> = {}\n protected readonly hasAllowedRules: boolean\n protected readonly hasDisallowedRules: boolean\n protected readonly hasRules: boolean\n\n constructor(config?: TConfig) {\n if (config?.security?.allowed) {\n Object.entries(config.security?.allowed).forEach(([schema, addresses]) => {\n this.allowed[schema] = addresses.map(toAddressesString)\n })\n }\n if (config?.security?.disallowed) {\n Object.entries(config.security?.disallowed).forEach(([schema, addresses]) => {\n this.disallowed[schema] = addresses.map(toAddressesString)\n })\n }\n this.hasAllowedRules = Object.keys(this.allowed).length > 0\n this.hasDisallowedRules = Object.keys(this.disallowed).length > 0\n this.hasRules = this.hasAllowedRules || this.hasDisallowedRules\n }\n\n queryable: Queryable = async (query, payloads) => {\n if (!this.hasRules) return true\n const addresses = query.addresses\n if (!addresses.length) return false\n const wrapper = QueryBoundWitnessWrapper.parseQuery<ModuleQuery>(query, payloads)\n const schema = (await wrapper.getQuery()).schema\n return this.queryAllowed(schema, addresses) && !this.queryDisallowed(schema, addresses)\n }\n\n protected queryAllowed = (schema: SchemaString, addresses: string[]): boolean => {\n if (!this.hasAllowedRules) return true\n // All cosigners must sign\n if (addresses.length > 1) {\n const signatories = toAddressesString(addresses)\n const validCosigners = this.allowed?.[schema]?.includes(signatories)\n if (validCosigners) return true\n }\n // OR all signers have to be allowed individually\n return addresses.every((address) => this.allowed?.[schema]?.includes(address) || false)\n }\n protected queryDisallowed = (schema: SchemaString, addresses: string[]): boolean => {\n if (!this.hasDisallowedRules) return false\n return addresses.some((address) => this.disallowed?.[schema]?.includes(address))\n }\n}\n\n// TODO: Handle 0x prefix\nconst toAddressesString = (addresses: string | CosigningAddressSet): SortedPipedAddressesString => {\n return Array.isArray(addresses)\n ? addresses\n .sort()\n .map((address) => address.toLowerCase())\n .join(delimiter)\n : addresses.toLowerCase()\n}\n","import { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'\nimport { Module, ModuleQuery } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { Queryable, QueryValidator } from './QueryValidator'\n\nexport const isQuerySupportedByModule = async <T extends QueryBoundWitness = QueryBoundWitness>(\n mod: Module,\n query: T,\n payloads?: Payload[],\n): Promise<boolean> => {\n const wrapper = QueryBoundWitnessWrapper.parseQuery<ModuleQuery>(query, payloads)\n const schema = (await wrapper.getQuery()).schema\n return mod.queries.includes(schema)\n}\n\nexport class SupportedQueryValidator implements QueryValidator {\n constructor(protected readonly mod: Module) {}\n queryable: Queryable = (query, payloads) => {\n return isQuerySupportedByModule(this.mod, query, payloads)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAA,kCAAyC;AAOzC,IAAMA,YAAY;AAEX,IAAMC,6BAAN,MAAMA;EATb,OASaA;;;EACDC,UAA8D,CAAC;EAC/DC,aAAoD,CAAC;EAC5CC;EACAC;EACAC;EAEnBC,YAAYC,QAAkB;AAC5B,QAAIA,QAAQC,UAAUP,SAAS;AAC7BQ,aAAOC,QAAQH,OAAOC,UAAUP,OAAAA,EAASU,QAAQ,CAAC,CAACC,QAAQC,SAAAA,MAAU;AACnE,aAAKZ,QAAQW,MAAAA,IAAUC,UAAUC,IAAIC,iBAAAA;MACvC,CAAA;IACF;AACA,QAAIR,QAAQC,UAAUN,YAAY;AAChCO,aAAOC,QAAQH,OAAOC,UAAUN,UAAAA,EAAYS,QAAQ,CAAC,CAACC,QAAQC,SAAAA,MAAU;AACtE,aAAKX,WAAWU,MAAAA,IAAUC,UAAUC,IAAIC,iBAAAA;MAC1C,CAAA;IACF;AACA,SAAKZ,kBAAkBM,OAAOO,KAAK,KAAKf,OAAO,EAAEgB,SAAS;AAC1D,SAAKb,qBAAqBK,OAAOO,KAAK,KAAKd,UAAU,EAAEe,SAAS;AAChE,SAAKZ,WAAW,KAAKF,mBAAmB,KAAKC;EAC/C;EAEAc,YAAuB,OAAOC,OAAOC,aAAAA;AACnC,QAAI,CAAC,KAAKf;AAAU,aAAO;AAC3B,UAAMQ,YAAYM,MAAMN;AACxB,QAAI,CAACA,UAAUI;AAAQ,aAAO;AAC9B,UAAMI,UAAUC,qDAAyBC,WAAwBJ,OAAOC,QAAAA;AACxE,UAAMR,UAAU,MAAMS,QAAQG,SAAQ,GAAIZ;AAC1C,WAAO,KAAKa,aAAab,QAAQC,SAAAA,KAAc,CAAC,KAAKa,gBAAgBd,QAAQC,SAAAA;EAC/E;EAEUY,eAAe,CAACb,QAAsBC,cAAAA;AAC9C,QAAI,CAAC,KAAKV;AAAiB,aAAO;AAElC,QAAIU,UAAUI,SAAS,GAAG;AACxB,YAAMU,cAAcZ,kBAAkBF,SAAAA;AACtC,YAAMe,iBAAiB,KAAK3B,UAAUW,MAAAA,GAASiB,SAASF,WAAAA;AACxD,UAAIC;AAAgB,eAAO;IAC7B;AAEA,WAAOf,UAAUiB,MAAM,CAACC,YAAY,KAAK9B,UAAUW,MAAAA,GAASiB,SAASE,OAAAA,KAAY,KAAA;EACnF;EACUL,kBAAkB,CAACd,QAAsBC,cAAAA;AACjD,QAAI,CAAC,KAAKT;AAAoB,aAAO;AACrC,WAAOS,UAAUmB,KAAK,CAACD,YAAY,KAAK7B,aAAaU,MAAAA,GAASiB,SAASE,OAAAA,CAAAA;EACzE;AACF;AAGA,IAAMhB,oBAAoB,wBAACF,cAAAA;AACzB,SAAOoB,MAAMC,QAAQrB,SAAAA,IACjBA,UACGsB,KAAI,EACJrB,IAAI,CAACiB,YAAYA,QAAQK,YAAW,CAAA,EACpCC,KAAKtC,SAAAA,IACRc,UAAUuB,YAAW;AAC3B,GAP0B;;;AC3D1B,IAAAE,+BAA4D;AAMrD,IAAMC,2BAA2B,8BACtCC,KACAC,OACAC,aAAAA;AAEA,QAAMC,UAAUC,sDAAyBC,WAAwBJ,OAAOC,QAAAA;AACxE,QAAMI,UAAU,MAAMH,QAAQI,SAAQ,GAAID;AAC1C,SAAON,IAAIQ,QAAQC,SAASH,MAAAA;AAC9B,GARwC;AAUjC,IAAMI,0BAAN,MAAMA;EAhBb,OAgBaA;;;;EACXC,YAA+BX,KAAa;SAAbA,MAAAA;SAC/BY,YAAuB,CAACX,OAAOC,aAAAA;AAC7B,aAAOH,yBAAyB,KAAKC,KAAKC,OAAOC,QAAAA;IACnD;EAH6C;EAC7CU;AAGF;","names":["delimiter","ModuleConfigQueryValidator","allowed","disallowed","hasAllowedRules","hasDisallowedRules","hasRules","constructor","config","security","Object","entries","forEach","schema","addresses","map","toAddressesString","keys","length","queryable","query","payloads","wrapper","QueryBoundWitnessWrapper","parseQuery","getQuery","queryAllowed","queryDisallowed","signatories","validCosigners","includes","every","address","some","Array","isArray","sort","toLowerCase","join","import_boundwitness_builder","isQuerySupportedByModule","mod","query","payloads","wrapper","QueryBoundWitnessWrapper","parseQuery","schema","getQuery","queries","includes","SupportedQueryValidator","constructor","queryable"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/QueryValidator/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/QueryValidator/index.ts"],"sourcesContent":["export * from './ModuleConfigQueryValidator'\nexport * from './QueryValidator'\nexport * from './SupportedQueryValidator'\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -801,14 +801,4 @@ var AbstractModuleInstance = class extends AbstractModule {
|
|
|
801
801
|
return this.subscribeHandler();
|
|
802
802
|
}
|
|
803
803
|
};
|
|
804
|
-
|
|
805
|
-
0 && (module.exports = {
|
|
806
|
-
AbstractModule,
|
|
807
|
-
AbstractModuleInstance,
|
|
808
|
-
BaseEmitter,
|
|
809
|
-
ModuleConfigQueryValidator,
|
|
810
|
-
ModuleErrorBuilder,
|
|
811
|
-
SupportedQueryValidator,
|
|
812
|
-
isQuerySupportedByModule
|
|
813
|
-
});
|
|
814
|
-
//# sourceMappingURL=index.js.map
|
|
804
|
+
//# sourceMappingURL=index.cjs.map
|