@xyo-network/diviner-image-thumbnail 2.78.4 → 2.79.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 (180) hide show
  1. package/dist/browser/Diviner/Diviner.d.cts +4 -44
  2. package/dist/browser/Diviner/Diviner.d.cts.map +1 -1
  3. package/dist/browser/Diviner/Diviner.d.mts +4 -44
  4. package/dist/browser/Diviner/Diviner.d.mts.map +1 -1
  5. package/dist/browser/Diviner/Diviner.d.ts +4 -44
  6. package/dist/browser/Diviner/Diviner.d.ts.map +1 -1
  7. package/dist/browser/Diviner/ImageThumbnailDivinerLabels.d.cts +19 -0
  8. package/dist/browser/Diviner/ImageThumbnailDivinerLabels.d.cts.map +1 -0
  9. package/dist/browser/Diviner/ImageThumbnailDivinerLabels.d.mts +19 -0
  10. package/dist/browser/Diviner/ImageThumbnailDivinerLabels.d.mts.map +1 -0
  11. package/dist/browser/Diviner/ImageThumbnailDivinerLabels.d.ts +19 -0
  12. package/dist/browser/Diviner/ImageThumbnailDivinerLabels.d.ts.map +1 -0
  13. package/dist/browser/Diviner/ImageThumbnailDivinerState.d.cts +5 -0
  14. package/dist/browser/Diviner/ImageThumbnailDivinerState.d.cts.map +1 -0
  15. package/dist/browser/Diviner/ImageThumbnailDivinerState.d.mts +5 -0
  16. package/dist/browser/Diviner/ImageThumbnailDivinerState.d.mts.map +1 -0
  17. package/dist/browser/Diviner/ImageThumbnailDivinerState.d.ts +5 -0
  18. package/dist/browser/Diviner/ImageThumbnailDivinerState.d.ts.map +1 -0
  19. package/dist/browser/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.cts +13 -0
  20. package/dist/browser/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.cts.map +1 -0
  21. package/dist/browser/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.mts +13 -0
  22. package/dist/browser/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.mts.map +1 -0
  23. package/dist/browser/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts +13 -0
  24. package/dist/browser/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts.map +1 -0
  25. package/dist/browser/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.cts +13 -0
  26. package/dist/browser/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.cts.map +1 -0
  27. package/dist/browser/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.mts +13 -0
  28. package/dist/browser/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.mts.map +1 -0
  29. package/dist/browser/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts +13 -0
  30. package/dist/browser/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts.map +1 -0
  31. package/dist/browser/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.cts +13 -0
  32. package/dist/browser/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.cts.map +1 -0
  33. package/dist/browser/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.mts +13 -0
  34. package/dist/browser/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.mts.map +1 -0
  35. package/dist/browser/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts +13 -0
  36. package/dist/browser/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts.map +1 -0
  37. package/dist/browser/Diviner/ImageThumbnailResultQuery.d.cts +17 -0
  38. package/dist/browser/Diviner/ImageThumbnailResultQuery.d.cts.map +1 -0
  39. package/dist/browser/Diviner/ImageThumbnailResultQuery.d.mts +17 -0
  40. package/dist/browser/Diviner/ImageThumbnailResultQuery.d.mts.map +1 -0
  41. package/dist/browser/Diviner/ImageThumbnailResultQuery.d.ts +17 -0
  42. package/dist/browser/Diviner/ImageThumbnailResultQuery.d.ts.map +1 -0
  43. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.cts +14 -0
  44. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.cts.map +1 -0
  45. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.mts +14 -0
  46. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.mts.map +1 -0
  47. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.ts +14 -0
  48. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.ts.map +1 -0
  49. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.cts +50 -0
  50. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.cts.map +1 -0
  51. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.mts +50 -0
  52. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.mts.map +1 -0
  53. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.ts +50 -0
  54. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.ts.map +1 -0
  55. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.cts +5 -0
  56. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.cts.map +1 -0
  57. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.mts +5 -0
  58. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.mts.map +1 -0
  59. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.ts +5 -0
  60. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.ts.map +1 -0
  61. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.cts +4 -0
  62. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.cts.map +1 -0
  63. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.mts +4 -0
  64. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.mts.map +1 -0
  65. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.ts +4 -0
  66. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.ts.map +1 -0
  67. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.cts +5 -0
  68. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.cts.map +1 -0
  69. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.mts +5 -0
  70. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.mts.map +1 -0
  71. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.ts +5 -0
  72. package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.ts.map +1 -0
  73. package/dist/browser/Diviner/index.d.cts +7 -0
  74. package/dist/browser/Diviner/index.d.cts.map +1 -1
  75. package/dist/browser/Diviner/index.d.mts +7 -0
  76. package/dist/browser/Diviner/index.d.mts.map +1 -1
  77. package/dist/browser/Diviner/index.d.ts +7 -0
  78. package/dist/browser/Diviner/index.d.ts.map +1 -1
  79. package/dist/browser/index.cjs +224 -196
  80. package/dist/browser/index.cjs.map +1 -1
  81. package/dist/browser/index.js +229 -200
  82. package/dist/browser/index.js.map +1 -1
  83. package/dist/node/Diviner/Diviner.d.cts +4 -44
  84. package/dist/node/Diviner/Diviner.d.cts.map +1 -1
  85. package/dist/node/Diviner/Diviner.d.mts +4 -44
  86. package/dist/node/Diviner/Diviner.d.mts.map +1 -1
  87. package/dist/node/Diviner/Diviner.d.ts +4 -44
  88. package/dist/node/Diviner/Diviner.d.ts.map +1 -1
  89. package/dist/node/Diviner/ImageThumbnailDivinerLabels.d.cts +19 -0
  90. package/dist/node/Diviner/ImageThumbnailDivinerLabels.d.cts.map +1 -0
  91. package/dist/node/Diviner/ImageThumbnailDivinerLabels.d.mts +19 -0
  92. package/dist/node/Diviner/ImageThumbnailDivinerLabels.d.mts.map +1 -0
  93. package/dist/node/Diviner/ImageThumbnailDivinerLabels.d.ts +19 -0
  94. package/dist/node/Diviner/ImageThumbnailDivinerLabels.d.ts.map +1 -0
  95. package/dist/node/Diviner/ImageThumbnailDivinerState.d.cts +5 -0
  96. package/dist/node/Diviner/ImageThumbnailDivinerState.d.cts.map +1 -0
  97. package/dist/node/Diviner/ImageThumbnailDivinerState.d.mts +5 -0
  98. package/dist/node/Diviner/ImageThumbnailDivinerState.d.mts.map +1 -0
  99. package/dist/node/Diviner/ImageThumbnailDivinerState.d.ts +5 -0
  100. package/dist/node/Diviner/ImageThumbnailDivinerState.d.ts.map +1 -0
  101. package/dist/node/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.cts +13 -0
  102. package/dist/node/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.cts.map +1 -0
  103. package/dist/node/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.mts +13 -0
  104. package/dist/node/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.mts.map +1 -0
  105. package/dist/node/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts +13 -0
  106. package/dist/node/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts.map +1 -0
  107. package/dist/node/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.cts +13 -0
  108. package/dist/node/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.cts.map +1 -0
  109. package/dist/node/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.mts +13 -0
  110. package/dist/node/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.mts.map +1 -0
  111. package/dist/node/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts +13 -0
  112. package/dist/node/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts.map +1 -0
  113. package/dist/node/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.cts +13 -0
  114. package/dist/node/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.cts.map +1 -0
  115. package/dist/node/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.mts +13 -0
  116. package/dist/node/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.mts.map +1 -0
  117. package/dist/node/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts +13 -0
  118. package/dist/node/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts.map +1 -0
  119. package/dist/node/Diviner/ImageThumbnailResultQuery.d.cts +17 -0
  120. package/dist/node/Diviner/ImageThumbnailResultQuery.d.cts.map +1 -0
  121. package/dist/node/Diviner/ImageThumbnailResultQuery.d.mts +17 -0
  122. package/dist/node/Diviner/ImageThumbnailResultQuery.d.mts.map +1 -0
  123. package/dist/node/Diviner/ImageThumbnailResultQuery.d.ts +17 -0
  124. package/dist/node/Diviner/ImageThumbnailResultQuery.d.ts.map +1 -0
  125. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.cts +14 -0
  126. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.cts.map +1 -0
  127. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.mts +14 -0
  128. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.mts.map +1 -0
  129. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.ts +14 -0
  130. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.d.ts.map +1 -0
  131. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.cts +50 -0
  132. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.cts.map +1 -0
  133. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.mts +50 -0
  134. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.mts.map +1 -0
  135. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.ts +50 -0
  136. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.ts.map +1 -0
  137. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.cts +5 -0
  138. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.cts.map +1 -0
  139. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.mts +5 -0
  140. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.mts.map +1 -0
  141. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.ts +5 -0
  142. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.d.ts.map +1 -0
  143. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.cts +4 -0
  144. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.cts.map +1 -0
  145. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.mts +4 -0
  146. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.mts.map +1 -0
  147. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.ts +4 -0
  148. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.d.ts.map +1 -0
  149. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.cts +5 -0
  150. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.cts.map +1 -0
  151. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.mts +5 -0
  152. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.mts.map +1 -0
  153. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.ts +5 -0
  154. package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.d.ts.map +1 -0
  155. package/dist/node/Diviner/index.d.cts +7 -0
  156. package/dist/node/Diviner/index.d.cts.map +1 -1
  157. package/dist/node/Diviner/index.d.mts +7 -0
  158. package/dist/node/Diviner/index.d.mts.map +1 -1
  159. package/dist/node/Diviner/index.d.ts +7 -0
  160. package/dist/node/Diviner/index.d.ts.map +1 -1
  161. package/dist/node/index.js +242 -204
  162. package/dist/node/index.js.map +1 -1
  163. package/dist/node/index.mjs +238 -207
  164. package/dist/node/index.mjs.map +1 -1
  165. package/package.json +24 -21
  166. package/src/Diviner/Diviner.ts +4 -300
  167. package/src/Diviner/ImageThumbnailDivinerLabels.ts +26 -0
  168. package/src/Diviner/ImageThumbnailDivinerState.ts +5 -0
  169. package/src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts +70 -0
  170. package/src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts +61 -0
  171. package/src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts +43 -0
  172. package/src/Diviner/ImageThumbnailResultQuery.ts +19 -0
  173. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.ts +16 -0
  174. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts +134 -0
  175. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.ts +6 -0
  176. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.ts +4 -0
  177. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.ts +4 -0
  178. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/spec/ImageThumbnailStateToIndexCandidateDiviner.json +56 -0
  179. package/src/Diviner/index.ts +7 -0
  180. package/src/Diviner/spec/ImageThumbnailDivinerManifest.json +159 -0
@@ -20,225 +20,253 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
- ImageThumbnailDiviner: () => ImageThumbnailDiviner
23
+ ImageThumbnailDiviner: () => ImageThumbnailDiviner,
24
+ ImageThumbnailDivinerLabels: () => ImageThumbnailDivinerLabels,
25
+ ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner: () => ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner,
26
+ ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner: () => ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner,
27
+ ImageThumbnailQueryToImageThumbnailIndexQueryDiviner: () => ImageThumbnailQueryToImageThumbnailIndexQueryDiviner,
28
+ ImageThumbnailStateToIndexCandidateDiviner: () => ImageThumbnailStateToIndexCandidateDiviner,
29
+ ImageThumbnailStateToIndexCandidateDivinerConfigSchema: () => ImageThumbnailStateToIndexCandidateDivinerConfigSchema,
30
+ ImageThumbnailStateToIndexCandidateDivinerSchema: () => ImageThumbnailStateToIndexCandidateDivinerSchema,
31
+ isImageThumbnailResultQuery: () => isImageThumbnailResultQuery
24
32
  });
25
33
  module.exports = __toCommonJS(src_exports);
26
34
 
27
35
  // src/Diviner/Diviner.ts
28
- var import_assert = require("@xylabs/assert");
29
- var import_exists = require("@xylabs/exists");
36
+ var import_diviner_indexing = require("@xyo-network/diviner-indexing");
37
+
38
+ // src/Diviner/ImageThumbnailDivinerLabels.ts
39
+ var ImageThumbnailDivinerLabels = {
40
+ "network.xyo.image.thumbnail": "diviner"
41
+ };
42
+
43
+ // src/Diviner/Diviner.ts
44
+ var ImageThumbnailDiviner = class extends import_diviner_indexing.IndexingDiviner {
45
+ static labels = ImageThumbnailDivinerLabels;
46
+ };
47
+
48
+ // src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts
30
49
  var import_abstract_diviner = require("@xyo-network/abstract-diviner");
31
- var import_archivist_wrapper = require("@xyo-network/archivist-wrapper");
32
- var import_boundwitness_builder = require("@xyo-network/boundwitness-builder");
33
50
  var import_boundwitness_model = require("@xyo-network/boundwitness-model");
34
51
  var import_core = require("@xyo-network/core");
35
- var import_diviner_boundwitness_model = require("@xyo-network/diviner-boundwitness-model");
36
52
  var import_diviner_model = require("@xyo-network/diviner-model");
37
- var import_diviner_payload_model = require("@xyo-network/diviner-payload-model");
38
- var import_diviner_wrapper = require("@xyo-network/diviner-wrapper");
39
53
  var import_image_thumbnail_payload_plugin = require("@xyo-network/image-thumbnail-payload-plugin");
40
- var import_module_model = require("@xyo-network/module-model");
41
54
  var import_payload_builder = require("@xyo-network/payload-builder");
55
+ var import_url_payload_plugin = require("@xyo-network/url-payload-plugin");
42
56
  var import_witness_timestamp = require("@xyo-network/witness-timestamp");
43
- var moduleName = "ImageThumbnailDiviner";
44
- var ImageThumbnailDiviner = class _ImageThumbnailDiviner extends import_abstract_diviner.AbstractDiviner {
45
- static configSchemas = [import_image_thumbnail_payload_plugin.ImageThumbnailDivinerConfigSchema, import_diviner_model.DivinerConfigSchema];
46
- _lastState;
47
- _pollId;
48
- get payloadDivinerLimit() {
49
- return this.config.payloadDivinerLimit ?? 1e4;
50
- }
51
- get pollFrequency() {
52
- return this.config.pollFrequency ?? 1e4;
57
+ var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends import_abstract_diviner.AbstractDiviner {
58
+ static configSchemas = [import_diviner_model.DivinerConfigSchema];
59
+ static labels = {
60
+ ...ImageThumbnailDivinerLabels,
61
+ "network.xyo.diviner.stage": "indexCandidateToIndexDiviner"
62
+ };
63
+ async divineHandler(payloads = []) {
64
+ const bws = payloads.filter(import_boundwitness_model.isBoundWitness);
65
+ const imageThumbnailPayloads = payloads.filter(import_image_thumbnail_payload_plugin.isImageThumbnail);
66
+ const timestampPayloads = payloads.filter(import_witness_timestamp.isTimestamp);
67
+ if (bws.length && imageThumbnailPayloads.length && timestampPayloads.length) {
68
+ const payloadDictionary = await import_core.PayloadHasher.toMap(payloads);
69
+ const tuples = bws.reduce(
70
+ (acc, curr) => {
71
+ const imageThumbnailIndex = curr.payload_schemas?.findIndex((schema) => schema === import_image_thumbnail_payload_plugin.ImageThumbnailSchema);
72
+ const timestampIndex = curr.payload_schemas?.findIndex((schema) => schema === import_witness_timestamp.TimestampSchema);
73
+ const imageThumbnailHash = curr.payload_hashes?.[imageThumbnailIndex];
74
+ const timestampHash = curr.payload_hashes?.[timestampIndex];
75
+ const imageThumbnailPayload = [payloadDictionary[imageThumbnailHash]].find(import_image_thumbnail_payload_plugin.isImageThumbnail);
76
+ const timestampPayload = [payloadDictionary[timestampHash]].find(import_witness_timestamp.isTimestamp);
77
+ if (imageThumbnailPayload && timestampPayload)
78
+ acc.push([curr, imageThumbnailPayload, timestampPayload]);
79
+ return acc;
80
+ },
81
+ []
82
+ );
83
+ const indexes = await Promise.all(
84
+ tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {
85
+ const { sourceUrl: url } = imageThumbnailPayload;
86
+ const { timestamp } = timestampPayload;
87
+ const status = imageThumbnailPayload.http?.status;
88
+ const success = !!imageThumbnailPayload.url;
89
+ const sources = (await import_core.PayloadHasher.hashPairs([bw, imageThumbnailPayload, timestampPayload])).map(([, hash]) => hash);
90
+ const urlPayload = { schema: import_url_payload_plugin.UrlSchema, url };
91
+ const key = await import_core.PayloadHasher.hashAsync(urlPayload);
92
+ const fields = { key, sources, success, timestamp };
93
+ if (status)
94
+ fields.status = status;
95
+ const result = new import_payload_builder.PayloadBuilder({ schema: import_image_thumbnail_payload_plugin.ImageThumbnailResultIndexSchema }).fields(fields).build();
96
+ return [result];
97
+ })
98
+ );
99
+ return indexes.flat();
100
+ }
101
+ return Promise.resolve([]);
53
102
  }
54
- static async indexableData(indexableHashes, archivist) {
55
- const indexableData = (await Promise.all(
56
- indexableHashes.map(async ([boundWitnessHash, imageThumbnailHash, timestampHash]) => {
57
- const results = await archivist.get([imageThumbnailHash, timestampHash]);
58
- const imageThumbnailPayload = results.find(import_image_thumbnail_payload_plugin.isImageThumbnail);
59
- if (!imageThumbnailPayload) {
60
- console.log(
61
- `${moduleName}: Could not find ${import_image_thumbnail_payload_plugin.ImageThumbnailSchema} Payload (${imageThumbnailHash}) from BoundWitness (${boundWitnessHash})`
62
- );
63
- return void 0;
64
- }
65
- const timestampPayload = results.find(import_witness_timestamp.isTimestamp);
66
- if (!timestampPayload) {
67
- console.log(`${moduleName}: Could not find ${import_witness_timestamp.TimestampSchema} Payload (${timestampHash}) from BoundWitness (${boundWitnessHash})`);
68
- return void 0;
103
+ };
104
+
105
+ // src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts
106
+ var import_exists = require("@xylabs/exists");
107
+ var import_abstract_diviner2 = require("@xyo-network/abstract-diviner");
108
+ var import_core2 = require("@xyo-network/core");
109
+ var import_diviner_model2 = require("@xyo-network/diviner-model");
110
+ var import_image_thumbnail_payload_plugin2 = require("@xyo-network/image-thumbnail-payload-plugin");
111
+ var import_payload_builder2 = require("@xyo-network/payload-builder");
112
+ var import_url_payload_plugin2 = require("@xyo-network/url-payload-plugin");
113
+ var ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner = class extends import_abstract_diviner2.AbstractDiviner {
114
+ static configSchemas = [import_diviner_model2.DivinerConfigSchema];
115
+ static labels = {
116
+ ...ImageThumbnailDivinerLabels,
117
+ "network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner"
118
+ };
119
+ async divineHandler(payloads = []) {
120
+ const imageThumbnailDivinerQueries = payloads.filter(import_image_thumbnail_payload_plugin2.isImageThumbnailDivinerQuery);
121
+ const imageThumbnailResultIndexes = payloads.filter(import_image_thumbnail_payload_plugin2.isImageThumbnailResultIndex);
122
+ if (imageThumbnailDivinerQueries.length && imageThumbnailResultIndexes.length) {
123
+ const keyToUrlDictionary = Object.fromEntries(
124
+ await Promise.all(
125
+ imageThumbnailDivinerQueries.map(async (imageThumbnailDivinerQuery) => {
126
+ const { url } = imageThumbnailDivinerQuery;
127
+ const urlPayload = new import_payload_builder2.PayloadBuilder({ schema: import_url_payload_plugin2.UrlSchema }).fields({ url }).build();
128
+ const key = await import_core2.PayloadHasher.hashAsync(urlPayload);
129
+ return [key, url];
130
+ })
131
+ )
132
+ );
133
+ return imageThumbnailResultIndexes.map((imageThumbnailResultIndex) => {
134
+ const { key, schema, ...commonFields } = imageThumbnailResultIndex;
135
+ const url = keyToUrlDictionary?.[key];
136
+ if (url) {
137
+ const fields = { ...commonFields, url };
138
+ return new import_payload_builder2.PayloadBuilder({ schema: import_image_thumbnail_payload_plugin2.ImageThumbnailResultSchema }).fields(fields).build();
69
139
  }
70
- const calculatedImageThumbnailHash = await import_core.PayloadHasher.hashAsync(imageThumbnailPayload);
71
- const calculatedTimestampHash = await import_core.PayloadHasher.hashAsync(timestampPayload);
72
- if (imageThumbnailHash !== calculatedImageThumbnailHash || timestampHash !== calculatedTimestampHash)
73
- return void 0;
74
- return [boundWitnessHash, imageThumbnailHash, imageThumbnailPayload, timestampHash, timestampPayload];
75
- })
76
- )).filter(import_exists.exists);
77
- return indexableData;
78
- }
79
- static async indexableHashes(batch) {
80
- const indexableHashes = (await Promise.all(
81
- batch.filter(import_boundwitness_model.isBoundWitness).map(async (bw) => {
82
- const imageThumbnailIndexes = bw.payload_schemas?.map((schema, index) => schema === import_image_thumbnail_payload_plugin.ImageThumbnailSchema ? index : void 0).filter(import_exists.exists);
83
- const timestampIndex = bw.payload_schemas?.findIndex((schema) => schema === import_witness_timestamp.TimestampSchema);
84
- if (!imageThumbnailIndexes.length || timestampIndex === -1)
85
- return void 0;
86
- const imageThumbnails = bw.payload_hashes.map((hash, index) => imageThumbnailIndexes.includes(index) ? hash : void 0).filter(import_exists.exists);
87
- const timestampHash = bw.payload_hashes?.[timestampIndex];
88
- const boundWitnessHash = await import_core.PayloadHasher.hashAsync(bw);
89
- return imageThumbnails.map((imageThumbnailHash) => [boundWitnessHash, imageThumbnailHash, timestampHash]);
90
- })
91
- )).flat().filter(import_exists.exists);
92
- return indexableHashes;
140
+ }).filter(import_exists.exists);
141
+ }
142
+ return [];
93
143
  }
94
- /**
95
- * Works in the background to populate index for the Diviner
96
- * @returns
97
- */
98
- backgroundDivine = async () => {
99
- const lastState = await this.retrieveState() ?? { offset: 0 };
100
- const { offset } = lastState;
101
- const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore("thumbnailStore");
102
- const query = new import_payload_builder.PayloadBuilder({ schema: import_diviner_boundwitness_model.BoundWitnessDivinerQuerySchema }).fields({
103
- limit: this.payloadDivinerLimit,
104
- offset,
105
- order: "asc",
106
- payload_schemas: [import_image_thumbnail_payload_plugin.ImageThumbnailSchema, import_witness_timestamp.TimestampSchema]
107
- }).build();
108
- const batch = await boundWitnessDiviner.divine([query]);
109
- if (batch.length === 0)
110
- return;
111
- const indexableHashes = await _ImageThumbnailDiviner.indexableHashes(batch);
112
- const archivist = await this.getArchivistForStore("thumbnailStore");
113
- const indexableData = await _ImageThumbnailDiviner.indexableData(indexableHashes, archivist);
114
- const indexes = indexableData.map(
115
- ([boundWitnessHash, thumbnailHash, thumbnailPayload, timestampHash, timestampPayload]) => {
116
- const { sourceUrl: url } = thumbnailPayload;
117
- const { timestamp } = timestampPayload;
118
- const status = thumbnailPayload.http?.status;
119
- const success = !!thumbnailPayload.url;
120
- const sources = [boundWitnessHash, thumbnailHash, timestampHash];
121
- const fields = { sources, status, success, timestamp, url };
122
- const result = new import_payload_builder.PayloadBuilder({ schema: import_image_thumbnail_payload_plugin.ImageThumbnailResultIndexSchema }).fields(fields).build();
123
- return result;
124
- }
125
- );
126
- const indexArchivist = await this.getArchivistForStore("indexStore");
127
- await indexArchivist.insert(indexes);
128
- const nextOffset = offset + batch.length;
129
- const currentState = { ...lastState, offset: nextOffset };
130
- await this.commitState(currentState);
144
+ };
145
+
146
+ // src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts
147
+ var import_abstract_diviner3 = require("@xyo-network/abstract-diviner");
148
+ var import_core3 = require("@xyo-network/core");
149
+ var import_diviner_model3 = require("@xyo-network/diviner-model");
150
+ var import_diviner_payload_model = require("@xyo-network/diviner-payload-model");
151
+ var import_image_thumbnail_payload_plugin3 = require("@xyo-network/image-thumbnail-payload-plugin");
152
+ var import_payload_builder3 = require("@xyo-network/payload-builder");
153
+ var import_url_payload_plugin3 = require("@xyo-network/url-payload-plugin");
154
+ var ImageThumbnailQueryToImageThumbnailIndexQueryDiviner = class extends import_abstract_diviner3.AbstractDiviner {
155
+ static configSchemas = [import_diviner_model3.DivinerConfigSchema];
156
+ static labels = {
157
+ ...ImageThumbnailDivinerLabels,
158
+ "network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner"
131
159
  };
132
- /**
133
- * Commit the internal state of the Diviner process. This is similar
134
- * to a transaction completion in a database and should only be called
135
- * when results have been successfully persisted to the appropriate
136
- * external stores.
137
- */
138
- async commitState(state) {
139
- this._lastState = state;
140
- const archivist = await this.getArchivistForStore("stateStore");
141
- const payload = new import_payload_builder.PayloadBuilder({ schema: import_module_model.ModuleStateSchema }).fields({ state }).build();
142
- const [bw] = await new import_boundwitness_builder.BoundWitnessBuilder().payloads([payload]).witness(this.account).build();
143
- await archivist.insert([bw, payload]);
144
- }
145
160
  async divineHandler(payloads = []) {
146
- const urls = payloads.filter(import_image_thumbnail_payload_plugin.isImageThumbnailDivinerQuery);
147
- const diviner = await this.getPayloadDivinerForStore("indexStore");
148
- const results = (await Promise.all(
149
- urls.map(async (payload) => {
150
- const { limit: payloadLimit, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url } = payload;
151
- const limit = payloadLimit ?? 1;
152
- const order = payloadOrder ?? "desc";
153
- const offset = payloadOffset ?? 0;
154
- const fields = { limit, offset, order, url };
155
- if (payloadSuccess !== void 0)
156
- fields.success = payloadSuccess;
157
- if (payloadStatus !== void 0)
158
- fields.status = payloadStatus;
159
- const query = new import_payload_builder.PayloadBuilder({ schema: import_diviner_payload_model.PayloadDivinerQuerySchema }).fields(fields).build();
160
- return await diviner.divine([query]);
161
- })
162
- )).flat().filter(import_image_thumbnail_payload_plugin.isImageThumbnailResult);
163
- return results;
161
+ const queries = payloads.filter(import_image_thumbnail_payload_plugin3.isImageThumbnailDivinerQuery);
162
+ if (queries.length) {
163
+ const results = await Promise.all(
164
+ queries.map(async (query) => {
165
+ const { limit: payloadLimit, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url } = query;
166
+ const limit = payloadLimit ?? 1;
167
+ const order2 = payloadOrder ?? "desc";
168
+ const offset = payloadOffset ?? 0;
169
+ const urlPayload = { schema: import_url_payload_plugin3.UrlSchema, url };
170
+ const key = await import_core3.PayloadHasher.hashAsync(urlPayload);
171
+ const fields = { key, limit, offset, order: order2 };
172
+ if (payloadSuccess !== void 0)
173
+ fields.success = payloadSuccess;
174
+ if (payloadStatus !== void 0)
175
+ fields.status = payloadStatus;
176
+ return new import_payload_builder3.PayloadBuilder({ schema: import_diviner_payload_model.PayloadDivinerQuerySchema }).fields(fields).build();
177
+ })
178
+ );
179
+ return results;
180
+ }
181
+ return Promise.resolve([]);
164
182
  }
165
- async getArchivistForStore(store) {
166
- const name = (0, import_assert.assertEx)(this.config?.[store]?.archivist, () => `${moduleName}: Config for ${store}.archivist not specified`);
167
- const mod = (0, import_assert.assertEx)(await this.resolve(name), () => `${moduleName}: Failed to resolve ${store}.archivist`);
168
- return import_archivist_wrapper.ArchivistWrapper.wrap(mod, this.account);
183
+ };
184
+
185
+ // src/Diviner/ImageThumbnailResultQuery.ts
186
+ var import_diviner_payload_model2 = require("@xyo-network/diviner-payload-model");
187
+ var import_payload_model = require("@xyo-network/payload-model");
188
+ var isImageThumbnailResultQuery = (0, import_payload_model.isPayloadOfSchemaType)(import_diviner_payload_model2.PayloadDivinerQuerySchema);
189
+
190
+ // src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.ts
191
+ var import_image_thumbnail_payload_plugin4 = require("@xyo-network/image-thumbnail-payload-plugin");
192
+ var ImageThumbnailStateToIndexCandidateDivinerSchema = `${import_image_thumbnail_payload_plugin4.ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`;
193
+
194
+ // src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.ts
195
+ var ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`;
196
+
197
+ // src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts
198
+ var import_assert = require("@xylabs/assert");
199
+ var import_exists2 = require("@xylabs/exists");
200
+ var import_abstract_diviner4 = require("@xyo-network/abstract-diviner");
201
+ var import_archivist_wrapper = require("@xyo-network/archivist-wrapper");
202
+ var import_boundwitness_model2 = require("@xyo-network/boundwitness-model");
203
+ var import_diviner_boundwitness_model = require("@xyo-network/diviner-boundwitness-model");
204
+ var import_diviner_model4 = require("@xyo-network/diviner-model");
205
+ var import_diviner_wrapper = require("@xyo-network/diviner-wrapper");
206
+ var import_image_thumbnail_payload_plugin5 = require("@xyo-network/image-thumbnail-payload-plugin");
207
+ var import_module_model = require("@xyo-network/module-model");
208
+ var import_payload_builder4 = require("@xyo-network/payload-builder");
209
+ var import_witness_timestamp2 = require("@xyo-network/witness-timestamp");
210
+ var payload_schemas = [import_image_thumbnail_payload_plugin5.ImageThumbnailSchema, import_witness_timestamp2.TimestampSchema];
211
+ var indexCandidateIdentityFunctions = [import_image_thumbnail_payload_plugin5.isImageThumbnail, import_witness_timestamp2.isTimestamp];
212
+ var order = "asc";
213
+ var moduleName = "ImageThumbnailStateToIndexCandidateDiviner";
214
+ var ImageThumbnailStateToIndexCandidateDiviner = class _ImageThumbnailStateToIndexCandidateDiviner extends import_abstract_diviner4.AbstractDiviner {
215
+ static configSchemas = [import_diviner_model4.DivinerConfigSchema, ImageThumbnailStateToIndexCandidateDivinerConfigSchema];
216
+ static labels = {
217
+ ...ImageThumbnailDivinerLabels,
218
+ "network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
219
+ };
220
+ get payloadDivinerLimit() {
221
+ return this.config.payloadDivinerLimit ?? 1e3;
169
222
  }
170
- async getBoundWitnessDivinerForStore(store) {
171
- const name = (0, import_assert.assertEx)(this.config?.[store]?.boundWitnessDiviner, () => `${moduleName}: Config for ${store}.boundWitnessDiviner not specified`);
172
- const mod = (0, import_assert.assertEx)(await this.resolve(name), () => `${moduleName}: Failed to resolve ${store}.boundWitnessDiviner`);
173
- return import_diviner_wrapper.DivinerWrapper.wrap(mod, this.account);
223
+ static async getPayloadsInBoundWitness(bw, archivist) {
224
+ const indexes = payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema));
225
+ const hashes = indexes.map((index) => bw.payload_hashes?.[index]);
226
+ const results = await archivist.get(hashes);
227
+ const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is));
228
+ if (filteredResults.some((f) => f === void 0))
229
+ return void 0;
230
+ const indexCandidates = filteredResults.filter(import_exists2.exists);
231
+ return [bw, ...indexCandidates];
174
232
  }
175
- async getPayloadDivinerForStore(store) {
176
- const name = (0, import_assert.assertEx)(this.config?.[store]?.payloadDiviner, () => `${moduleName}: Config for ${store}.payloadDiviner not specified`);
177
- const mod = (0, import_assert.assertEx)(await this.resolve(name), () => `${moduleName}: Failed to resolve ${store}.payloadDiviner`);
178
- return import_diviner_wrapper.DivinerWrapper.wrap(mod, this.account);
233
+ async divineHandler(payloads = []) {
234
+ const lastState = payloads.find(import_module_model.isModuleState);
235
+ if (!lastState)
236
+ return [{ schema: import_module_model.ModuleStateSchema, state: { offset: 0 } }];
237
+ const { offset } = lastState.state;
238
+ const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore();
239
+ const query = new import_payload_builder4.PayloadBuilder({ schema: import_diviner_boundwitness_model.BoundWitnessDivinerQuerySchema }).fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas }).build();
240
+ const batch = await boundWitnessDiviner.divine([query]);
241
+ if (batch.length === 0)
242
+ return [lastState];
243
+ const sourceArchivist = await this.getArchivistForStore();
244
+ const indexCandidates = (await Promise.all(
245
+ batch.filter(import_boundwitness_model2.isBoundWitness).map((bw) => _ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist))
246
+ )).filter(import_exists2.exists).flat();
247
+ const nextState = { schema: import_module_model.ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } };
248
+ return [nextState, ...indexCandidates];
179
249
  }
180
250
  /**
181
- * Retrieves the last state of the Diviner process. Used to recover state after
182
- * preemptions, reboots, etc.
251
+ * Retrieves the archivist for the payloadStore
252
+ * @returns The archivist for the payloadStore
183
253
  */
184
- async retrieveState() {
185
- if (this._lastState)
186
- return this._lastState;
187
- let hash = "";
188
- const diviner = await this.getBoundWitnessDivinerForStore("stateStore");
189
- const query = new import_payload_builder.PayloadBuilder({ schema: import_diviner_boundwitness_model.BoundWitnessDivinerQuerySchema }).fields({
190
- address: this.account.address,
191
- limit: 1,
192
- offset: 0,
193
- order: "desc",
194
- payload_schemas: [import_module_model.ModuleStateSchema]
195
- }).build();
196
- const boundWitnesses = await diviner.divine([query]);
197
- if (boundWitnesses.length > 0) {
198
- const boundWitness = boundWitnesses[0];
199
- if ((0, import_boundwitness_model.isBoundWitness)(boundWitness)) {
200
- hash = boundWitness.addresses.map((address, index) => ({ address, index })).filter(({ address }) => address === this.account.address).reduce(
201
- (prev, curr) => boundWitness.payload_schemas?.[curr?.index] === import_module_model.ModuleStateSchema ? boundWitness.payload_hashes[curr?.index] : prev,
202
- ""
203
- );
204
- }
205
- }
206
- if (hash) {
207
- const archivist = await this.getArchivistForStore("stateStore");
208
- const payload = (await archivist.get([hash])).find(import_module_model.isModuleState);
209
- if (payload) {
210
- return payload.state;
211
- }
212
- } else {
213
- console.log("Failed to locate last state");
214
- }
215
- return void 0;
216
- }
217
- async startHandler() {
218
- await super.startHandler();
219
- this.poll();
220
- return true;
221
- }
222
- async stopHandler(_timeout) {
223
- if (this._pollId) {
224
- clearTimeout(this._pollId);
225
- this._pollId = void 0;
226
- }
227
- return await super.stopHandler();
254
+ async getArchivistForStore() {
255
+ const name = (0, import_assert.assertEx)(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`);
256
+ const mod = (0, import_assert.assertEx)(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`);
257
+ return import_archivist_wrapper.ArchivistWrapper.wrap(mod, this.account);
228
258
  }
229
- poll() {
230
- this._pollId = setTimeout(async () => {
231
- try {
232
- await this.backgroundDivine();
233
- } catch (e) {
234
- console.log(e);
235
- } finally {
236
- if (this._pollId)
237
- clearTimeout(this._pollId);
238
- this._pollId = void 0;
239
- this.poll();
240
- }
241
- }, this.pollFrequency);
259
+ /**
260
+ * Retrieves the BoundWitness Diviner for the payloadStore
261
+ * @returns The BoundWitness Diviner for the payloadStore
262
+ */
263
+ async getBoundWitnessDivinerForStore() {
264
+ const name = (0, import_assert.assertEx)(
265
+ this.config?.payloadStore?.boundWitnessDiviner,
266
+ () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`
267
+ );
268
+ const mod = (0, import_assert.assertEx)(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.boundWitnessDiviner`);
269
+ return import_diviner_wrapper.DivinerWrapper.wrap(mod, this.account);
242
270
  }
243
271
  };
244
272
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport {\n ImageThumbnail,\n ImageThumbnailDivinerConfig,\n ImageThumbnailDivinerConfigSchema,\n ImageThumbnailDivinerParams,\n ImageThumbnailResult,\n ImageThumbnailResultIndexSchema,\n ImageThumbnailResultInfo,\n ImageThumbnailSchema,\n isImageThumbnail,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResult,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isModuleState, ModuleState, ModuleStateSchema, StateDictionary } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nexport type ImageThumbnailDivinerState = StateDictionary & {\n offset: number\n}\n\ntype ConfigStoreKey = 'indexStore' | 'stateStore' | 'thumbnailStore'\n\ntype ConfigStore = Extract<keyof ImageThumbnailDivinerConfig, ConfigStoreKey>\n\n/**\n * The fields that will need to be indexed on in the underlying store\n */\ntype QueryableImageThumbnailResultProperties = Extract<keyof ImageThumbnailResultInfo, 'status' | 'success' | 'timestamp' | 'url'>\n\n/**\n * The query that will be used to retrieve the results from the underlying store\n */\ntype ImageThumbnailResultQuery = PayloadDivinerQueryPayload & { schemas: [ImageThumbnailSchema] } & Pick<\n ImageThumbnailResult,\n QueryableImageThumbnailResultProperties\n >\n\ntype IndexableHashes = Readonly<[boundWitnessHash: string, imageThumbnailHash: string, timestampHash: string]>\n\nconst moduleName = 'ImageThumbnailDiviner'\n\nexport class ImageThumbnailDiviner<TParams extends ImageThumbnailDivinerParams = ImageThumbnailDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [ImageThumbnailDivinerConfigSchema, DivinerConfigSchema]\n\n private _lastState?: ImageThumbnailDivinerState\n private _pollId?: string | number | NodeJS.Timeout\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1_0000\n }\n\n get pollFrequency() {\n return this.config.pollFrequency ?? 10_000\n }\n\n private static async indexableData(indexableHashes: IndexableHashes[], archivist: ArchivistInstance) {\n // Find all the indexable data associated with the indexable hashes\n type IndexableData = Readonly<\n [\n boundWitnessHash: string,\n imageThumbnailHash: string,\n imageThumbnailPayload: ImageThumbnail,\n timestampHash: string,\n timestampPayload: TimeStamp,\n ]\n >\n const indexableData: IndexableData[] = (\n await Promise.all(\n indexableHashes.map(async ([boundWitnessHash, imageThumbnailHash, timestampHash]) => {\n const results = await archivist.get([imageThumbnailHash, timestampHash])\n const imageThumbnailPayload = results.find(isImageThumbnail)\n if (!imageThumbnailPayload) {\n console.log(\n `${moduleName}: Could not find ${ImageThumbnailSchema} Payload (${imageThumbnailHash}) from BoundWitness (${boundWitnessHash})`,\n )\n return undefined\n }\n const timestampPayload = results.find(isTimestamp)\n if (!timestampPayload) {\n console.log(`${moduleName}: Could not find ${TimestampSchema} Payload (${timestampHash}) from BoundWitness (${boundWitnessHash})`)\n return undefined\n }\n const calculatedImageThumbnailHash = await PayloadHasher.hashAsync(imageThumbnailPayload)\n const calculatedTimestampHash = await PayloadHasher.hashAsync(timestampPayload)\n if (imageThumbnailHash !== calculatedImageThumbnailHash || timestampHash !== calculatedTimestampHash) return undefined\n return [boundWitnessHash, imageThumbnailHash, imageThumbnailPayload, timestampHash, timestampPayload] as const\n }),\n )\n ).filter(exists)\n return indexableData\n }\n\n private static async indexableHashes(batch: Payload[]) {\n // Find all the indexable hashes in this batch\n const indexableHashes: IndexableHashes[] = (\n await Promise.all(\n batch.filter(isBoundWitness).map(async (bw) => {\n const imageThumbnailIndexes = bw.payload_schemas\n ?.map((schema, index) => (schema === ImageThumbnailSchema ? index : undefined))\n .filter(exists)\n const timestampIndex = bw.payload_schemas?.findIndex((schema) => schema === TimestampSchema)\n if (!imageThumbnailIndexes.length || timestampIndex === -1) return undefined\n const imageThumbnails = bw.payload_hashes.map((hash, index) => (imageThumbnailIndexes.includes(index) ? hash : undefined)).filter(exists)\n const timestampHash = bw.payload_hashes?.[timestampIndex]\n const boundWitnessHash = await PayloadHasher.hashAsync(bw)\n return imageThumbnails.map((imageThumbnailHash) => [boundWitnessHash, imageThumbnailHash, timestampHash] as const)\n }),\n )\n )\n .flat()\n .filter(exists)\n return indexableHashes\n }\n\n /**\n * Works in the background to populate index for the Diviner\n * @returns\n */\n protected backgroundDivine = async (): Promise<void> => {\n // Load last state\n const lastState = (await this.retrieveState()) ?? { offset: 0 }\n const { offset } = lastState\n // Get next batch of results\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore('thumbnailStore')\n const query = new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({\n limit: this.payloadDivinerLimit,\n offset,\n order: 'asc',\n payload_schemas: [ImageThumbnailSchema, TimestampSchema],\n })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return\n const indexableHashes = await ImageThumbnailDiviner.indexableHashes(batch)\n const archivist = await this.getArchivistForStore('thumbnailStore')\n const indexableData = await ImageThumbnailDiviner.indexableData(indexableHashes, archivist)\n // Build index results from the indexable data\n const indexes: ImageThumbnailResult[] = indexableData.map(\n ([boundWitnessHash, thumbnailHash, thumbnailPayload, timestampHash, timestampPayload]) => {\n const { sourceUrl: url } = thumbnailPayload\n const { timestamp } = timestampPayload\n const status = thumbnailPayload.http?.status\n //call anything with a thumbnail url a success\n const success = !!thumbnailPayload.url\n const sources = [boundWitnessHash, thumbnailHash, timestampHash]\n const fields = { sources, status, success, timestamp, url }\n const result = new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultIndexSchema }).fields(fields).build()\n return result\n },\n )\n // Insert index results\n const indexArchivist = await this.getArchivistForStore('indexStore')\n await indexArchivist.insert(indexes)\n // Update state\n const nextOffset = offset + batch.length\n const currentState = { ...lastState, offset: nextOffset }\n await this.commitState(currentState)\n }\n\n /**\n * Commit the internal state of the Diviner process. This is similar\n * to a transaction completion in a database and should only be called\n * when results have been successfully persisted to the appropriate\n * external stores.\n */\n protected async commitState(state: ImageThumbnailDivinerState) {\n this._lastState = state\n const archivist = await this.getArchivistForStore('stateStore')\n const payload = new PayloadBuilder<ModuleState<ImageThumbnailDivinerState>>({ schema: ModuleStateSchema }).fields({ state }).build()\n const [bw] = await new BoundWitnessBuilder().payloads([payload]).witness(this.account).build()\n await archivist.insert([bw, payload])\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {\n const urls = payloads.filter(isImageThumbnailDivinerQuery)\n const diviner = await this.getPayloadDivinerForStore('indexStore')\n const results = (\n await Promise.all(\n urls.map(async (payload) => {\n const { limit: payloadLimit, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url } = payload\n const limit = payloadLimit ?? 1\n const order = payloadOrder ?? 'desc'\n const offset = payloadOffset ?? 0\n const fields: Partial<ImageThumbnailResultQuery> = { limit, offset, order, url }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n const query = new PayloadBuilder<ImageThumbnailResultQuery>({ schema: PayloadDivinerQuerySchema }).fields(fields).build()\n return await diviner.divine([query])\n }),\n )\n )\n .flat()\n .filter(isImageThumbnailResult)\n return results\n }\n\n protected async getArchivistForStore(store: ConfigStore) {\n const name = assertEx(this.config?.[store]?.archivist, () => `${moduleName}: Config for ${store}.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve ${store}.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n protected async getBoundWitnessDivinerForStore(store: ConfigStore) {\n const name = assertEx(this.config?.[store]?.boundWitnessDiviner, () => `${moduleName}: Config for ${store}.boundWitnessDiviner not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve ${store}.boundWitnessDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n protected async getPayloadDivinerForStore(store: ConfigStore) {\n const name = assertEx(this.config?.[store]?.payloadDiviner, () => `${moduleName}: Config for ${store}.payloadDiviner not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve ${store}.payloadDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the last state of the Diviner process. Used to recover state after\n * preemptions, reboots, etc.\n */\n protected async retrieveState(): Promise<ImageThumbnailDivinerState | undefined> {\n if (this._lastState) return this._lastState\n let hash: string = ''\n const diviner = await this.getBoundWitnessDivinerForStore('stateStore')\n const query = new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({\n address: this.account.address,\n limit: 1,\n offset: 0,\n order: 'desc',\n payload_schemas: [ModuleStateSchema],\n })\n .build()\n const boundWitnesses = await diviner.divine([query])\n if (boundWitnesses.length > 0) {\n const boundWitness = boundWitnesses[0]\n if (isBoundWitness(boundWitness)) {\n // Find the index for this address in the BoundWitness that is a ModuleState\n hash = boundWitness.addresses\n .map((address, index) => ({ address, index }))\n .filter(({ address }) => address === this.account.address)\n .reduce(\n (prev, curr) => (boundWitness.payload_schemas?.[curr?.index] === ModuleStateSchema ? boundWitness.payload_hashes[curr?.index] : prev),\n '',\n )\n }\n }\n\n // If we able to located the last state\n if (hash) {\n // Get last state\n const archivist = await this.getArchivistForStore('stateStore')\n const payload = (await archivist.get([hash])).find(isModuleState)\n if (payload) {\n return payload.state as ImageThumbnailDivinerState\n }\n } else {\n console.log('Failed to locate last state')\n }\n return undefined\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n this.poll()\n return true\n }\n\n protected override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n if (this._pollId) {\n clearTimeout(this._pollId)\n this._pollId = undefined\n }\n return await super.stopHandler()\n }\n\n private poll() {\n this._pollId = setTimeout(async () => {\n try {\n await this.backgroundDivine()\n } catch (e) {\n console.log(e)\n } finally {\n if (this._pollId) clearTimeout(this._pollId)\n this._pollId = undefined\n this.poll()\n }\n }, this.pollFrequency)\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner/Diviner.ts","../../src/Diviner/ImageThumbnailDivinerLabels.ts","../../src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts","../../src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts","../../src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts","../../src/Diviner/ImageThumbnailResultQuery.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner {\n static labels: ImageThumbnailDivinerLabels = ImageThumbnailDivinerLabels\n}\n","import { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'\nimport { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport interface ImageThumbnailDivinerLabels extends Labels {\n 'network.xyo.image.thumbnail': 'diviner'\n}\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport const ImageThumbnailDivinerLabels: ImageThumbnailDivinerLabels = {\n 'network.xyo.image.thumbnail': 'diviner',\n}\n\n/**\n * Labels for Image Thumbnail Diviner Stage Diviners\n */\nexport type ImageThumbnailDivinerStageLabels = ImageThumbnailDivinerLabels & {\n /**\n * Labels for the stage of the Image Thumbnail Diviner Stage Diviner\n */\n [key in DivinerStageSchema]: IndexingDivinerStage\n}\n","import { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n ImageThumbnail,\n ImageThumbnailResultIndex,\n ImageThumbnailResultIndexFields,\n ImageThumbnailResultIndexSchema,\n ImageThumbnailSchema,\n isImageThumbnail,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResultIndex[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const imageThumbnailPayloads: ImageThumbnail[] = payloads.filter(isImageThumbnail)\n const timestampPayloads: TimeStamp[] = payloads.filter(isTimestamp)\n if (bws.length && imageThumbnailPayloads.length && timestampPayloads.length) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n const tuples: [BoundWitness, ImageThumbnail, TimeStamp][] = bws.reduce<[BoundWitness, ImageThumbnail, TimeStamp][]>(\n (acc, curr) => {\n const imageThumbnailIndex = curr.payload_schemas?.findIndex((schema) => schema === ImageThumbnailSchema)\n const timestampIndex = curr.payload_schemas?.findIndex((schema) => schema === TimestampSchema)\n const imageThumbnailHash = curr.payload_hashes?.[imageThumbnailIndex]\n const timestampHash = curr.payload_hashes?.[timestampIndex]\n const imageThumbnailPayload = [payloadDictionary[imageThumbnailHash]].find(isImageThumbnail)\n const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp)\n if (imageThumbnailPayload && timestampPayload) acc.push([curr, imageThumbnailPayload, timestampPayload])\n return acc\n },\n [] as [BoundWitness, ImageThumbnail, TimeStamp][],\n )\n const indexes = await Promise.all(\n tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {\n const { sourceUrl: url } = imageThumbnailPayload\n const { timestamp } = timestampPayload\n const status = imageThumbnailPayload.http?.status\n const success = !!imageThumbnailPayload.url // Call anything with a thumbnail url a success\n const sources = (await PayloadHasher.hashPairs([bw, imageThumbnailPayload, timestampPayload])).map(([, hash]) => hash)\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadHasher.hashAsync(urlPayload)\n const fields: ImageThumbnailResultIndexFields = { key, sources, success, timestamp }\n if (status) fields.status = status\n const result: ImageThumbnailResultIndex = new PayloadBuilder<ImageThumbnailResultIndex>({ schema: ImageThumbnailResultIndexSchema })\n .fields(fields)\n .build()\n return [result]\n }),\n )\n return indexes.flat()\n }\n return Promise.resolve([])\n }\n}\n","import { exists } from '@xylabs/exists'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n ImageThumbnailResult,\n ImageThumbnailResultFields,\n ImageThumbnailResultSchema,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResultIndex,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {\n // Filter out the two operands\n const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)\n const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndex)\n\n // If we have operands\n if (imageThumbnailDivinerQueries.length && imageThumbnailResultIndexes.length) {\n // Create a dictionary to translate index keys to the urls that represent them\n const keyToUrlDictionary = Object.fromEntries(\n await Promise.all(\n imageThumbnailDivinerQueries.map(async (imageThumbnailDivinerQuery) => {\n const { url } = imageThumbnailDivinerQuery\n const urlPayload = new PayloadBuilder<ImageThumbnailResult>({ schema: UrlSchema }).fields({ url }).build()\n const key = await PayloadHasher.hashAsync(urlPayload)\n return [key, url] as const\n }),\n ),\n )\n // Map the indexes to responses using the dictionary\n return imageThumbnailResultIndexes\n .map((imageThumbnailResultIndex) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { key, schema, ...commonFields } = imageThumbnailResultIndex\n const url = keyToUrlDictionary?.[key]\n if (url) {\n const fields: ImageThumbnailResultFields = { ...commonFields, url }\n return new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema }).fields(fields).build()\n }\n })\n .filter(exists)\n }\n return []\n }\n}\n","import { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isImageThumbnailDivinerQuery } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\nimport { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResultQuery[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const { limit: payloadLimit, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url } = query\n const limit = payloadLimit ?? 1\n const order = payloadOrder ?? 'desc'\n const offset = payloadOffset ?? 0\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadHasher.hashAsync(urlPayload)\n const fields: Partial<ImageThumbnailResultQuery> = { key, limit, offset, order }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n return new PayloadBuilder<ImageThumbnailResultQuery>({ schema: PayloadDivinerQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return Promise.resolve([])\n }\n}\n","import { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ImageThumbnailResultIndex } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\n/**\n * The fields that will need to be indexed on in the underlying store\n */\nexport type QueryableImageThumbnailResultProperties = Extract<keyof ImageThumbnailResultIndex, 'status' | 'success' | 'timestamp' | 'key'>\n\n/**\n * The query that will be used to retrieve the results from the underlying store\n */\nexport type ImageThumbnailResultQuery = PayloadDivinerQueryPayload & Pick<ImageThumbnailResultIndex, QueryableImageThumbnailResultProperties>\n\n/**\n * A type guard for ImageThumbnailResultQuery\n */\n// TODO: Use a more derived schema than PayloadDivinerQuerySchema\nexport const isImageThumbnailResultQuery = isPayloadOfSchemaType<ImageThumbnailResultQuery>(PayloadDivinerQuerySchema)\n","import { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\nexport const ImageThumbnailStateToIndexCandidateDivinerSchema: ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\n","import { DivinerConfig } from '@xyo-network/diviner-model'\nimport { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'\n\nimport { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\nexport const ImageThumbnailStateToIndexCandidateDivinerConfigSchema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfig = DivinerConfig<{\n payloadDivinerLimit?: number\n /**\n * Where the diviner should look for stored thumbnails\n */\n payloadStore?: SearchableStorage\n schema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n}>\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { ImageThumbnail, ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isModuleState, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels'\nimport { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config'\nimport { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | ImageThumbnail | TimeStamp\n\n/**\n * The response from the ImageThumbnailStateToIndexCandidateDiviner\n */\nexport type ImageThumbnailStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<ImageThumbnailDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\nconst payload_schemas = [ImageThumbnailSchema, TimestampSchema]\n\n/**\n * Index candidate identity functions\n */\nconst indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailStateToIndexCandidateDiviner<\n TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchemas = [DivinerConfigSchema, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1_000\n }\n\n protected static async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema))\n const hashes = indexes.map((index) => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))\n if (filteredResults.some((f) => f === undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]\n return [bw, ...indexCandidates]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailStateToIndexCandidateDivinerResponse> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n const query = new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(\n batch.filter(isBoundWitness).map((bw) => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n )\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore\n */\n protected async getArchivistForStore() {\n const name = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore\n */\n protected async getBoundWitnessDivinerForStore() {\n const name = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.boundWitnessDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n}\n"],"mappings":"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","names":["import_abstract_diviner","import_core","import_diviner_model","import_image_thumbnail_payload_plugin","import_payload_builder","import_url_payload_plugin","import_abstract_diviner","import_core","import_diviner_model","import_image_thumbnail_payload_plugin","import_payload_builder","import_url_payload_plugin","order","import_diviner_payload_model","import_image_thumbnail_payload_plugin","import_exists","import_abstract_diviner","import_boundwitness_model","import_diviner_model","import_image_thumbnail_payload_plugin","import_payload_builder","import_witness_timestamp"]}