@xyo-network/diviner-image-thumbnail 5.3.1 → 5.3.3

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 (23) hide show
  1. package/dist/neutral/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts.map +1 -1
  2. package/dist/neutral/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts.map +1 -1
  3. package/dist/neutral/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts.map +1 -1
  4. package/dist/neutral/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.ts.map +1 -1
  5. package/dist/neutral/index.mjs +10 -8
  6. package/dist/neutral/index.mjs.map +1 -1
  7. package/package.json +48 -38
  8. package/src/Diviner/Diviner.ts +0 -8
  9. package/src/Diviner/ImageThumbnailDivinerLabels.ts +0 -24
  10. package/src/Diviner/ImageThumbnailDivinerState.ts +0 -6
  11. package/src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts +0 -82
  12. package/src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts +0 -67
  13. package/src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts +0 -57
  14. package/src/Diviner/ImageThumbnailResultQuery.ts +0 -20
  15. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.ts +0 -18
  16. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts +0 -156
  17. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Params.ts +0 -6
  18. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.ts +0 -6
  19. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/index.ts +0 -4
  20. package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/spec/ImageThumbnailStateToIndexCandidateDiviner.json +0 -55
  21. package/src/Diviner/index.ts +0 -8
  22. package/src/Diviner/spec/ImageThumbnailDivinerManifest.json +0 -159
  23. package/src/index.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,KAAK,EAEV,yBAAyB,EAE1B,MAAM,6CAA6C,CAAA;AAOpD,OAAO,KAAK,EACV,OAAO,EAAE,MAAM,EAAE,WAAW,EAC7B,MAAM,4BAA4B,CAAA;AAKnC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAGxF;;GAEG;AACH,qBAAa,wDAAyD,SAAQ,eAAe;IAC3F,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,gBAAyB,MAAM,EAAE,gCAAgC,CAIhE;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,WAAW,CAAC,yBAAyB,CAAC,EAAE,CAAC;CA2CpH"}
1
+ {"version":3,"file":"ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,KAAK,EAEV,yBAAyB,EAE1B,MAAM,6CAA6C,CAAA;AAMpD,OAAO,KAAK,EACV,OAAO,EAAE,MAAM,EAAE,WAAW,EAC7B,MAAM,4BAA4B,CAAA;AAMnC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAGxF;;GAEG;AACH,qBAAa,wDAAyD,SAAQ,eAAe;IAC3F,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,gBAAyB,MAAM,EAAE,gCAAgC,CAIhE;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,WAAW,CAAC,yBAAyB,CAAC,EAAE,CAAC;CA2CpH"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,6CAA6C,CAAA;AAOpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAGxF;;GAEG;AACH,qBAAa,oEAAqE,SAAQ,eAAe;IACvG,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,gBAAyB,MAAM,EAAE,gCAAgC,CAIhE;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;CAmClG"}
1
+ {"version":3,"file":"ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,6CAA6C,CAAA;AAMpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAIjE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAGxF;;GAEG;AACH,qBAAa,oEAAqE,SAAQ,eAAe;IACvG,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,gBAAyB,MAAM,EAAE,gCAAgC,CAIhE;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;CAmClG"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAK/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAExF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAE/E;;GAEG;AACH,qBAAa,oDAAqD,SAAQ,eAAe;IACvF,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,gBAAyB,MAAM,EAAE,gCAAgC,CAIhE;cAEwB,aAAa,CACpC,QAAQ,GAAE,OAAO,EAAO,GACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,WAAW,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;CA8BhJ"}
1
+ {"version":3,"file":"ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAI/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAIjE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAExF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAE/E;;GAEG;AACH,qBAAa,oDAAqD,SAAQ,eAAe;IACvF,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,gBAAyB,MAAM,EAAE,gCAAgC,CAIhE;cAEwB,aAAa,CACpC,QAAQ,GAAE,OAAO,EAAO,GACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,WAAW,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;CA8BhJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,8BAA8B,CAAA;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AAEjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAG/D,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAA;AAEzF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAElF,OAAO,KAAK,EAAE,gDAAgD,EAAE,MAAM,aAAa,CAAA;AAEnF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAA;AAEtE;;GAEG;AACH,MAAM,MAAM,kDAAkD,GAAG;IAC/D;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,0BAA0B,CAAC;IAClD;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AA0BD;;GAEG;AACH,qBAAa,0CAA0C,CACrD,OAAO,SAAS,gDAAgD,GAAG,gDAAgD,CACnH,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAmF;IACnI,gBAAyB,mBAAmB,EAAE,MAAM,CAAyD;IAC7G,gBAAyB,MAAM,EAAE,gCAAgC,CAIhE;IAED,IAAI,mBAAmB,WAEtB;qBAEsB,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;cAU9G,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,kDAAkD,CAAC;IAoC7H;;;OAGG;cACa,oBAAoB;IAMpC;;;OAGG;cACa,8BAA8B;CAQ/C"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,8BAA8B,CAAA;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AAEjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAG/D,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAA;AAEzF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAElF,OAAO,KAAK,EAAE,gDAAgD,EAAE,MAAM,aAAa,CAAA;AAEnF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAA;AAEtE;;GAEG;AACH,MAAM,MAAM,kDAAkD,GAAG;IAC/D;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,0BAA0B,CAAC;IAClD;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AA0BD;;GAEG;AACH,qBAAa,0CAA0C,CACrD,OAAO,SAAS,gDAAgD,GAAG,gDAAgD,CACnH,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAmF;IACnI,gBAAyB,mBAAmB,EAAE,MAAM,CAAyD;IAC7G,gBAAyB,MAAM,EAAE,gCAAgC,CAIhE;IAED,IAAI,mBAAmB,WAEtB;qBAEsB,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;cAU9G,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,kDAAkD,CAAC;IAoC7H;;;OAGG;cACa,oBAAoB;IAMpC;;;OAGG;cACa,8BAA8B;CAQ/C"}
@@ -18,7 +18,7 @@ import {
18
18
  ImageThumbnailSchema,
19
19
  isImageThumbnail
20
20
  } from "@xyo-network/image-thumbnail-payload-plugin";
21
- import { PayloadBuilder } from "@xyo-network/payload-builder";
21
+ import { PayloadBuilder } from "@xyo-network/sdk-js";
22
22
  import { UrlSchema } from "@xyo-network/url-payload-plugin";
23
23
  import { isTimestamp, TimestampSchema } from "@xyo-network/witness-timestamp";
24
24
  var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends AbstractDiviner {
@@ -74,7 +74,7 @@ var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends Abs
74
74
  };
75
75
 
76
76
  // src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts
77
- import { exists } from "@xylabs/exists";
77
+ import { exists } from "@xylabs/sdk-js";
78
78
  import { AbstractDiviner as AbstractDiviner2 } from "@xyo-network/diviner-abstract";
79
79
  import { DivinerConfigSchema as DivinerConfigSchema2 } from "@xyo-network/diviner-model";
80
80
  import {
@@ -82,7 +82,7 @@ import {
82
82
  isImageThumbnailDivinerQuery,
83
83
  isImageThumbnailResultIndexWithSources
84
84
  } from "@xyo-network/image-thumbnail-payload-plugin";
85
- import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
85
+ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/sdk-js";
86
86
  import { UrlSchema as UrlSchema2 } from "@xyo-network/url-payload-plugin";
87
87
  var ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner = class extends AbstractDiviner2 {
88
88
  static configSchemas = [...super.configSchemas, DivinerConfigSchema2];
@@ -129,7 +129,7 @@ import { AbstractDiviner as AbstractDiviner3 } from "@xyo-network/diviner-abstra
129
129
  import { DivinerConfigSchema as DivinerConfigSchema3 } from "@xyo-network/diviner-model";
130
130
  import { PayloadDivinerQuerySchema } from "@xyo-network/diviner-payload-model";
131
131
  import { isImageThumbnailDivinerQuery as isImageThumbnailDivinerQuery2 } from "@xyo-network/image-thumbnail-payload-plugin";
132
- import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
132
+ import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/sdk-js";
133
133
  import { UrlSchema as UrlSchema3 } from "@xyo-network/url-payload-plugin";
134
134
  var ImageThumbnailQueryToImageThumbnailIndexQueryDiviner = class extends AbstractDiviner3 {
135
135
  static configSchemas = [...super.configSchemas, DivinerConfigSchema3];
@@ -188,10 +188,12 @@ var ImageThumbnailStateToIndexCandidateDivinerSchema = asSchema(`${ImageThumbnai
188
188
  var ImageThumbnailStateToIndexCandidateDivinerConfigSchema = asSchema2(`${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`, true);
189
189
 
190
190
  // src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts
191
- import { filterAs } from "@xylabs/array";
192
- import { assertEx } from "@xylabs/assert";
193
- import { exists as exists2 } from "@xylabs/exists";
194
- import { AsObjectFactory } from "@xylabs/object";
191
+ import {
192
+ AsObjectFactory,
193
+ assertEx,
194
+ exists as exists2,
195
+ filterAs
196
+ } from "@xylabs/sdk-js";
195
197
  import { ArchivistWrapper } from "@xyo-network/archivist-wrapper";
196
198
  import { asBoundWitness, isBoundWitness as isBoundWitness2 } from "@xyo-network/boundwitness-model";
197
199
  import { payloadSchemasContainsAll } from "@xyo-network/boundwitness-validator";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../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/Config.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing'\nimport type { AttachableDivinerInstance } from '@xyo-network/diviner-model'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner implements AttachableDivinerInstance {\n static override readonly labels: ImageThumbnailDivinerLabels = { ...super.labels, ...ImageThumbnailDivinerLabels }\n}\n","import type { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'\nimport type { 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 = { 'network.xyo.image.thumbnail': 'diviner' }\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 type { Hash } from '@xylabs/hex'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport type {\n ImageThumbnail,\n ImageThumbnailResultIndex,\n ImageThumbnailResultIndexFields,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultIndexSchema,\n ImageThumbnailSchema,\n isImageThumbnail,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Payload, Schema, WithSources,\n} from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\nimport type { TimeStamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<WithSources<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 > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {\n const payloadDictionary = await PayloadBuilder.toDataHashMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const tuples: [BoundWitness, ImageThumbnail, TimeStamp][] = bws.reduce<[BoundWitness, ImageThumbnail, TimeStamp][]>(\n (acc, curr) => {\n const imageThumbnailIndex = curr.payload_schemas?.indexOf(ImageThumbnailSchema)\n const timestampIndex = curr.payload_schemas?.indexOf(TimestampSchema)\n const imageThumbnailHash = curr.payload_hashes?.[imageThumbnailIndex]\n const timestampHash = curr.payload_hashes?.[timestampIndex]\n const imageThumbnailPayload = [payloadDictionary[imageThumbnailHash]].find(isImageThumbnail) as ImageThumbnail | undefined\n const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp) as TimeStamp\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, http } = imageThumbnailPayload\n const { timestamp } = timestampPayload\n const { status } = http ?? {}\n const success = !!imageThumbnailPayload.url // Call anything with a thumbnail url a success\n const $sources: Hash[] = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload])\n const urlPayload = { schema: UrlSchema, url }\n const key: Hash = await PayloadBuilder.dataHash(urlPayload)\n const fields: ImageThumbnailResultIndexFields = {\n key, success, timestamp,\n }\n if (status) fields.status = status\n const result = new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({ schema: ImageThumbnailResultIndexSchema })\n .fields({ ...fields }).meta({ $sources })\n .build()\n return [result]\n }),\n )\n return indexes.flat()\n }\n return []\n }\n}\n","import { exists } from '@xylabs/exists'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport type {\n ImageThumbnailResult,\n ImageThumbnailResultFields,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultSchema,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResultIndexWithSources,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\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(isImageThumbnailResultIndexWithSources)\n\n // If we have operands\n if (imageThumbnailDivinerQueries.length > 0 && imageThumbnailResultIndexes.length > 0) {\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<Omit<ImageThumbnailResult, 'timestamp' | 'success' | 'sources'>>({ schema: UrlSchema })\n .fields({ url })\n .build()\n const key = await PayloadBuilder.dataHash(urlPayload)\n return [key, url] as const\n }),\n ),\n )\n // Map the indexes to responses using the dictionary\n return imageThumbnailResultIndexes.map((imageThumbnailResultIndex) => {\n const {\n\n key, schema, $sources, ...commonFields\n } = imageThumbnailResultIndex\n const url = keyToUrlDictionary?.[key]\n if (url) {\n const fields: ImageThumbnailResultFields = { ...commonFields, url }\n return new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema }).fields(fields).meta({ $sources }).build()\n }\n }).filter(exists)\n }\n return []\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\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 type { Payload, Schema } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery.ts'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n protected override async divineHandler(\n payloads: Payload[] = [],\n ): Promise<Omit<Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>, 'timestamp'>[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const {\n limit: payloadLimit, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url,\n } = query\n const limit = payloadLimit ?? 1\n const order = payloadOrder ?? 'desc'\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadBuilder.dataHash(urlPayload)\n const fields: Omit<ImageThumbnailResultQuery, 'schema' | 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>> = {\n key,\n limit,\n order,\n }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n return new PayloadBuilder<\n Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>\n >({ schema: PayloadDivinerQuerySchema })\n .fields(fields)\n .build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { 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 type { DivinerConfig } from '@xyo-network/diviner-model'\nimport type { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { asSchema } from '@xyo-network/payload-model'\n\nimport { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema.ts'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = typeof ImageThumbnailStateToIndexCandidateDivinerConfigSchema\nexport const ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n = asSchema(`${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`, true)\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 { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { asSchema } from '@xyo-network/payload-model'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerSchema = typeof ImageThumbnailStateToIndexCandidateDivinerSchema\nexport const ImageThumbnailStateToIndexCandidateDivinerSchema\n = asSchema(`${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`, true)\n","import { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { AsObjectFactory } from '@xylabs/object'\nimport type { ArchivistInstance, ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { asBoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { payloadSchemasContainsAll } from '@xyo-network/boundwitness-validator'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport type { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport type { ModuleState } from '@xyo-network/module-model'\nimport { isModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport { SequenceConstants } from '@xyo-network/payload-model'\nimport type { TimeStamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState.ts'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config.ts'\nimport type { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params.ts'\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\nconst isIndexCandidate = (x?: unknown | null): x is IndexCandidate => {\n return indexCandidateIdentityFunctions.map(is => is(x)).some(Boolean)\n}\nconst asIndexCandidate = AsObjectFactory.create(isIndexCandidate)\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 readonly configSchemas: Schema[] = [...super.configSchemas, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n protected static async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = payload_schemas.map(schema => bw.payload_schemas?.indexOf(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.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filterAs(filteredResults, asIndexCandidate)\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 ?? { schema: ModuleStateSchema, state: { cursor: SequenceConstants.minLocalSequence } }\n\n // Get the last cursor\n const cursor = lastState?.state?.cursor\n // Get the archivist for the store\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n\n // Get the next batch of results\n const nextOffset: ArchivistNextOptions = { limit: this.payloadDivinerLimit, order }\n // Only use the cursor if it's a valid offset\n if (cursor !== SequenceConstants.minLocalSequence) nextOffset.cursor = cursor\n // Get next batch of results starting from the offset\n const next = await sourceArchivist.next(nextOffset)\n if (next.length === 0) return [lastState]\n\n const batch = filterAs(next, asBoundWitness)\n .filter(exists)\n .filter(bw => payloadSchemasContainsAll(bw, payload_schemas))\n // Get source data\n const indexCandidates: IndexCandidate[] = (await Promise.all(\n batch\n .filter(isBoundWitness)\n .map(bw => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n ))\n .filter(exists)\n .flat()\n const nextCursor = assertEx(next.at(-1)?._sequence, () => `${moduleName}: Expected next to have a sequence`)\n const nextState: ModuleState<ImageThumbnailDivinerState> = { schema: ModuleStateSchema, state: { ...lastState.state, cursor: nextCursor } }\n return [nextState, ...indexCandidates]\n }\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":["AbstractDiviner","DivinerConfigSchema","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","isImageThumbnailDivinerQuery","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","isImageThumbnailDivinerQuery","order","UrlSchema","PayloadBuilder","PayloadDivinerQuerySchema","asSchema","asSchema","exists","isBoundWitness","AbstractDiviner","ImageThumbnailSchema","isImageThumbnail","isTimestamp","TimestampSchema","ImageThumbnailSchema","TimestampSchema","isImageThumbnail","isTimestamp","AbstractDiviner","exists","isBoundWitness"]}
1
+ {"version":3,"sources":["../../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/Config.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing'\nimport type { AttachableDivinerInstance } from '@xyo-network/diviner-model'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner implements AttachableDivinerInstance {\n static override readonly labels: ImageThumbnailDivinerLabels = { ...super.labels, ...ImageThumbnailDivinerLabels }\n}\n","import type { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'\nimport type { 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 = { 'network.xyo.image.thumbnail': 'diviner' }\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 type { Hash } from '@xylabs/sdk-js'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport type {\n ImageThumbnail,\n ImageThumbnailResultIndex,\n ImageThumbnailResultIndexFields,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultIndexSchema,\n ImageThumbnailSchema,\n isImageThumbnail,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport type {\n Payload, Schema, WithSources,\n} from '@xyo-network/payload-model'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\nimport type { TimeStamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<WithSources<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 > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {\n const payloadDictionary = await PayloadBuilder.toDataHashMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const tuples: [BoundWitness, ImageThumbnail, TimeStamp][] = bws.reduce<[BoundWitness, ImageThumbnail, TimeStamp][]>(\n (acc, curr) => {\n const imageThumbnailIndex = curr.payload_schemas?.indexOf(ImageThumbnailSchema)\n const timestampIndex = curr.payload_schemas?.indexOf(TimestampSchema)\n const imageThumbnailHash = curr.payload_hashes?.[imageThumbnailIndex]\n const timestampHash = curr.payload_hashes?.[timestampIndex]\n const imageThumbnailPayload = [payloadDictionary[imageThumbnailHash]].find(isImageThumbnail) as ImageThumbnail | undefined\n const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp) as TimeStamp\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, http } = imageThumbnailPayload\n const { timestamp } = timestampPayload\n const { status } = http ?? {}\n const success = !!imageThumbnailPayload.url // Call anything with a thumbnail url a success\n const $sources: Hash[] = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload])\n const urlPayload = { schema: UrlSchema, url }\n const key: Hash = await PayloadBuilder.dataHash(urlPayload)\n const fields: ImageThumbnailResultIndexFields = {\n key, success, timestamp,\n }\n if (status) fields.status = status\n const result = new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({ schema: ImageThumbnailResultIndexSchema })\n .fields({ ...fields }).meta({ $sources })\n .build()\n return [result]\n }),\n )\n return indexes.flat()\n }\n return []\n }\n}\n","import { exists } from '@xylabs/sdk-js'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport type {\n ImageThumbnailResult,\n ImageThumbnailResultFields,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultSchema,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResultIndexWithSources,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\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(isImageThumbnailResultIndexWithSources)\n\n // If we have operands\n if (imageThumbnailDivinerQueries.length > 0 && imageThumbnailResultIndexes.length > 0) {\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<Omit<ImageThumbnailResult, 'timestamp' | 'success' | 'sources'>>({ schema: UrlSchema })\n .fields({ url })\n .build()\n const key = await PayloadBuilder.dataHash(urlPayload)\n return [key, url] as const\n }),\n ),\n )\n // Map the indexes to responses using the dictionary\n return imageThumbnailResultIndexes.map((imageThumbnailResultIndex) => {\n const {\n\n key, schema, $sources, ...commonFields\n } = imageThumbnailResultIndex\n const url = keyToUrlDictionary?.[key]\n if (url) {\n const fields: ImageThumbnailResultFields = { ...commonFields, url }\n return new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema }).fields(fields).meta({ $sources }).build()\n }\n }).filter(exists)\n }\n return []\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\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 type { Payload, Schema } from '@xyo-network/payload-model'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery.ts'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n protected override async divineHandler(\n payloads: Payload[] = [],\n ): Promise<Omit<Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>, 'timestamp'>[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const {\n limit: payloadLimit, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url,\n } = query\n const limit = payloadLimit ?? 1\n const order = payloadOrder ?? 'desc'\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadBuilder.dataHash(urlPayload)\n const fields: Omit<ImageThumbnailResultQuery, 'schema' | 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>> = {\n key,\n limit,\n order,\n }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n return new PayloadBuilder<\n Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>\n >({ schema: PayloadDivinerQuerySchema })\n .fields(fields)\n .build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { 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 type { DivinerConfig } from '@xyo-network/diviner-model'\nimport type { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { asSchema } from '@xyo-network/payload-model'\n\nimport { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema.ts'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = typeof ImageThumbnailStateToIndexCandidateDivinerConfigSchema\nexport const ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n = asSchema(`${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`, true)\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 { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { asSchema } from '@xyo-network/payload-model'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerSchema = typeof ImageThumbnailStateToIndexCandidateDivinerSchema\nexport const ImageThumbnailStateToIndexCandidateDivinerSchema\n = asSchema(`${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`, true)\n","import {\n AsObjectFactory, assertEx, exists, filterAs,\n} from '@xylabs/sdk-js'\nimport type { ArchivistInstance, ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { asBoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { payloadSchemasContainsAll } from '@xyo-network/boundwitness-validator'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport type { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport type { ModuleState } from '@xyo-network/module-model'\nimport { isModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport { SequenceConstants } from '@xyo-network/payload-model'\nimport type { TimeStamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState.ts'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config.ts'\nimport type { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params.ts'\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\nconst isIndexCandidate = (x?: unknown | null): x is IndexCandidate => {\n return indexCandidateIdentityFunctions.map(is => is(x)).some(Boolean)\n}\nconst asIndexCandidate = AsObjectFactory.create(isIndexCandidate)\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 readonly configSchemas: Schema[] = [...super.configSchemas, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n protected static async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = payload_schemas.map(schema => bw.payload_schemas?.indexOf(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.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filterAs(filteredResults, asIndexCandidate)\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 ?? { schema: ModuleStateSchema, state: { cursor: SequenceConstants.minLocalSequence } }\n\n // Get the last cursor\n const cursor = lastState?.state?.cursor\n // Get the archivist for the store\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n\n // Get the next batch of results\n const nextOffset: ArchivistNextOptions = { limit: this.payloadDivinerLimit, order }\n // Only use the cursor if it's a valid offset\n if (cursor !== SequenceConstants.minLocalSequence) nextOffset.cursor = cursor\n // Get next batch of results starting from the offset\n const next = await sourceArchivist.next(nextOffset)\n if (next.length === 0) return [lastState]\n\n const batch = filterAs(next, asBoundWitness)\n .filter(exists)\n .filter(bw => payloadSchemasContainsAll(bw, payload_schemas))\n // Get source data\n const indexCandidates: IndexCandidate[] = (await Promise.all(\n batch\n .filter(isBoundWitness)\n .map(bw => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n ))\n .filter(exists)\n .flat()\n const nextCursor = assertEx(next.at(-1)?._sequence, () => `${moduleName}: Expected next to have a sequence`)\n const nextState: ModuleState<ImageThumbnailDivinerState> = { schema: ModuleStateSchema, state: { ...lastState.state, cursor: nextCursor } }\n return [nextState, ...indexCandidates]\n }\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":["AbstractDiviner","DivinerConfigSchema","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","isImageThumbnailDivinerQuery","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","isImageThumbnailDivinerQuery","order","UrlSchema","PayloadBuilder","PayloadDivinerQuerySchema","asSchema","asSchema","exists","isBoundWitness","AbstractDiviner","ImageThumbnailSchema","isImageThumbnail","isTimestamp","TimestampSchema","ImageThumbnailSchema","TimestampSchema","isImageThumbnail","isTimestamp","AbstractDiviner","exists","isBoundWitness"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/diviner-image-thumbnail",
3
- "version": "5.3.1",
3
+ "version": "5.3.3",
4
4
  "description": "Typescript/Javascript Plugins for XYO Platform",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -30,48 +30,58 @@
30
30
  "types": "dist/neutral/index.d.ts",
31
31
  "files": [
32
32
  "dist",
33
- "src",
34
- "!**/*.bench.*",
35
- "!**/*.spec.*",
36
- "!**/*.test.*"
33
+ "README.md"
37
34
  ],
38
35
  "dependencies": {
39
- "@xylabs/array": "~5.0.64",
40
- "@xylabs/assert": "~5.0.64",
41
- "@xylabs/exists": "~5.0.64",
42
- "@xylabs/object": "~5.0.64",
43
- "@xyo-network/archivist-model": "~5.3.2",
44
- "@xyo-network/archivist-wrapper": "~5.3.2",
45
- "@xyo-network/boundwitness-model": "~5.3.2",
46
- "@xyo-network/boundwitness-validator": "~5.3.2",
47
- "@xyo-network/diviner-abstract": "~5.3.2",
48
- "@xyo-network/diviner-indexing": "~5.3.2",
49
- "@xyo-network/diviner-model": "~5.3.2",
50
- "@xyo-network/diviner-payload-model": "~5.3.2",
51
- "@xyo-network/diviner-wrapper": "~5.3.2",
52
- "@xyo-network/image-thumbnail-payload-plugin": "5.3.1",
53
- "@xyo-network/module-model": "~5.3.2",
54
- "@xyo-network/payload-builder": "~5.3.2",
55
- "@xyo-network/payload-model": "~5.3.2",
56
- "@xyo-network/url-payload-plugin": "5.3.1",
57
- "@xyo-network/witness-timestamp": "~5.3.2"
36
+ "@xyo-network/image-thumbnail-payload-plugin": "workspace:^",
37
+ "@xyo-network/url-payload-plugin": "workspace:^"
58
38
  },
59
39
  "devDependencies": {
60
- "@xylabs/delay": "~5.0.64",
61
- "@xylabs/hex": "~5.0.64",
62
- "@xylabs/ts-scripts-yarn3": "~7.3.2",
63
- "@xylabs/tsconfig": "~7.3.2",
64
- "@xylabs/vitest-extended": "~5.0.64",
65
- "@xyo-network/archivist-memory": "~5.3.2",
66
- "@xyo-network/boundwitness-builder": "~5.3.2",
67
- "@xyo-network/diviner-boundwitness-memory": "~5.3.2",
68
- "@xyo-network/diviner-payload-generic": "~5.3.2",
69
- "@xyo-network/manifest": "~5.3.2",
70
- "@xyo-network/module-factory-locator": "~5.3.2",
71
- "@xyo-network/node-memory": "~5.3.2",
72
- "@xyo-network/wallet": "~5.3.2",
40
+ "@xylabs/sdk-js": "^5.0.90",
41
+ "@xylabs/ts-scripts-common": "~7.5.10",
42
+ "@xylabs/ts-scripts-yarn3": "~7.5.10",
43
+ "@xylabs/tsconfig": "~7.5.10",
44
+ "@xylabs/vitest-extended": "~5.0.90",
45
+ "@xyo-network/archivist-memory": "~5.3.5",
46
+ "@xyo-network/archivist-model": "~5.3.5",
47
+ "@xyo-network/archivist-wrapper": "~5.3.5",
48
+ "@xyo-network/boundwitness-builder": "~5.3.5",
49
+ "@xyo-network/boundwitness-model": "~5.3.5",
50
+ "@xyo-network/boundwitness-validator": "~5.3.5",
51
+ "@xyo-network/diviner-abstract": "~5.3.5",
52
+ "@xyo-network/diviner-boundwitness-memory": "~5.3.5",
53
+ "@xyo-network/diviner-indexing": "~5.3.5",
54
+ "@xyo-network/diviner-model": "~5.3.5",
55
+ "@xyo-network/diviner-payload-generic": "~5.3.5",
56
+ "@xyo-network/diviner-payload-model": "~5.3.5",
57
+ "@xyo-network/diviner-wrapper": "~5.3.5",
58
+ "@xyo-network/module-factory-locator": "~5.3.5",
59
+ "@xyo-network/module-model": "~5.3.5",
60
+ "@xyo-network/node-memory": "~5.3.5",
61
+ "@xyo-network/payload-model": "~5.3.5",
62
+ "@xyo-network/sdk-js": "~5.3.5",
63
+ "@xyo-network/wallet": "~5.3.5",
64
+ "@xyo-network/witness-timestamp": "~5.3.5",
73
65
  "typescript": "~5.9.3",
74
- "vitest": "~4.0.18"
66
+ "vitest": "~4.1.2",
67
+ "zod": "^4.3.6"
68
+ },
69
+ "peerDependencies": {
70
+ "@xylabs/sdk-js": "^5",
71
+ "@xyo-network/archivist-model": "^5",
72
+ "@xyo-network/archivist-wrapper": "^5",
73
+ "@xyo-network/boundwitness-model": "^5",
74
+ "@xyo-network/boundwitness-validator": "^5",
75
+ "@xyo-network/diviner-abstract": "^5",
76
+ "@xyo-network/diviner-indexing": "^5",
77
+ "@xyo-network/diviner-model": "^5",
78
+ "@xyo-network/diviner-payload-model": "^5",
79
+ "@xyo-network/diviner-wrapper": "^5",
80
+ "@xyo-network/module-model": "^5",
81
+ "@xyo-network/payload-model": "^5",
82
+ "@xyo-network/sdk-js": "^5",
83
+ "@xyo-network/witness-timestamp": "^5",
84
+ "zod": "^4"
75
85
  },
76
86
  "publishConfig": {
77
87
  "access": "public"
@@ -1,8 +0,0 @@
1
- import { IndexingDiviner } from '@xyo-network/diviner-indexing'
2
- import type { AttachableDivinerInstance } from '@xyo-network/diviner-model'
3
-
4
- import { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'
5
-
6
- export class ImageThumbnailDiviner extends IndexingDiviner implements AttachableDivinerInstance {
7
- static override readonly labels: ImageThumbnailDivinerLabels = { ...super.labels, ...ImageThumbnailDivinerLabels }
8
- }
@@ -1,24 +0,0 @@
1
- import type { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'
2
- import type { Labels } from '@xyo-network/module-model'
3
-
4
- /**
5
- * Labels for Image Thumbnail Diviner components
6
- */
7
- export interface ImageThumbnailDivinerLabels extends Labels {
8
- 'network.xyo.image.thumbnail': 'diviner'
9
- }
10
-
11
- /**
12
- * Labels for Image Thumbnail Diviner components
13
- */
14
- export const ImageThumbnailDivinerLabels: ImageThumbnailDivinerLabels = { 'network.xyo.image.thumbnail': 'diviner' }
15
-
16
- /**
17
- * Labels for Image Thumbnail Diviner Stage Diviners
18
- */
19
- export type ImageThumbnailDivinerStageLabels = ImageThumbnailDivinerLabels & {
20
- /**
21
- * Labels for the stage of the Image Thumbnail Diviner Stage Diviner
22
- */
23
- [key in DivinerStageSchema]: IndexingDivinerStage
24
- }
@@ -1,6 +0,0 @@
1
- import type { StateDictionary } from '@xyo-network/module-model'
2
- import type { Sequence } from '@xyo-network/payload-model'
3
-
4
- export type ImageThumbnailDivinerState = StateDictionary & {
5
- cursor: Sequence
6
- }
@@ -1,82 +0,0 @@
1
- import type { Hash } from '@xylabs/hex'
2
- import type { BoundWitness } from '@xyo-network/boundwitness-model'
3
- import { isBoundWitness } from '@xyo-network/boundwitness-model'
4
- import { AbstractDiviner } from '@xyo-network/diviner-abstract'
5
- import { DivinerConfigSchema } from '@xyo-network/diviner-model'
6
- import type {
7
- ImageThumbnail,
8
- ImageThumbnailResultIndex,
9
- ImageThumbnailResultIndexFields,
10
- } from '@xyo-network/image-thumbnail-payload-plugin'
11
- import {
12
- ImageThumbnailResultIndexSchema,
13
- ImageThumbnailSchema,
14
- isImageThumbnail,
15
- } from '@xyo-network/image-thumbnail-payload-plugin'
16
- import { PayloadBuilder } from '@xyo-network/payload-builder'
17
- import type {
18
- Payload, Schema, WithSources,
19
- } from '@xyo-network/payload-model'
20
- import { UrlSchema } from '@xyo-network/url-payload-plugin'
21
- import type { TimeStamp } from '@xyo-network/witness-timestamp'
22
- import { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'
23
-
24
- import type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'
25
- import { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'
26
-
27
- /**
28
- * Transforms candidates for image thumbnail indexing into their indexed representation
29
- */
30
- export class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {
31
- static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]
32
- static override readonly defaultConfigSchema: Schema = DivinerConfigSchema
33
- static override readonly labels: ImageThumbnailDivinerStageLabels = {
34
- ...super.labels,
35
- ...ImageThumbnailDivinerLabels,
36
- 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',
37
- }
38
-
39
- protected override async divineHandler(payloads: Payload[] = []): Promise<WithSources<ImageThumbnailResultIndex>[]> {
40
- const bws: BoundWitness[] = payloads.filter(isBoundWitness)
41
- const imageThumbnailPayloads: ImageThumbnail[] = payloads.filter(isImageThumbnail)
42
- const timestampPayloads: TimeStamp[] = payloads.filter(isTimestamp)
43
- if (bws.length > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {
44
- const payloadDictionary = await PayloadBuilder.toDataHashMap(payloads)
45
- // eslint-disable-next-line unicorn/no-array-reduce
46
- const tuples: [BoundWitness, ImageThumbnail, TimeStamp][] = bws.reduce<[BoundWitness, ImageThumbnail, TimeStamp][]>(
47
- (acc, curr) => {
48
- const imageThumbnailIndex = curr.payload_schemas?.indexOf(ImageThumbnailSchema)
49
- const timestampIndex = curr.payload_schemas?.indexOf(TimestampSchema)
50
- const imageThumbnailHash = curr.payload_hashes?.[imageThumbnailIndex]
51
- const timestampHash = curr.payload_hashes?.[timestampIndex]
52
- const imageThumbnailPayload = [payloadDictionary[imageThumbnailHash]].find(isImageThumbnail) as ImageThumbnail | undefined
53
- const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp) as TimeStamp
54
- if (imageThumbnailPayload && timestampPayload) acc.push([curr, imageThumbnailPayload, timestampPayload])
55
- return acc
56
- },
57
- [] as [BoundWitness, ImageThumbnail, TimeStamp][],
58
- )
59
- const indexes = await Promise.all(
60
- tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {
61
- const { sourceUrl: url, http } = imageThumbnailPayload
62
- const { timestamp } = timestampPayload
63
- const { status } = http ?? {}
64
- const success = !!imageThumbnailPayload.url // Call anything with a thumbnail url a success
65
- const $sources: Hash[] = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload])
66
- const urlPayload = { schema: UrlSchema, url }
67
- const key: Hash = await PayloadBuilder.dataHash(urlPayload)
68
- const fields: ImageThumbnailResultIndexFields = {
69
- key, success, timestamp,
70
- }
71
- if (status) fields.status = status
72
- const result = new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({ schema: ImageThumbnailResultIndexSchema })
73
- .fields({ ...fields }).meta({ $sources })
74
- .build()
75
- return [result]
76
- }),
77
- )
78
- return indexes.flat()
79
- }
80
- return []
81
- }
82
- }
@@ -1,67 +0,0 @@
1
- import { exists } from '@xylabs/exists'
2
- import { AbstractDiviner } from '@xyo-network/diviner-abstract'
3
- import { DivinerConfigSchema } from '@xyo-network/diviner-model'
4
- import type {
5
- ImageThumbnailResult,
6
- ImageThumbnailResultFields,
7
- } from '@xyo-network/image-thumbnail-payload-plugin'
8
- import {
9
- ImageThumbnailResultSchema,
10
- isImageThumbnailDivinerQuery,
11
- isImageThumbnailResultIndexWithSources,
12
- } from '@xyo-network/image-thumbnail-payload-plugin'
13
- import { PayloadBuilder } from '@xyo-network/payload-builder'
14
- import type { Payload, Schema } from '@xyo-network/payload-model'
15
- import { UrlSchema } from '@xyo-network/url-payload-plugin'
16
-
17
- import type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'
18
- import { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'
19
-
20
- /**
21
- * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response
22
- */
23
- export class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {
24
- static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]
25
- static override readonly defaultConfigSchema: Schema = DivinerConfigSchema
26
- static override readonly labels: ImageThumbnailDivinerStageLabels = {
27
- ...super.labels,
28
- ...ImageThumbnailDivinerLabels,
29
- 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',
30
- }
31
-
32
- protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {
33
- // Filter out the two operands
34
- const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)
35
- const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndexWithSources)
36
-
37
- // If we have operands
38
- if (imageThumbnailDivinerQueries.length > 0 && imageThumbnailResultIndexes.length > 0) {
39
- // Create a dictionary to translate index keys to the urls that represent them
40
- const keyToUrlDictionary = Object.fromEntries(
41
- await Promise.all(
42
- imageThumbnailDivinerQueries.map(async (imageThumbnailDivinerQuery) => {
43
- const { url } = imageThumbnailDivinerQuery
44
- const urlPayload = new PayloadBuilder<Omit<ImageThumbnailResult, 'timestamp' | 'success' | 'sources'>>({ schema: UrlSchema })
45
- .fields({ url })
46
- .build()
47
- const key = await PayloadBuilder.dataHash(urlPayload)
48
- return [key, url] as const
49
- }),
50
- ),
51
- )
52
- // Map the indexes to responses using the dictionary
53
- return imageThumbnailResultIndexes.map((imageThumbnailResultIndex) => {
54
- const {
55
-
56
- key, schema, $sources, ...commonFields
57
- } = imageThumbnailResultIndex
58
- const url = keyToUrlDictionary?.[key]
59
- if (url) {
60
- const fields: ImageThumbnailResultFields = { ...commonFields, url }
61
- return new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema }).fields(fields).meta({ $sources }).build()
62
- }
63
- }).filter(exists)
64
- }
65
- return []
66
- }
67
- }
@@ -1,57 +0,0 @@
1
- import { AbstractDiviner } from '@xyo-network/diviner-abstract'
2
- import { DivinerConfigSchema } from '@xyo-network/diviner-model'
3
- import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'
4
- import { isImageThumbnailDivinerQuery } from '@xyo-network/image-thumbnail-payload-plugin'
5
- import { PayloadBuilder } from '@xyo-network/payload-builder'
6
- import type { Payload, Schema } from '@xyo-network/payload-model'
7
- import { UrlSchema } from '@xyo-network/url-payload-plugin'
8
-
9
- import type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'
10
- import { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'
11
- import type { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery.ts'
12
-
13
- /**
14
- * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery
15
- */
16
- export class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {
17
- static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]
18
- static override readonly defaultConfigSchema: Schema = DivinerConfigSchema
19
- static override readonly labels: ImageThumbnailDivinerStageLabels = {
20
- ...super.labels,
21
- ...ImageThumbnailDivinerLabels,
22
- 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',
23
- }
24
-
25
- protected override async divineHandler(
26
- payloads: Payload[] = [],
27
- ): Promise<Omit<Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>, 'timestamp'>[]> {
28
- const queries = payloads.filter(isImageThumbnailDivinerQuery)
29
- if (queries.length > 0) {
30
- const results = await Promise.all(
31
- queries.map(async (query) => {
32
- const {
33
- limit: payloadLimit, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url,
34
- } = query
35
- const limit = payloadLimit ?? 1
36
- const order = payloadOrder ?? 'desc'
37
- const urlPayload = { schema: UrlSchema, url }
38
- const key = await PayloadBuilder.dataHash(urlPayload)
39
- const fields: Omit<ImageThumbnailResultQuery, 'schema' | 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>> = {
40
- key,
41
- limit,
42
- order,
43
- }
44
- if (payloadSuccess !== undefined) fields.success = payloadSuccess
45
- if (payloadStatus !== undefined) fields.status = payloadStatus
46
- return new PayloadBuilder<
47
- Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>
48
- >({ schema: PayloadDivinerQuerySchema })
49
- .fields(fields)
50
- .build()
51
- }),
52
- )
53
- return results
54
- }
55
- return []
56
- }
57
- }
@@ -1,20 +0,0 @@
1
- import type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'
2
- import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'
3
- import type { ImageThumbnailResultIndex } from '@xyo-network/image-thumbnail-payload-plugin'
4
- import { isPayloadOfSchemaType } from '@xyo-network/payload-model'
5
-
6
- /**
7
- * The fields that will need to be indexed on in the underlying store
8
- */
9
- export type QueryableImageThumbnailResultProperties = Extract<keyof ImageThumbnailResultIndex, 'status' | 'success' | 'timestamp' | 'key'>
10
-
11
- /**
12
- * The query that will be used to retrieve the results from the underlying store
13
- */
14
- export type ImageThumbnailResultQuery = PayloadDivinerQueryPayload & Pick<ImageThumbnailResultIndex, QueryableImageThumbnailResultProperties>
15
-
16
- /**
17
- * A type guard for ImageThumbnailResultQuery
18
- */
19
- // TODO: Use a more derived schema than PayloadDivinerQuerySchema
20
- export const isImageThumbnailResultQuery = isPayloadOfSchemaType<ImageThumbnailResultQuery>(PayloadDivinerQuerySchema)
@@ -1,18 +0,0 @@
1
- import type { DivinerConfig } from '@xyo-network/diviner-model'
2
- import type { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'
3
- import { asSchema } from '@xyo-network/payload-model'
4
-
5
- import { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema.ts'
6
-
7
- export type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = typeof ImageThumbnailStateToIndexCandidateDivinerConfigSchema
8
- export const ImageThumbnailStateToIndexCandidateDivinerConfigSchema
9
- = asSchema(`${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`, true)
10
-
11
- export type ImageThumbnailStateToIndexCandidateDivinerConfig = DivinerConfig<{
12
- payloadDivinerLimit?: number
13
- /**
14
- * Where the diviner should look for stored thumbnails
15
- */
16
- payloadStore?: SearchableStorage
17
- schema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema
18
- }>
@@ -1,156 +0,0 @@
1
- import { filterAs } from '@xylabs/array'
2
- import { assertEx } from '@xylabs/assert'
3
- import { exists } from '@xylabs/exists'
4
- import { AsObjectFactory } from '@xylabs/object'
5
- import type { ArchivistInstance, ArchivistNextOptions } from '@xyo-network/archivist-model'
6
- import { ArchivistWrapper } from '@xyo-network/archivist-wrapper'
7
- import type { BoundWitness } from '@xyo-network/boundwitness-model'
8
- import { asBoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'
9
- import { payloadSchemasContainsAll } from '@xyo-network/boundwitness-validator'
10
- import { AbstractDiviner } from '@xyo-network/diviner-abstract'
11
- import { DivinerWrapper } from '@xyo-network/diviner-wrapper'
12
- import type { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'
13
- import { ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'
14
- import type { ModuleState } from '@xyo-network/module-model'
15
- import { isModuleState, ModuleStateSchema } from '@xyo-network/module-model'
16
- import type { Payload, Schema } from '@xyo-network/payload-model'
17
- import { SequenceConstants } from '@xyo-network/payload-model'
18
- import type { TimeStamp } from '@xyo-network/witness-timestamp'
19
- import { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'
20
-
21
- import type { ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels.ts'
22
- import { ImageThumbnailDivinerLabels } from '../ImageThumbnailDivinerLabels.ts'
23
- import type { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState.ts'
24
- import { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config.ts'
25
- import type { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params.ts'
26
-
27
- /**
28
- * All Payload types involved in index candidates for indexing
29
- */
30
- export type IndexCandidate = BoundWitness | ImageThumbnail | TimeStamp
31
-
32
- /**
33
- * The response from the ImageThumbnailStateToIndexCandidateDiviner
34
- */
35
- export type ImageThumbnailStateToIndexCandidateDivinerResponse = [
36
- /**
37
- * The next state of the diviner
38
- */
39
- nextState: ModuleState<ImageThumbnailDivinerState>,
40
- /**
41
- * The index candidates
42
- */
43
- ...IndexCandidate[],
44
- ]
45
-
46
- /**
47
- * The required payload_schemas within BoundWitnesses to identify index candidates
48
- */
49
- const payload_schemas = [ImageThumbnailSchema, TimestampSchema]
50
-
51
- /**
52
- * Index candidate identity functions
53
- */
54
- const indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const
55
- const isIndexCandidate = (x?: unknown | null): x is IndexCandidate => {
56
- return indexCandidateIdentityFunctions.map(is => is(x)).some(Boolean)
57
- }
58
- const asIndexCandidate = AsObjectFactory.create(isIndexCandidate)
59
-
60
- /**
61
- * The default order to search Bound Witnesses to identify index candidates
62
- */
63
- const order = 'asc'
64
-
65
- /**
66
- * The name of the module (for logging purposes)
67
- */
68
- const moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'
69
-
70
- /**
71
- * Transforms candidates for image thumbnail indexing into their indexed representation
72
- */
73
- export class ImageThumbnailStateToIndexCandidateDiviner<
74
- TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,
75
- > extends AbstractDiviner<TParams> {
76
- static override readonly configSchemas: Schema[] = [...super.configSchemas, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]
77
- static override readonly defaultConfigSchema: Schema = ImageThumbnailStateToIndexCandidateDivinerConfigSchema
78
- static override readonly labels: ImageThumbnailDivinerStageLabels = {
79
- ...super.labels,
80
- ...ImageThumbnailDivinerLabels,
81
- 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',
82
- }
83
-
84
- get payloadDivinerLimit() {
85
- return this.config.payloadDivinerLimit ?? 1000
86
- }
87
-
88
- protected static async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {
89
- const indexes = payload_schemas.map(schema => bw.payload_schemas?.indexOf(schema))
90
- const hashes = indexes.map(index => bw.payload_hashes?.[index])
91
- const results = await archivist.get(hashes)
92
- const filteredResults = indexCandidateIdentityFunctions.map(is => results.find(is))
93
- if (filteredResults.includes(undefined)) return undefined
94
- const indexCandidates: IndexCandidate[] = filterAs(filteredResults, asIndexCandidate)
95
- return [bw, ...indexCandidates]
96
- }
97
-
98
- protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailStateToIndexCandidateDivinerResponse> {
99
- // Retrieve the last state from what was passed in
100
- const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)
101
- // If there is no last state, start from the beginning
102
- ?? { schema: ModuleStateSchema, state: { cursor: SequenceConstants.minLocalSequence } }
103
-
104
- // Get the last cursor
105
- const cursor = lastState?.state?.cursor
106
- // Get the archivist for the store
107
- const sourceArchivist = await this.getArchivistForStore()
108
- if (!sourceArchivist) return [lastState]
109
-
110
- // Get the next batch of results
111
- const nextOffset: ArchivistNextOptions = { limit: this.payloadDivinerLimit, order }
112
- // Only use the cursor if it's a valid offset
113
- if (cursor !== SequenceConstants.minLocalSequence) nextOffset.cursor = cursor
114
- // Get next batch of results starting from the offset
115
- const next = await sourceArchivist.next(nextOffset)
116
- if (next.length === 0) return [lastState]
117
-
118
- const batch = filterAs(next, asBoundWitness)
119
- .filter(exists)
120
- .filter(bw => payloadSchemasContainsAll(bw, payload_schemas))
121
- // Get source data
122
- const indexCandidates: IndexCandidate[] = (await Promise.all(
123
- batch
124
- .filter(isBoundWitness)
125
- .map(bw => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),
126
- ))
127
- .filter(exists)
128
- .flat()
129
- const nextCursor = assertEx(next.at(-1)?._sequence, () => `${moduleName}: Expected next to have a sequence`)
130
- const nextState: ModuleState<ImageThumbnailDivinerState> = { schema: ModuleStateSchema, state: { ...lastState.state, cursor: nextCursor } }
131
- return [nextState, ...indexCandidates]
132
- }
133
-
134
- /**
135
- * Retrieves the archivist for the payloadStore
136
- * @returns The archivist for the payloadStore
137
- */
138
- protected async getArchivistForStore() {
139
- const name = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)
140
- const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`)
141
- return ArchivistWrapper.wrap(mod, this.account)
142
- }
143
-
144
- /**
145
- * Retrieves the BoundWitness Diviner for the payloadStore
146
- * @returns The BoundWitness Diviner for the payloadStore
147
- */
148
- protected async getBoundWitnessDivinerForStore() {
149
- const name = assertEx(
150
- this.config?.payloadStore?.boundWitnessDiviner,
151
- () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,
152
- )
153
- const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.boundWitnessDiviner`)
154
- return DivinerWrapper.wrap(mod, this.account)
155
- }
156
- }
@@ -1,6 +0,0 @@
1
- import type { DivinerParams } from '@xyo-network/diviner-model'
2
- import type { AnyConfigSchema } from '@xyo-network/module-model'
3
-
4
- import type { ImageThumbnailStateToIndexCandidateDivinerConfig } from './Config.ts'
5
-
6
- export type ImageThumbnailStateToIndexCandidateDivinerParams = DivinerParams<AnyConfigSchema<ImageThumbnailStateToIndexCandidateDivinerConfig>>
@@ -1,6 +0,0 @@
1
- import { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'
2
- import { asSchema } from '@xyo-network/payload-model'
3
-
4
- export type ImageThumbnailStateToIndexCandidateDivinerSchema = typeof ImageThumbnailStateToIndexCandidateDivinerSchema
5
- export const ImageThumbnailStateToIndexCandidateDivinerSchema
6
- = asSchema(`${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`, true)
@@ -1,4 +0,0 @@
1
- export * from './Config.ts'
2
- export * from './Diviner.ts'
3
- export * from './Params.ts'
4
- export * from './Schema.ts'
@@ -1,55 +0,0 @@
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
- "config": {
36
- "labels": {
37
- "network.xyo.diviner.stage": "stateToIndexCandidateDiviner",
38
- "network.xyo.image.thumbnail": "diviner"
39
- },
40
- "language": "javascript",
41
- "name": "ImageThumbnailStateToIndexCandidateDiviner",
42
- "payloadStore": {
43
- "archivist": "ImageThumbnailArchivist",
44
- "boundWitnessDiviner": "ImageThumbnailBoundWitnessDiviner",
45
- "payloadDiviner": "ImageThumbnailPayloadDiviner"
46
- },
47
- "schema": "network.xyo.diviner.config"
48
- }
49
- }
50
- ]
51
- }
52
- }
53
- ],
54
- "schema": "network.xyo.manifest"
55
- }
@@ -1,8 +0,0 @@
1
- export * from './Diviner.ts'
2
- export * from './ImageThumbnailDivinerLabels.ts'
3
- export * from './ImageThumbnailDivinerState.ts'
4
- export * from './ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts'
5
- export * from './ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts'
6
- export * from './ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts'
7
- export * from './ImageThumbnailResultQuery.ts'
8
- export * from './ImageThumbnailStateToIndexCandidateDiviner/index.ts'
@@ -1,159 +0,0 @@
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.diviner.stage": "stateToIndexCandidateDiviner",
85
- "network.xyo.image.thumbnail": "diviner"
86
- },
87
- "language": "javascript",
88
- "name": "ImageThumbnailStateToIndexCandidateDiviner",
89
- "payloadStore": {
90
- "archivist": "ImageThumbnailArchivist",
91
- "boundWitnessDiviner": "ImageThumbnailBoundWitnessDiviner",
92
- "payloadDiviner": "ImageThumbnailPayloadDiviner"
93
- },
94
- "schema": "network.xyo.diviner.config"
95
- }
96
- },
97
- {
98
- "config": {
99
- "labels": {
100
- "network.xyo.diviner.stage": "indexCandidateToIndexDiviner",
101
- "network.xyo.image.thumbnail": "diviner"
102
- },
103
- "language": "javascript",
104
- "name": "ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner",
105
- "schema": "network.xyo.diviner.config"
106
- }
107
- },
108
- {
109
- "config": {
110
- "labels": {
111
- "network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner",
112
- "network.xyo.image.thumbnail": "diviner"
113
- },
114
- "language": "javascript",
115
- "name": "ImageThumbnailQueryToImageThumbnailIndexQueryDiviner",
116
- "schema": "network.xyo.diviner.config"
117
- }
118
- },
119
- {
120
- "config": {
121
- "labels": {
122
- "network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner",
123
- "network.xyo.image.thumbnail": "diviner"
124
- },
125
- "language": "javascript",
126
- "name": "ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner",
127
- "schema": "network.xyo.diviner.config"
128
- }
129
- },
130
- {
131
- "config": {
132
- "indexStore": {
133
- "archivist": "ImageThumbnailDivinerIndexArchivist",
134
- "boundWitnessDiviner": "ImageThumbnailDivinerIndexBoundWitnessDiviner",
135
- "payloadDiviner": "ImageThumbnailDivinerIndexPayloadDiviner"
136
- },
137
- "indexingDivinerStages": {
138
- "divinerQueryToIndexQueryDiviner": "ImageThumbnailQueryToImageThumbnailIndexQueryDiviner",
139
- "indexCandidateToIndexDiviner": "ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner",
140
- "indexQueryResponseToDivinerQueryResponseDiviner": "ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner",
141
- "stateToIndexCandidateDiviner": "ImageThumbnailStateToIndexCandidateDiviner"
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
- }
package/src/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './Diviner/index.ts'