@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
@@ -0,0 +1,134 @@
1
+ import { assertEx } from '@xylabs/assert'
2
+ import { exists } from '@xylabs/exists'
3
+ import { AbstractDiviner } from '@xyo-network/abstract-diviner'
4
+ import { ArchivistInstance } from '@xyo-network/archivist-model'
5
+ import { ArchivistWrapper } from '@xyo-network/archivist-wrapper'
6
+ import { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'
7
+ import { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'
8
+ import { DivinerConfigSchema } from '@xyo-network/diviner-model'
9
+ import { DivinerWrapper } from '@xyo-network/diviner-wrapper'
10
+ import { ImageThumbnail, ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'
11
+ import { isModuleState, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'
12
+ import { PayloadBuilder } from '@xyo-network/payload-builder'
13
+ import { Payload } from '@xyo-network/payload-model'
14
+ import { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'
15
+
16
+ import { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels'
17
+ import { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState'
18
+ import { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config'
19
+ import { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params'
20
+
21
+ /**
22
+ * All Payload types involved in index candidates for indexing
23
+ */
24
+ export type IndexCandidate = BoundWitness | ImageThumbnail | TimeStamp
25
+
26
+ /**
27
+ * The response from the ImageThumbnailStateToIndexCandidateDiviner
28
+ */
29
+ export type ImageThumbnailStateToIndexCandidateDivinerResponse = [
30
+ /**
31
+ * The next state of the diviner
32
+ */
33
+ nextState: ModuleState<ImageThumbnailDivinerState>,
34
+ /**
35
+ * The index candidates
36
+ */
37
+ ...IndexCandidate[],
38
+ ]
39
+
40
+ /**
41
+ * The required payload_schemas within BoundWitnesses to identify index candidates
42
+ */
43
+ const payload_schemas = [ImageThumbnailSchema, TimestampSchema]
44
+
45
+ /**
46
+ * Index candidate identity functions
47
+ */
48
+ const indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const
49
+
50
+ /**
51
+ * The default order to search Bound Witnesses to identify index candidates
52
+ */
53
+ const order = 'asc'
54
+
55
+ /**
56
+ * The name of the module (for logging purposes)
57
+ */
58
+ const moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'
59
+
60
+ /**
61
+ * Transforms candidates for image thumbnail indexing into their indexed representation
62
+ */
63
+ export class ImageThumbnailStateToIndexCandidateDiviner<
64
+ TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,
65
+ > extends AbstractDiviner<TParams> {
66
+ static override configSchemas = [DivinerConfigSchema, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]
67
+ static labels: ImageThumbnailDivinerStageLabels = {
68
+ ...ImageThumbnailDivinerLabels,
69
+ 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',
70
+ }
71
+
72
+ get payloadDivinerLimit() {
73
+ return this.config.payloadDivinerLimit ?? 1_000
74
+ }
75
+
76
+ protected static async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {
77
+ const indexes = payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema))
78
+ const hashes = indexes.map((index) => bw.payload_hashes?.[index])
79
+ const results = await archivist.get(hashes)
80
+ const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))
81
+ if (filteredResults.some((f) => f === undefined)) return undefined
82
+ const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]
83
+ return [bw, ...indexCandidates]
84
+ }
85
+
86
+ protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailStateToIndexCandidateDivinerResponse> {
87
+ // Retrieve the last state from what was passed in
88
+ const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)
89
+ // If there is no last state, start from the beginning
90
+ if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]
91
+ // Otherwise, get the last offset
92
+ const { offset } = lastState.state
93
+ // Get next batch of results starting from the offset
94
+ const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()
95
+ const query = new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })
96
+ .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas })
97
+ .build()
98
+ const batch = await boundWitnessDiviner.divine([query])
99
+ if (batch.length === 0) return [lastState]
100
+ // Get source data
101
+ const sourceArchivist = await this.getArchivistForStore()
102
+ const indexCandidates: IndexCandidate[] = (
103
+ await Promise.all(
104
+ batch.filter(isBoundWitness).map((bw) => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),
105
+ )
106
+ )
107
+ .filter(exists)
108
+ .flat()
109
+ const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }
110
+ return [nextState, ...indexCandidates]
111
+ }
112
+ /**
113
+ * Retrieves the archivist for the payloadStore
114
+ * @returns The archivist for the payloadStore
115
+ */
116
+ protected async getArchivistForStore() {
117
+ const name = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)
118
+ const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`)
119
+ return ArchivistWrapper.wrap(mod, this.account)
120
+ }
121
+
122
+ /**
123
+ * Retrieves the BoundWitness Diviner for the payloadStore
124
+ * @returns The BoundWitness Diviner for the payloadStore
125
+ */
126
+ protected async getBoundWitnessDivinerForStore() {
127
+ const name = assertEx(
128
+ this.config?.payloadStore?.boundWitnessDiviner,
129
+ () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,
130
+ )
131
+ const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.boundWitnessDiviner`)
132
+ return DivinerWrapper.wrap(mod, this.account)
133
+ }
134
+ }
@@ -0,0 +1,6 @@
1
+ import { DivinerParams } from '@xyo-network/diviner-model'
2
+ import { AnyConfigSchema } from '@xyo-network/module-model'
3
+
4
+ import { ImageThumbnailStateToIndexCandidateDivinerConfig } from './Config'
5
+
6
+ export type ImageThumbnailStateToIndexCandidateDivinerParams = DivinerParams<AnyConfigSchema<ImageThumbnailStateToIndexCandidateDivinerConfig>>
@@ -0,0 +1,4 @@
1
+ import { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'
2
+
3
+ export type ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`
4
+ export const ImageThumbnailStateToIndexCandidateDivinerSchema: ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`
@@ -0,0 +1,4 @@
1
+ export * from './Config'
2
+ export * from './Diviner'
3
+ export * from './Params'
4
+ export * from './Schema'
@@ -0,0 +1,56 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
3
+ "nodes": [
4
+ {
5
+ "config": {
6
+ "name": "DivinerTest",
7
+ "schema": "network.xyo.node.config"
8
+ },
9
+ "modules": {
10
+ "public": [
11
+ {
12
+ "config": {
13
+ "language": "javascript",
14
+ "name": "ImageThumbnailArchivist",
15
+ "schema": "network.xyo.archivist.config"
16
+ }
17
+ },
18
+ {
19
+ "config": {
20
+ "archivist": "ImageThumbnailArchivist",
21
+ "language": "javascript",
22
+ "name": "ImageThumbnailBoundWitnessDiviner",
23
+ "schema": "network.xyo.diviner.boundwitness.config"
24
+ }
25
+ },
26
+ {
27
+ "config": {
28
+ "archivist": "ImageThumbnailArchivist",
29
+ "language": "javascript",
30
+ "name": "ImageThumbnailPayloadDiviner",
31
+ "schema": "network.xyo.diviner.payload.config"
32
+ }
33
+ },
34
+
35
+ {
36
+ "config": {
37
+ "labels": {
38
+ "network.xyo.image.thumbnail": "diviner",
39
+ "network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
40
+ },
41
+ "language": "javascript",
42
+ "name": "ImageThumbnailStateToIndexCandidateDiviner",
43
+ "schema": "network.xyo.diviner.config",
44
+ "payloadStore": {
45
+ "archivist": "ImageThumbnailArchivist",
46
+ "boundWitnessDiviner": "ImageThumbnailBoundWitnessDiviner",
47
+ "payloadDiviner": "ImageThumbnailPayloadDiviner"
48
+ }
49
+ }
50
+ }
51
+ ]
52
+ }
53
+ }
54
+ ],
55
+ "schema": "network.xyo.manifest"
56
+ }
@@ -1 +1,8 @@
1
1
  export * from './Diviner'
2
+ export * from './ImageThumbnailDivinerLabels'
3
+ export * from './ImageThumbnailDivinerState'
4
+ export * from './ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner'
5
+ export * from './ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner'
6
+ export * from './ImageThumbnailQueryToImageThumbnailIndexQueryDiviner'
7
+ export * from './ImageThumbnailResultQuery'
8
+ export * from './ImageThumbnailStateToIndexCandidateDiviner'
@@ -0,0 +1,159 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
3
+ "nodes": [
4
+ {
5
+ "config": {
6
+ "name": "DivinerTest",
7
+ "schema": "network.xyo.node.config"
8
+ },
9
+ "modules": {
10
+ "public": [
11
+ {
12
+ "config": {
13
+ "language": "javascript",
14
+ "name": "AddressStateArchivist",
15
+ "schema": "network.xyo.archivist.config",
16
+ "storeQueries": false
17
+ }
18
+ },
19
+ {
20
+ "config": {
21
+ "archivist": "AddressStateArchivist",
22
+ "language": "javascript",
23
+ "name": "AddressStateBoundWitnessDiviner",
24
+ "schema": "network.xyo.diviner.boundwitness.config"
25
+ }
26
+ },
27
+ {
28
+ "config": {
29
+ "archivist": "AddressStateArchivist",
30
+ "language": "javascript",
31
+ "name": "AddressStatePayloadDiviner",
32
+ "schema": "network.xyo.diviner.payload.config"
33
+ }
34
+ },
35
+ {
36
+ "config": {
37
+ "language": "javascript",
38
+ "name": "ImageThumbnailArchivist",
39
+ "schema": "network.xyo.archivist.config"
40
+ }
41
+ },
42
+ {
43
+ "config": {
44
+ "archivist": "ImageThumbnailArchivist",
45
+ "language": "javascript",
46
+ "name": "ImageThumbnailBoundWitnessDiviner",
47
+ "schema": "network.xyo.diviner.boundwitness.config"
48
+ }
49
+ },
50
+ {
51
+ "config": {
52
+ "archivist": "ImageThumbnailArchivist",
53
+ "language": "javascript",
54
+ "name": "ImageThumbnailPayloadDiviner",
55
+ "schema": "network.xyo.diviner.payload.config"
56
+ }
57
+ },
58
+ {
59
+ "config": {
60
+ "language": "javascript",
61
+ "name": "ImageThumbnailDivinerIndexArchivist",
62
+ "schema": "network.xyo.archivist.config"
63
+ }
64
+ },
65
+ {
66
+ "config": {
67
+ "archivist": "ImageThumbnailDivinerIndexArchivist",
68
+ "language": "javascript",
69
+ "name": "ImageThumbnailDivinerIndexBoundWitnessDiviner",
70
+ "schema": "network.xyo.diviner.boundwitness.config"
71
+ }
72
+ },
73
+ {
74
+ "config": {
75
+ "archivist": "ImageThumbnailDivinerIndexArchivist",
76
+ "language": "javascript",
77
+ "name": "ImageThumbnailDivinerIndexPayloadDiviner",
78
+ "schema": "network.xyo.diviner.payload.config"
79
+ }
80
+ },
81
+ {
82
+ "config": {
83
+ "labels": {
84
+ "network.xyo.image.thumbnail": "diviner",
85
+ "network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
86
+ },
87
+ "language": "javascript",
88
+ "name": "ImageThumbnailStateToIndexCandidateDiviner",
89
+ "schema": "network.xyo.diviner.config",
90
+ "payloadStore": {
91
+ "archivist": "ImageThumbnailArchivist",
92
+ "boundWitnessDiviner": "ImageThumbnailBoundWitnessDiviner",
93
+ "payloadDiviner": "ImageThumbnailPayloadDiviner"
94
+ }
95
+ }
96
+ },
97
+ {
98
+ "config": {
99
+ "labels": {
100
+ "network.xyo.image.thumbnail": "diviner",
101
+ "network.xyo.diviner.stage": "indexCandidateToIndexDiviner"
102
+ },
103
+ "language": "javascript",
104
+ "name": "ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner",
105
+ "schema": "network.xyo.diviner.config"
106
+ }
107
+ },
108
+ {
109
+ "config": {
110
+ "labels": {
111
+ "network.xyo.image.thumbnail": "diviner",
112
+ "network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner"
113
+ },
114
+ "language": "javascript",
115
+ "name": "ImageThumbnailQueryToImageThumbnailIndexQueryDiviner",
116
+ "schema": "network.xyo.diviner.config"
117
+ }
118
+ },
119
+ {
120
+ "config": {
121
+ "labels": {
122
+ "network.xyo.image.thumbnail": "diviner",
123
+ "network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner"
124
+ },
125
+ "language": "javascript",
126
+ "name": "ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner",
127
+ "schema": "network.xyo.diviner.config"
128
+ }
129
+ },
130
+ {
131
+ "config": {
132
+ "indexingDivinerStages": {
133
+ "divinerQueryToIndexQueryDiviner": "ImageThumbnailQueryToImageThumbnailIndexQueryDiviner",
134
+ "indexCandidateToIndexDiviner": "ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner",
135
+ "indexQueryResponseToDivinerQueryResponseDiviner": "ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner",
136
+ "stateToIndexCandidateDiviner": "ImageThumbnailStateToIndexCandidateDiviner"
137
+ },
138
+ "indexStore": {
139
+ "archivist": "ImageThumbnailDivinerIndexArchivist",
140
+ "boundWitnessDiviner": "ImageThumbnailDivinerIndexBoundWitnessDiviner",
141
+ "payloadDiviner": "ImageThumbnailDivinerIndexPayloadDiviner"
142
+ },
143
+ "language": "javascript",
144
+ "name": "ImageThumbnailDiviner",
145
+ "pollFrequency": 1000,
146
+ "schema": "network.xyo.diviner.indexing.config",
147
+ "stateStore": {
148
+ "archivist": "AddressStateArchivist",
149
+ "boundWitnessDiviner": "AddressStateBoundWitnessDiviner",
150
+ "payloadDiviner": "AddressStatePayloadDiviner"
151
+ }
152
+ }
153
+ }
154
+ ]
155
+ }
156
+ }
157
+ ],
158
+ "schema": "network.xyo.manifest"
159
+ }