@xyo-network/diviner 2.44.1 → 2.45.0-rc.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.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MemoryAddressHistoryDiviner = void 0;
3
+ exports.MemoryAddressHistoryDiviner = exports.MemoryAddressHistoryDivinerConfigSchema = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const assert_1 = require("@xylabs/assert");
6
6
  const archivist_1 = require("@xyo-network/archivist");
@@ -8,48 +8,64 @@ const archivist_wrapper_1 = require("@xyo-network/archivist-wrapper");
8
8
  const boundwitness_model_1 = require("@xyo-network/boundwitness-model");
9
9
  const boundwitness_wrapper_1 = require("@xyo-network/boundwitness-wrapper");
10
10
  const AbstractDiviner_1 = require("../AbstractDiviner");
11
- const AddressHistoryDiviner_1 = require("./AddressHistoryDiviner");
11
+ exports.MemoryAddressHistoryDivinerConfigSchema = 'network.xyo.diviner.address.history.memory.config';
12
+ // This diviner returns the most recent boundwitness signed by the address that can be found
13
+ // if multiple broken chains are found, all the heads are returned
12
14
  class MemoryAddressHistoryDiviner extends AbstractDiviner_1.AbstractDiviner {
15
+ static create(params) {
16
+ const _super = Object.create(null, {
17
+ create: { get: () => super.create }
18
+ });
19
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
20
+ return (yield _super.create.call(this, params));
21
+ });
22
+ }
13
23
  divine(payloads) {
14
24
  var _a, _b, _c;
15
25
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
16
- const query = payloads === null || payloads === void 0 ? void 0 : payloads.find(AddressHistoryDiviner_1.isAddressHistoryQueryPayload);
17
- // TODO: Support multiple queries
18
- if (!query)
19
- return [];
20
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
21
- const { address } = query;
22
- const assertedAddress = (0, assert_1.assertEx)(address);
23
- //only supporting single address at this point
24
- const singleAddress = (0, assert_1.assertEx)((Array.isArray(assertedAddress) ? assertedAddress : [assertedAddress]).shift());
26
+ (0, assert_1.assertEx)(!payloads, 'MemoryAddressHistoryDiviner.divine does not allow payloads to be sent');
25
27
  const archivists = (_c = (_b = (yield ((_a = this.resolver) === null || _a === void 0 ? void 0 : _a.resolve({ query: [[archivist_1.ArchivistGetQuerySchema]] })))) === null || _b === void 0 ? void 0 : _b.map((archivist) => new archivist_wrapper_1.ArchivistWrapper(archivist))) !== null && _c !== void 0 ? _c : [];
26
28
  const bwLists = (yield Promise.all(archivists.map((archivist) => {
29
+ //Todo: add address to filter
27
30
  return archivist.find({ limit: 10000, schema: boundwitness_model_1.XyoBoundWitnessSchema });
28
31
  }))).flat();
29
- const bwRecords = {};
30
- bwLists
31
- .filter((bw) => bw.addresses.includes(singleAddress))
32
- .reduce((bwRecords, bw) => {
33
- const wrapper = new boundwitness_wrapper_1.BoundWitnessWrapper(bw);
34
- bwRecords[wrapper.hash] = [wrapper];
35
- return bwRecords;
36
- }, bwRecords);
37
- return Object.values(this.buildAddressLists(singleAddress, bwRecords)).flat();
32
+ const bwRecords = this.buildWrapperRecords(bwLists);
33
+ const chains = Object.values(this.buildAddressChains(this.config.address, bwRecords));
34
+ //return the heads of each chain (get the last bw on each chain)
35
+ return chains.map((chain) => (0, assert_1.assertEx)(chain.pop()));
38
36
  });
39
37
  }
40
- buildAddressLists(address, bwRecords) {
41
- Object.entries(bwRecords).forEach(([hash, bw]) => {
42
- const single = bw[0];
43
- const prev = single.prev(address);
44
- if (prev) {
45
- if (bwRecords[prev]) {
46
- bwRecords[prev].unshift(single);
47
- delete bwRecords[hash];
38
+ buildAddressChains(address, bwRecords) {
39
+ const arrayedResult = Object.entries(bwRecords).reduce((prev, [key, value]) => {
40
+ prev[key] = [value];
41
+ return prev;
42
+ }, {});
43
+ return Object.entries(bwRecords).reduce((prev, [key, value]) => {
44
+ //check if key is still there (may have been deleted as prevHash)
45
+ if (prev[key]) {
46
+ const previousHash = value.prev(address);
47
+ if (previousHash) {
48
+ //if we have the previousHash, move this bw to its chain
49
+ if (prev[previousHash]) {
50
+ prev[key].push(...prev[previousHash]);
51
+ delete prev[previousHash];
52
+ }
48
53
  }
49
54
  }
50
- });
51
- return bwRecords;
55
+ return prev;
56
+ }, arrayedResult);
57
+ }
58
+ //build object with hashes as keys and wrappers as values
59
+ buildWrapperRecords(lists) {
60
+ return lists
61
+ .filter((bw) => bw.addresses.includes(this.config.address))
62
+ .reduce((bwRecords, bw) => {
63
+ const wrapper = new boundwitness_wrapper_1.BoundWitnessWrapper(bw);
64
+ bwRecords[wrapper.hash] = wrapper;
65
+ return bwRecords;
66
+ }, {});
52
67
  }
53
68
  }
54
69
  exports.MemoryAddressHistoryDiviner = MemoryAddressHistoryDiviner;
70
+ MemoryAddressHistoryDiviner.configSchema = exports.MemoryAddressHistoryDivinerConfigSchema;
55
71
  //# sourceMappingURL=MemoryAddressHistoryDiviner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryAddressHistoryDiviner.js","sourceRoot":"","sources":["../../../src/AddressHistory/MemoryAddressHistoryDiviner.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AACzC,sDAAgE;AAChE,sEAAiE;AACjE,wEAAwF;AACxF,4EAAuE;AAGvE,wDAAoD;AACpD,mEAAyH;AAEzH,MAAa,2BAA4B,SAAQ,iCAAe;IACxD,MAAM,CAAC,QAAuB;;;YAClC,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAA6B,oDAA4B,CAAC,CAAA;YACtF,iCAAiC;YACjC,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAA;YACrB,6DAA6D;YAC7D,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;YACzB,MAAM,eAAe,GAAG,IAAA,iBAAQ,EAAC,OAAO,CAAC,CAAA;YAEzC,8CAA8C;YAC9C,MAAM,aAAa,GAAG,IAAA,iBAAQ,EAAC,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;YAE9G,MAAM,UAAU,GACd,MAAA,MAAA,CAAC,MAAM,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,mCAAuB,CAAC,CAAC,EAAE,CAAC,CAAA,CAAC,0CAAE,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,oCAAgB,CAAC,SAAS,CAAC,CAAC,mCAAI,EAAE,CAAA;YACnI,MAAM,OAAO,GAAG,CACd,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC3B,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0CAAqB,EAAE,CAA+B,CAAA;YACtG,CAAC,CAAC,CACH,CACF,CAAC,IAAI,EAAE,CAAA;YACR,MAAM,SAAS,GAA0C,EAAE,CAAA;YAC3D,OAAO;iBACJ,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;iBACpD,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE;gBACxB,MAAM,OAAO,GAAG,IAAI,0CAAmB,CAAC,EAAE,CAAC,CAAA;gBAC3C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACnC,OAAO,SAAS,CAAA;YAClB,CAAC,EAAE,SAAS,CAAC,CAAA;YAEf,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;;KAC9E;IAEO,iBAAiB,CAAC,OAAe,EAAE,SAAgD;QACzF,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;YAC/C,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;YACpB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACjC,IAAI,IAAI,EAAE;gBACR,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;oBACnB,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;oBAC/B,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;iBACvB;aACF;QACH,CAAC,CAAC,CAAA;QACF,OAAO,SAAS,CAAA;IAClB,CAAC;CACF;AA9CD,kEA8CC"}
1
+ {"version":3,"file":"MemoryAddressHistoryDiviner.js","sourceRoot":"","sources":["../../../src/AddressHistory/MemoryAddressHistoryDiviner.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ class ArchivistPayloadDiviner extends AbstractPayloadDiviner_1.AbstractPayloadDi
23
23
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
24
24
  const huriPayloads = (0, assert_1.assertEx)(payloads === null || payloads === void 0 ? void 0 : payloads.filter((payload) => (payload === null || payload === void 0 ? void 0 : payload.schema) === XyoHuriPayload_1.XyoHuriSchema), `no huri payloads provided: ${JSON.stringify(payloads, null, 2)}`);
25
25
  const hashes = huriPayloads.map((huriPayload) => huriPayload.huri.map((huri) => new huri_1.Huri(huri).hash)).flat();
26
- const activeArchivist = this.archivist;
26
+ const activeArchivist = yield this.archivist();
27
27
  if (activeArchivist) {
28
28
  const queryPayload = payload_wrapper_1.PayloadWrapper.parse({ hashes, schema: archivist_1.ArchivistGetQuerySchema });
29
29
  const query = yield this.bindQuery(queryPayload);
@@ -35,23 +35,19 @@ class ArchivistPayloadDiviner extends AbstractPayloadDiviner_1.AbstractPayloadDi
35
35
  queries() {
36
36
  return [diviner_model_1.XyoDivinerDivineQuerySchema, ...super.queries()];
37
37
  }
38
- start() {
39
- const _super = Object.create(null, {
40
- start: { get: () => super.start }
41
- });
42
- var _a, _b, _c;
38
+ archivist() {
39
+ var _a, _b;
43
40
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
44
- yield _super.start.call(this);
45
41
  const configArchivistAddress = (_a = this.config) === null || _a === void 0 ? void 0 : _a.archivist;
46
42
  if (configArchivistAddress) {
47
43
  const resolvedArchivist = configArchivistAddress
48
- ? (_c = ((_b = this.resolver) === null || _b === void 0 ? void 0 : _b.resolve({ address: [configArchivistAddress] })).shift()) !== null && _c !== void 0 ? _c : null
44
+ ? (_b = (yield this.resolve({ address: [configArchivistAddress] })).shift()) !== null && _b !== void 0 ? _b : null
49
45
  : null;
50
46
  if (resolvedArchivist) {
51
- this.archivist = resolvedArchivist ? new archivist_wrapper_1.ArchivistWrapper(resolvedArchivist) : null;
47
+ return resolvedArchivist ? new archivist_wrapper_1.ArchivistWrapper(resolvedArchivist) : null;
52
48
  }
53
49
  }
54
- return this;
50
+ return null;
55
51
  });
56
52
  }
57
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.js","sourceRoot":"","sources":["../../../../src/Payload/Archivist/Diviner.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AACzC,sDAAqG;AACrG,sEAAiE;AACjE,8DAAwE;AACxE,4CAAwC;AAGxC,kEAA6D;AAE7D,sEAAkE;AAClE,sDAAiE;AAGjE,MAAa,uBAAwB,SAAQ,+CAAwD;IAKnG,MAAM,CAAgB,MAAM,CAAC,MAAuD;;;;;YAClF,OAAO,CAAC,MAAM,OAAM,MAAM,YAAC,MAAM,CAAC,CAA4B,CAAA;QAChE,CAAC;KAAA;IAEY,MAAM,CAAC,QAAuB;;YACzC,MAAM,YAAY,GAAG,IAAA,iBAAQ,EAC3B,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAC,CAAC,OAAO,EAA6B,EAAE,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,MAAK,8BAAa,CAAC,EAC3F,8BAA8B,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAClE,CAAA;YACD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAC5G,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAA;YACtC,IAAI,eAAe,EAAE;gBACnB,MAAM,YAAY,GAAG,gCAAc,CAAC,KAAK,CAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,mCAAuB,EAAE,CAAC,CAAA;gBACzG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;gBAChD,OAAO,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;aAC5D;YACD,OAAO,EAAE,CAAA;QACX,CAAC;KAAA;IAEQ,OAAO;QACd,OAAO,CAAC,2CAA2B,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAC1D,CAAC;IAEwB,KAAK;;;;;;YAC5B,MAAM,OAAM,KAAK,WAAE,CAAA;YACnB,MAAM,sBAAsB,GAAG,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,CAAA;YACrD,IAAI,sBAAsB,EAAE;gBAC1B,MAAM,iBAAiB,GAA4B,sBAAsB;oBACvE,CAAC,CAAC,MAAA,CAAC,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAmC,CAAA,CAAC,KAAK,EAAE,mCAAI,IAAI;oBAClH,CAAC,CAAC,IAAI,CAAA;gBACR,IAAI,iBAAiB,EAAE;oBACrB,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,oCAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;iBACpF;aACF;YACD,OAAO,IAAI,CAAA;;KACZ;CACF;AAzCD,0DAyCC"}
1
+ {"version":3,"file":"Diviner.js","sourceRoot":"","sources":["../../../../src/Payload/Archivist/Diviner.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AACzC,sDAAqG;AACrG,sEAAiE;AACjE,8DAAwE;AACxE,4CAAwC;AAGxC,kEAA6D;AAE7D,sEAAkE;AAClE,sDAAiE;AAGjE,MAAa,uBAAwB,SAAQ,+CAAwD;IAGnG,MAAM,CAAgB,MAAM,CAAC,MAAuD;;;;;YAClF,OAAO,CAAC,MAAM,OAAM,MAAM,YAAC,MAAM,CAAC,CAA4B,CAAA;QAChE,CAAC;KAAA;IAEY,MAAM,CAAC,QAAuB;;YACzC,MAAM,YAAY,GAAG,IAAA,iBAAQ,EAC3B,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAC,CAAC,OAAO,EAA6B,EAAE,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,MAAK,8BAAa,CAAC,EAC3F,8BAA8B,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAClE,CAAA;YACD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAC5G,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;YAC9C,IAAI,eAAe,EAAE;gBACnB,MAAM,YAAY,GAAG,gCAAc,CAAC,KAAK,CAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,mCAAuB,EAAE,CAAC,CAAA;gBACzG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;gBAChD,OAAO,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;aAC5D;YACD,OAAO,EAAE,CAAA;QACX,CAAC;KAAA;IAEQ,OAAO;QACd,OAAO,CAAC,2CAA2B,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAC1D,CAAC;IAEe,SAAS;;;YACvB,MAAM,sBAAsB,GAAG,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,CAAA;YACrD,IAAI,sBAAsB,EAAE;gBAC1B,MAAM,iBAAiB,GAA4B,sBAAsB;oBACvE,CAAC,CAAC,MAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAmC,CAAC,KAAK,EAAE,mCAAI,IAAI;oBAChH,CAAC,CAAC,IAAI,CAAA;gBACR,IAAI,iBAAiB,EAAE;oBACrB,OAAO,iBAAiB,CAAC,CAAC,CAAC,IAAI,oCAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;iBAC1E;aACF;YACD,OAAO,IAAI,CAAA;;KACZ;CACF;AAtCD,0DAsCC"}