@xyo-network/diviner-image-thumbnail 2.86.5 → 2.87.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.cts.map +1 -1
- package/dist/browser/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.mts.map +1 -1
- package/dist/browser/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts.map +1 -1
- package/dist/browser/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.cts.map +1 -1
- package/dist/browser/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.mts.map +1 -1
- package/dist/browser/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts.map +1 -1
- package/dist/browser/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.cts.map +1 -1
- package/dist/browser/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.mts.map +1 -1
- package/dist/browser/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts.map +1 -1
- package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.cts +30 -6
- package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.cts.map +1 -1
- package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.mts +30 -6
- package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.mts.map +1 -1
- package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.ts +30 -6
- package/dist/browser/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.ts.map +1 -1
- package/dist/browser/index.cjs +5 -8
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +5 -8
- package/dist/browser/index.js.map +1 -1
- package/dist/node/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.cts.map +1 -1
- package/dist/node/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.mts.map +1 -1
- package/dist/node/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts.map +1 -1
- package/dist/node/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.cts.map +1 -1
- package/dist/node/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.mts.map +1 -1
- package/dist/node/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts.map +1 -1
- package/dist/node/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.cts.map +1 -1
- package/dist/node/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.mts.map +1 -1
- package/dist/node/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts.map +1 -1
- package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.cts +30 -6
- package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.cts.map +1 -1
- package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.mts +30 -6
- package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.mts.map +1 -1
- package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.ts +30 -6
- package/dist/node/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.ts.map +1 -1
- package/dist/node/index.cjs +5 -8
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +5 -8
- package/dist/node/index.js.map +1 -1
- package/package.json +28 -28
- package/src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts +3 -4
- package/src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts +1 -2
- package/src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts +1 -2
package/dist/node/index.cjs
CHANGED
|
@@ -49,7 +49,6 @@ var ImageThumbnailDiviner = class extends import_diviner_indexing.IndexingDivine
|
|
|
49
49
|
var import_boundwitness_model = require("@xyo-network/boundwitness-model");
|
|
50
50
|
var import_diviner_abstract = require("@xyo-network/diviner-abstract");
|
|
51
51
|
var import_diviner_model = require("@xyo-network/diviner-model");
|
|
52
|
-
var import_hash = require("@xyo-network/hash");
|
|
53
52
|
var import_image_thumbnail_payload_plugin = require("@xyo-network/image-thumbnail-payload-plugin");
|
|
54
53
|
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
55
54
|
var import_url_payload_plugin = require("@xyo-network/url-payload-plugin");
|
|
@@ -65,7 +64,7 @@ var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends imp
|
|
|
65
64
|
const imageThumbnailPayloads = payloads.filter(import_image_thumbnail_payload_plugin.isImageThumbnail);
|
|
66
65
|
const timestampPayloads = payloads.filter(import_witness_timestamp.isTimestamp);
|
|
67
66
|
if (bws.length > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {
|
|
68
|
-
const payloadDictionary = await
|
|
67
|
+
const payloadDictionary = await import_payload_builder.PayloadBuilder.toDataHashMap(payloads);
|
|
69
68
|
const tuples = bws.reduce(
|
|
70
69
|
(acc, curr) => {
|
|
71
70
|
var _a, _b, _c, _d;
|
|
@@ -87,9 +86,9 @@ var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends imp
|
|
|
87
86
|
const { timestamp } = timestampPayload;
|
|
88
87
|
const { status } = http ?? {};
|
|
89
88
|
const success = !!imageThumbnailPayload.url;
|
|
90
|
-
const sources = (await
|
|
89
|
+
const sources = (await import_payload_builder.PayloadBuilder.dataHashPairs([bw, imageThumbnailPayload, timestampPayload])).map(([, hash]) => hash);
|
|
91
90
|
const urlPayload = { schema: import_url_payload_plugin.UrlSchema, url };
|
|
92
|
-
const key = await
|
|
91
|
+
const key = await import_payload_builder.PayloadBuilder.dataHash(urlPayload);
|
|
93
92
|
const fields = { key, sources, success, timestamp };
|
|
94
93
|
if (status)
|
|
95
94
|
fields.status = status;
|
|
@@ -107,7 +106,6 @@ var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends imp
|
|
|
107
106
|
var import_exists = require("@xylabs/exists");
|
|
108
107
|
var import_diviner_abstract2 = require("@xyo-network/diviner-abstract");
|
|
109
108
|
var import_diviner_model2 = require("@xyo-network/diviner-model");
|
|
110
|
-
var import_hash2 = require("@xyo-network/hash");
|
|
111
109
|
var import_image_thumbnail_payload_plugin2 = require("@xyo-network/image-thumbnail-payload-plugin");
|
|
112
110
|
var import_payload_builder2 = require("@xyo-network/payload-builder");
|
|
113
111
|
var import_url_payload_plugin2 = require("@xyo-network/url-payload-plugin");
|
|
@@ -126,7 +124,7 @@ var ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner = class
|
|
|
126
124
|
imageThumbnailDivinerQueries.map(async (imageThumbnailDivinerQuery) => {
|
|
127
125
|
const { url } = imageThumbnailDivinerQuery;
|
|
128
126
|
const urlPayload = await new import_payload_builder2.PayloadBuilder({ schema: import_url_payload_plugin2.UrlSchema }).fields({ url }).build();
|
|
129
|
-
const key = await
|
|
127
|
+
const key = await import_payload_builder2.PayloadBuilder.dataHash(urlPayload);
|
|
130
128
|
return [key, url];
|
|
131
129
|
})
|
|
132
130
|
)
|
|
@@ -150,7 +148,6 @@ var ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner = class
|
|
|
150
148
|
var import_diviner_abstract3 = require("@xyo-network/diviner-abstract");
|
|
151
149
|
var import_diviner_model3 = require("@xyo-network/diviner-model");
|
|
152
150
|
var import_diviner_payload_model = require("@xyo-network/diviner-payload-model");
|
|
153
|
-
var import_hash3 = require("@xyo-network/hash");
|
|
154
151
|
var import_image_thumbnail_payload_plugin3 = require("@xyo-network/image-thumbnail-payload-plugin");
|
|
155
152
|
var import_payload_builder3 = require("@xyo-network/payload-builder");
|
|
156
153
|
var import_url_payload_plugin3 = require("@xyo-network/url-payload-plugin");
|
|
@@ -170,7 +167,7 @@ var ImageThumbnailQueryToImageThumbnailIndexQueryDiviner = class extends import_
|
|
|
170
167
|
const order2 = payloadOrder ?? "desc";
|
|
171
168
|
const offset = payloadOffset ?? 0;
|
|
172
169
|
const urlPayload = { schema: import_url_payload_plugin3.UrlSchema, url };
|
|
173
|
-
const key = await
|
|
170
|
+
const key = await import_payload_builder3.PayloadBuilder.dataHash(urlPayload);
|
|
174
171
|
const fields = { key, limit, offset, order: order2 };
|
|
175
172
|
if (payloadSuccess !== void 0)
|
|
176
173
|
fields.success = payloadSuccess;
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Diviner/Diviner.ts","../../src/Diviner/ImageThumbnailDivinerLabels.ts","../../src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts","../../src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts","../../src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts","../../src/Diviner/ImageThumbnailResultQuery.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner {\n static labels: ImageThumbnailDivinerLabels = ImageThumbnailDivinerLabels\n}\n","import { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'\nimport { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport interface ImageThumbnailDivinerLabels extends Labels {\n 'network.xyo.image.thumbnail': 'diviner'\n}\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport const ImageThumbnailDivinerLabels: ImageThumbnailDivinerLabels = {\n 'network.xyo.image.thumbnail': 'diviner',\n}\n\n/**\n * Labels for Image Thumbnail Diviner Stage Diviners\n */\nexport type ImageThumbnailDivinerStageLabels = ImageThumbnailDivinerLabels & {\n /**\n * Labels for the stage of the Image Thumbnail Diviner Stage Diviner\n */\n [key in DivinerStageSchema]: IndexingDivinerStage\n}\n","import { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport {\n ImageThumbnail,\n ImageThumbnailResultIndex,\n ImageThumbnailResultIndexFields,\n ImageThumbnailResultIndexSchema,\n ImageThumbnailSchema,\n isImageThumbnail,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResultIndex[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const imageThumbnailPayloads: ImageThumbnail[] = payloads.filter(isImageThumbnail)\n const timestampPayloads: TimeStamp[] = payloads.filter(isTimestamp)\n if (bws.length > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(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?.findIndex((schema) => schema === ImageThumbnailSchema)\n const timestampIndex = curr.payload_schemas?.findIndex((schema) => schema === TimestampSchema)\n const imageThumbnailHash = curr.payload_hashes?.[imageThumbnailIndex]\n const timestampHash = curr.payload_hashes?.[timestampIndex]\n const imageThumbnailPayload = [payloadDictionary[imageThumbnailHash]].find(isImageThumbnail)\n const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp)\n if (imageThumbnailPayload && timestampPayload) acc.push([curr, imageThumbnailPayload, timestampPayload])\n return acc\n },\n [] as [BoundWitness, ImageThumbnail, TimeStamp][],\n )\n const indexes = await Promise.all(\n tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {\n const { sourceUrl: url, 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 = (await PayloadHasher.hashPairs([bw, imageThumbnailPayload, timestampPayload])).map(([, hash]) => hash)\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadHasher.hashAsync(urlPayload)\n const fields: ImageThumbnailResultIndexFields = { key, sources, success, timestamp }\n if (status) fields.status = status\n const result: ImageThumbnailResultIndex = await new PayloadBuilder<ImageThumbnailResultIndex>({ schema: ImageThumbnailResultIndexSchema })\n .fields(fields)\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 { PayloadHasher } from '@xyo-network/hash'\nimport {\n ImageThumbnailResult,\n ImageThumbnailResultFields,\n ImageThumbnailResultSchema,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResultIndex,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {\n // Filter out the two operands\n const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)\n const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndex)\n\n // If we have operands\n if (imageThumbnailDivinerQueries.length > 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 = await new PayloadBuilder<ImageThumbnailResult>({ schema: UrlSchema }).fields({ url }).build()\n const key = await PayloadHasher.hashAsync(urlPayload)\n return [key, url] as const\n }),\n ),\n )\n // Map the indexes to responses using the dictionary\n return (\n await Promise.all(\n imageThumbnailResultIndexes.map(async (imageThumbnailResultIndex) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { key, schema, ...commonFields } = imageThumbnailResultIndex\n const url = keyToUrlDictionary?.[key]\n if (url) {\n const fields: ImageThumbnailResultFields = { ...commonFields, url }\n return await new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema }).fields(fields).build()\n }\n }),\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 { PayloadHasher } from '@xyo-network/hash'\nimport { isImageThumbnailDivinerQuery } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\nimport { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResultQuery[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const { limit: payloadLimit, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url } = query\n const limit = payloadLimit ?? 1\n const order = payloadOrder ?? 'desc'\n const offset = payloadOffset ?? 0\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadHasher.hashAsync(urlPayload)\n const fields: Partial<ImageThumbnailResultQuery> = { key, limit, offset, order }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n return await new PayloadBuilder<ImageThumbnailResultQuery>({ schema: PayloadDivinerQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ImageThumbnailResultIndex } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\n/**\n * The fields that will need to be indexed on in the underlying store\n */\nexport type QueryableImageThumbnailResultProperties = Extract<keyof ImageThumbnailResultIndex, 'status' | 'success' | 'timestamp' | 'key'>\n\n/**\n * The query that will be used to retrieve the results from the underlying store\n */\nexport type ImageThumbnailResultQuery = PayloadDivinerQueryPayload & Pick<ImageThumbnailResultIndex, QueryableImageThumbnailResultProperties>\n\n/**\n * A type guard for ImageThumbnailResultQuery\n */\n// TODO: Use a more derived schema than PayloadDivinerQuerySchema\nexport const isImageThumbnailResultQuery = isPayloadOfSchemaType<ImageThumbnailResultQuery>(PayloadDivinerQuerySchema)\n","import { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\nexport const ImageThumbnailStateToIndexCandidateDivinerSchema: ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\n","import { DivinerConfig } from '@xyo-network/diviner-model'\nimport { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'\n\nimport { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\nexport const ImageThumbnailStateToIndexCandidateDivinerConfigSchema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfig = DivinerConfig<{\n payloadDivinerLimit?: number\n /**\n * Where the diviner should look for stored thumbnails\n */\n payloadStore?: SearchableStorage\n schema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n}>\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { ImageThumbnail, ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isModuleState, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels'\nimport { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config'\nimport { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | ImageThumbnail | TimeStamp\n\n/**\n * The response from the ImageThumbnailStateToIndexCandidateDiviner\n */\nexport type ImageThumbnailStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<ImageThumbnailDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\nconst payload_schemas = [ImageThumbnailSchema, TimestampSchema]\n\n/**\n * Index candidate identity functions\n */\nconst indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailStateToIndexCandidateDiviner<\n TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchemas = [DivinerConfigSchema, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 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?.findIndex((s) => s === schema))\n const hashes = indexes.map((index) => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]\n return [bw, ...indexCandidates]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailStateToIndexCandidateDivinerResponse> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(\n batch.filter(isBoundWitness).map((bw) => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n )\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore\n */\n protected async getArchivistForStore() {\n const name = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore\n */\n protected async getBoundWitnessDivinerForStore() {\n const name = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.boundWitnessDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n}\n"],"mappings":"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","names":["import_diviner_abstract","import_diviner_model","import_hash","import_image_thumbnail_payload_plugin","import_payload_builder","import_url_payload_plugin","import_diviner_abstract","import_diviner_model","import_hash","import_image_thumbnail_payload_plugin","import_payload_builder","import_url_payload_plugin","order","import_diviner_payload_model","import_image_thumbnail_payload_plugin","import_exists","import_boundwitness_model","import_diviner_abstract","import_diviner_model","import_image_thumbnail_payload_plugin","import_payload_builder","import_witness_timestamp"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Diviner/Diviner.ts","../../src/Diviner/ImageThumbnailDivinerLabels.ts","../../src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts","../../src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts","../../src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts","../../src/Diviner/ImageThumbnailResultQuery.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner {\n static labels: ImageThumbnailDivinerLabels = ImageThumbnailDivinerLabels\n}\n","import { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'\nimport { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport interface ImageThumbnailDivinerLabels extends Labels {\n 'network.xyo.image.thumbnail': 'diviner'\n}\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport const ImageThumbnailDivinerLabels: ImageThumbnailDivinerLabels = {\n 'network.xyo.image.thumbnail': 'diviner',\n}\n\n/**\n * Labels for Image Thumbnail Diviner Stage Diviners\n */\nexport type ImageThumbnailDivinerStageLabels = ImageThumbnailDivinerLabels & {\n /**\n * Labels for the stage of the Image Thumbnail Diviner Stage Diviner\n */\n [key in DivinerStageSchema]: IndexingDivinerStage\n}\n","import { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n ImageThumbnail,\n ImageThumbnailResultIndex,\n ImageThumbnailResultIndexFields,\n ImageThumbnailResultIndexSchema,\n ImageThumbnailSchema,\n isImageThumbnail,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResultIndex[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const imageThumbnailPayloads: ImageThumbnail[] = payloads.filter(isImageThumbnail)\n const timestampPayloads: TimeStamp[] = payloads.filter(isTimestamp)\n if (bws.length > 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?.findIndex((schema) => schema === ImageThumbnailSchema)\n const timestampIndex = curr.payload_schemas?.findIndex((schema) => schema === TimestampSchema)\n const imageThumbnailHash = curr.payload_hashes?.[imageThumbnailIndex]\n const timestampHash = curr.payload_hashes?.[timestampIndex]\n const imageThumbnailPayload = [payloadDictionary[imageThumbnailHash]].find(isImageThumbnail)\n const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp)\n if (imageThumbnailPayload && timestampPayload) acc.push([curr, imageThumbnailPayload, timestampPayload])\n return acc\n },\n [] as [BoundWitness, ImageThumbnail, TimeStamp][],\n )\n const indexes = await Promise.all(\n tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {\n const { sourceUrl: url, 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 = (await PayloadBuilder.dataHashPairs([bw, imageThumbnailPayload, timestampPayload])).map(([, hash]) => hash)\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadBuilder.dataHash(urlPayload)\n const fields: ImageThumbnailResultIndexFields = { key, sources, success, timestamp }\n if (status) fields.status = status\n const result: ImageThumbnailResultIndex = await new PayloadBuilder<ImageThumbnailResultIndex>({ schema: ImageThumbnailResultIndexSchema })\n .fields(fields)\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 {\n ImageThumbnailResult,\n ImageThumbnailResultFields,\n ImageThumbnailResultSchema,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResultIndex,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {\n // Filter out the two operands\n const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)\n const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndex)\n\n // If we have operands\n if (imageThumbnailDivinerQueries.length > 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 = await new PayloadBuilder<ImageThumbnailResult>({ schema: UrlSchema }).fields({ url }).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 (\n await Promise.all(\n imageThumbnailResultIndexes.map(async (imageThumbnailResultIndex) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { key, schema, ...commonFields } = imageThumbnailResultIndex\n const url = keyToUrlDictionary?.[key]\n if (url) {\n const fields: ImageThumbnailResultFields = { ...commonFields, url }\n return await new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema }).fields(fields).build()\n }\n }),\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 { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\nimport { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResultQuery[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const { limit: payloadLimit, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url } = query\n const limit = payloadLimit ?? 1\n const order = payloadOrder ?? 'desc'\n const offset = payloadOffset ?? 0\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadBuilder.dataHash(urlPayload)\n const fields: Partial<ImageThumbnailResultQuery> = { key, limit, offset, order }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n return await new PayloadBuilder<ImageThumbnailResultQuery>({ schema: PayloadDivinerQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ImageThumbnailResultIndex } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\n/**\n * The fields that will need to be indexed on in the underlying store\n */\nexport type QueryableImageThumbnailResultProperties = Extract<keyof ImageThumbnailResultIndex, 'status' | 'success' | 'timestamp' | 'key'>\n\n/**\n * The query that will be used to retrieve the results from the underlying store\n */\nexport type ImageThumbnailResultQuery = PayloadDivinerQueryPayload & Pick<ImageThumbnailResultIndex, QueryableImageThumbnailResultProperties>\n\n/**\n * A type guard for ImageThumbnailResultQuery\n */\n// TODO: Use a more derived schema than PayloadDivinerQuerySchema\nexport const isImageThumbnailResultQuery = isPayloadOfSchemaType<ImageThumbnailResultQuery>(PayloadDivinerQuerySchema)\n","import { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\nexport const ImageThumbnailStateToIndexCandidateDivinerSchema: ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\n","import { DivinerConfig } from '@xyo-network/diviner-model'\nimport { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'\n\nimport { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\nexport const ImageThumbnailStateToIndexCandidateDivinerConfigSchema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfig = DivinerConfig<{\n payloadDivinerLimit?: number\n /**\n * Where the diviner should look for stored thumbnails\n */\n payloadStore?: SearchableStorage\n schema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n}>\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { ImageThumbnail, ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isModuleState, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels'\nimport { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config'\nimport { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | ImageThumbnail | TimeStamp\n\n/**\n * The response from the ImageThumbnailStateToIndexCandidateDiviner\n */\nexport type ImageThumbnailStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<ImageThumbnailDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\nconst payload_schemas = [ImageThumbnailSchema, TimestampSchema]\n\n/**\n * Index candidate identity functions\n */\nconst indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailStateToIndexCandidateDiviner<\n TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchemas = [DivinerConfigSchema, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 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?.findIndex((s) => s === schema))\n const hashes = indexes.map((index) => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]\n return [bw, ...indexCandidates]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailStateToIndexCandidateDivinerResponse> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(\n batch.filter(isBoundWitness).map((bw) => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n )\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore\n */\n protected async getArchivistForStore() {\n const name = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore\n */\n protected async getBoundWitnessDivinerForStore() {\n const name = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.boundWitnessDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n}\n"],"mappings":"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","names":["import_diviner_abstract","import_diviner_model","import_image_thumbnail_payload_plugin","import_payload_builder","import_url_payload_plugin","import_diviner_abstract","import_diviner_model","import_image_thumbnail_payload_plugin","import_payload_builder","import_url_payload_plugin","order","import_diviner_payload_model","import_image_thumbnail_payload_plugin","import_exists","import_boundwitness_model","import_diviner_abstract","import_diviner_model","import_image_thumbnail_payload_plugin","import_payload_builder","import_witness_timestamp"]}
|
package/dist/node/index.js
CHANGED
|
@@ -15,7 +15,6 @@ var ImageThumbnailDiviner = class extends IndexingDiviner {
|
|
|
15
15
|
import { isBoundWitness } from "@xyo-network/boundwitness-model";
|
|
16
16
|
import { AbstractDiviner } from "@xyo-network/diviner-abstract";
|
|
17
17
|
import { DivinerConfigSchema } from "@xyo-network/diviner-model";
|
|
18
|
-
import { PayloadHasher } from "@xyo-network/hash";
|
|
19
18
|
import {
|
|
20
19
|
ImageThumbnailResultIndexSchema,
|
|
21
20
|
ImageThumbnailSchema,
|
|
@@ -35,7 +34,7 @@ var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends Abs
|
|
|
35
34
|
const imageThumbnailPayloads = payloads.filter(isImageThumbnail);
|
|
36
35
|
const timestampPayloads = payloads.filter(isTimestamp);
|
|
37
36
|
if (bws.length > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {
|
|
38
|
-
const payloadDictionary = await
|
|
37
|
+
const payloadDictionary = await PayloadBuilder.toDataHashMap(payloads);
|
|
39
38
|
const tuples = bws.reduce(
|
|
40
39
|
(acc, curr) => {
|
|
41
40
|
var _a, _b, _c, _d;
|
|
@@ -57,9 +56,9 @@ var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends Abs
|
|
|
57
56
|
const { timestamp } = timestampPayload;
|
|
58
57
|
const { status } = http ?? {};
|
|
59
58
|
const success = !!imageThumbnailPayload.url;
|
|
60
|
-
const sources = (await
|
|
59
|
+
const sources = (await PayloadBuilder.dataHashPairs([bw, imageThumbnailPayload, timestampPayload])).map(([, hash]) => hash);
|
|
61
60
|
const urlPayload = { schema: UrlSchema, url };
|
|
62
|
-
const key = await
|
|
61
|
+
const key = await PayloadBuilder.dataHash(urlPayload);
|
|
63
62
|
const fields = { key, sources, success, timestamp };
|
|
64
63
|
if (status)
|
|
65
64
|
fields.status = status;
|
|
@@ -77,7 +76,6 @@ var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends Abs
|
|
|
77
76
|
import { exists } from "@xylabs/exists";
|
|
78
77
|
import { AbstractDiviner as AbstractDiviner2 } from "@xyo-network/diviner-abstract";
|
|
79
78
|
import { DivinerConfigSchema as DivinerConfigSchema2 } from "@xyo-network/diviner-model";
|
|
80
|
-
import { PayloadHasher as PayloadHasher2 } from "@xyo-network/hash";
|
|
81
79
|
import {
|
|
82
80
|
ImageThumbnailResultSchema,
|
|
83
81
|
isImageThumbnailDivinerQuery,
|
|
@@ -100,7 +98,7 @@ var ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner = class
|
|
|
100
98
|
imageThumbnailDivinerQueries.map(async (imageThumbnailDivinerQuery) => {
|
|
101
99
|
const { url } = imageThumbnailDivinerQuery;
|
|
102
100
|
const urlPayload = await new PayloadBuilder2({ schema: UrlSchema2 }).fields({ url }).build();
|
|
103
|
-
const key = await
|
|
101
|
+
const key = await PayloadBuilder2.dataHash(urlPayload);
|
|
104
102
|
return [key, url];
|
|
105
103
|
})
|
|
106
104
|
)
|
|
@@ -124,7 +122,6 @@ var ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner = class
|
|
|
124
122
|
import { AbstractDiviner as AbstractDiviner3 } from "@xyo-network/diviner-abstract";
|
|
125
123
|
import { DivinerConfigSchema as DivinerConfigSchema3 } from "@xyo-network/diviner-model";
|
|
126
124
|
import { PayloadDivinerQuerySchema } from "@xyo-network/diviner-payload-model";
|
|
127
|
-
import { PayloadHasher as PayloadHasher3 } from "@xyo-network/hash";
|
|
128
125
|
import { isImageThumbnailDivinerQuery as isImageThumbnailDivinerQuery2 } from "@xyo-network/image-thumbnail-payload-plugin";
|
|
129
126
|
import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
|
|
130
127
|
import { UrlSchema as UrlSchema3 } from "@xyo-network/url-payload-plugin";
|
|
@@ -144,7 +141,7 @@ var ImageThumbnailQueryToImageThumbnailIndexQueryDiviner = class extends Abstrac
|
|
|
144
141
|
const order2 = payloadOrder ?? "desc";
|
|
145
142
|
const offset = payloadOffset ?? 0;
|
|
146
143
|
const urlPayload = { schema: UrlSchema3, url };
|
|
147
|
-
const key = await
|
|
144
|
+
const key = await PayloadBuilder3.dataHash(urlPayload);
|
|
148
145
|
const fields = { key, limit, offset, order: order2 };
|
|
149
146
|
if (payloadSuccess !== void 0)
|
|
150
147
|
fields.success = payloadSuccess;
|
package/dist/node/index.js.map
CHANGED
|
@@ -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/Schema.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner {\n static labels: ImageThumbnailDivinerLabels = ImageThumbnailDivinerLabels\n}\n","import { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'\nimport { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport interface ImageThumbnailDivinerLabels extends Labels {\n 'network.xyo.image.thumbnail': 'diviner'\n}\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport const ImageThumbnailDivinerLabels: ImageThumbnailDivinerLabels = {\n 'network.xyo.image.thumbnail': 'diviner',\n}\n\n/**\n * Labels for Image Thumbnail Diviner Stage Diviners\n */\nexport type ImageThumbnailDivinerStageLabels = ImageThumbnailDivinerLabels & {\n /**\n * Labels for the stage of the Image Thumbnail Diviner Stage Diviner\n */\n [key in DivinerStageSchema]: IndexingDivinerStage\n}\n","import { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport {\n ImageThumbnail,\n ImageThumbnailResultIndex,\n ImageThumbnailResultIndexFields,\n ImageThumbnailResultIndexSchema,\n ImageThumbnailSchema,\n isImageThumbnail,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResultIndex[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const imageThumbnailPayloads: ImageThumbnail[] = payloads.filter(isImageThumbnail)\n const timestampPayloads: TimeStamp[] = payloads.filter(isTimestamp)\n if (bws.length > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(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?.findIndex((schema) => schema === ImageThumbnailSchema)\n const timestampIndex = curr.payload_schemas?.findIndex((schema) => schema === TimestampSchema)\n const imageThumbnailHash = curr.payload_hashes?.[imageThumbnailIndex]\n const timestampHash = curr.payload_hashes?.[timestampIndex]\n const imageThumbnailPayload = [payloadDictionary[imageThumbnailHash]].find(isImageThumbnail)\n const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp)\n if (imageThumbnailPayload && timestampPayload) acc.push([curr, imageThumbnailPayload, timestampPayload])\n return acc\n },\n [] as [BoundWitness, ImageThumbnail, TimeStamp][],\n )\n const indexes = await Promise.all(\n tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {\n const { sourceUrl: url, 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 = (await PayloadHasher.hashPairs([bw, imageThumbnailPayload, timestampPayload])).map(([, hash]) => hash)\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadHasher.hashAsync(urlPayload)\n const fields: ImageThumbnailResultIndexFields = { key, sources, success, timestamp }\n if (status) fields.status = status\n const result: ImageThumbnailResultIndex = await new PayloadBuilder<ImageThumbnailResultIndex>({ schema: ImageThumbnailResultIndexSchema })\n .fields(fields)\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 { PayloadHasher } from '@xyo-network/hash'\nimport {\n ImageThumbnailResult,\n ImageThumbnailResultFields,\n ImageThumbnailResultSchema,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResultIndex,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {\n // Filter out the two operands\n const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)\n const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndex)\n\n // If we have operands\n if (imageThumbnailDivinerQueries.length > 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 = await new PayloadBuilder<ImageThumbnailResult>({ schema: UrlSchema }).fields({ url }).build()\n const key = await PayloadHasher.hashAsync(urlPayload)\n return [key, url] as const\n }),\n ),\n )\n // Map the indexes to responses using the dictionary\n return (\n await Promise.all(\n imageThumbnailResultIndexes.map(async (imageThumbnailResultIndex) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { key, schema, ...commonFields } = imageThumbnailResultIndex\n const url = keyToUrlDictionary?.[key]\n if (url) {\n const fields: ImageThumbnailResultFields = { ...commonFields, url }\n return await new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema }).fields(fields).build()\n }\n }),\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 { PayloadHasher } from '@xyo-network/hash'\nimport { isImageThumbnailDivinerQuery } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\nimport { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResultQuery[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const { limit: payloadLimit, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url } = query\n const limit = payloadLimit ?? 1\n const order = payloadOrder ?? 'desc'\n const offset = payloadOffset ?? 0\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadHasher.hashAsync(urlPayload)\n const fields: Partial<ImageThumbnailResultQuery> = { key, limit, offset, order }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n return await new PayloadBuilder<ImageThumbnailResultQuery>({ schema: PayloadDivinerQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ImageThumbnailResultIndex } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\n/**\n * The fields that will need to be indexed on in the underlying store\n */\nexport type QueryableImageThumbnailResultProperties = Extract<keyof ImageThumbnailResultIndex, 'status' | 'success' | 'timestamp' | 'key'>\n\n/**\n * The query that will be used to retrieve the results from the underlying store\n */\nexport type ImageThumbnailResultQuery = PayloadDivinerQueryPayload & Pick<ImageThumbnailResultIndex, QueryableImageThumbnailResultProperties>\n\n/**\n * A type guard for ImageThumbnailResultQuery\n */\n// TODO: Use a more derived schema than PayloadDivinerQuerySchema\nexport const isImageThumbnailResultQuery = isPayloadOfSchemaType<ImageThumbnailResultQuery>(PayloadDivinerQuerySchema)\n","import { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\nexport const ImageThumbnailStateToIndexCandidateDivinerSchema: ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\n","import { DivinerConfig } from '@xyo-network/diviner-model'\nimport { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'\n\nimport { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\nexport const ImageThumbnailStateToIndexCandidateDivinerConfigSchema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfig = DivinerConfig<{\n payloadDivinerLimit?: number\n /**\n * Where the diviner should look for stored thumbnails\n */\n payloadStore?: SearchableStorage\n schema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n}>\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { ImageThumbnail, ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isModuleState, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels'\nimport { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config'\nimport { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | ImageThumbnail | TimeStamp\n\n/**\n * The response from the ImageThumbnailStateToIndexCandidateDiviner\n */\nexport type ImageThumbnailStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<ImageThumbnailDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\nconst payload_schemas = [ImageThumbnailSchema, TimestampSchema]\n\n/**\n * Index candidate identity functions\n */\nconst indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailStateToIndexCandidateDiviner<\n TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchemas = [DivinerConfigSchema, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 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?.findIndex((s) => s === schema))\n const hashes = indexes.map((index) => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]\n return [bw, ...indexCandidates]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailStateToIndexCandidateDivinerResponse> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(\n batch.filter(isBoundWitness).map((bw) => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n )\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore\n */\n protected async getArchivistForStore() {\n const name = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore\n */\n protected async getBoundWitnessDivinerForStore() {\n const name = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.boundWitnessDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n}\n"],"mappings":"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","names":["AbstractDiviner","DivinerConfigSchema","PayloadHasher","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","PayloadBuilder","UrlSchema","PayloadHasher","AbstractDiviner","DivinerConfigSchema","PayloadHasher","isImageThumbnailDivinerQuery","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","isImageThumbnailDivinerQuery","order","UrlSchema","PayloadHasher","PayloadBuilder","PayloadDivinerQuerySchema","exists","isBoundWitness","AbstractDiviner","DivinerConfigSchema","ImageThumbnailSchema","isImageThumbnail","PayloadBuilder","isTimestamp","TimestampSchema","ImageThumbnailSchema","TimestampSchema","isImageThumbnail","isTimestamp","AbstractDiviner","DivinerConfigSchema","exists","PayloadBuilder","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/Schema.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner {\n static labels: ImageThumbnailDivinerLabels = ImageThumbnailDivinerLabels\n}\n","import { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'\nimport { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport interface ImageThumbnailDivinerLabels extends Labels {\n 'network.xyo.image.thumbnail': 'diviner'\n}\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport const ImageThumbnailDivinerLabels: ImageThumbnailDivinerLabels = {\n 'network.xyo.image.thumbnail': 'diviner',\n}\n\n/**\n * Labels for Image Thumbnail Diviner Stage Diviners\n */\nexport type ImageThumbnailDivinerStageLabels = ImageThumbnailDivinerLabels & {\n /**\n * Labels for the stage of the Image Thumbnail Diviner Stage Diviner\n */\n [key in DivinerStageSchema]: IndexingDivinerStage\n}\n","import { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n ImageThumbnail,\n ImageThumbnailResultIndex,\n ImageThumbnailResultIndexFields,\n ImageThumbnailResultIndexSchema,\n ImageThumbnailSchema,\n isImageThumbnail,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResultIndex[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const imageThumbnailPayloads: ImageThumbnail[] = payloads.filter(isImageThumbnail)\n const timestampPayloads: TimeStamp[] = payloads.filter(isTimestamp)\n if (bws.length > 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?.findIndex((schema) => schema === ImageThumbnailSchema)\n const timestampIndex = curr.payload_schemas?.findIndex((schema) => schema === TimestampSchema)\n const imageThumbnailHash = curr.payload_hashes?.[imageThumbnailIndex]\n const timestampHash = curr.payload_hashes?.[timestampIndex]\n const imageThumbnailPayload = [payloadDictionary[imageThumbnailHash]].find(isImageThumbnail)\n const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp)\n if (imageThumbnailPayload && timestampPayload) acc.push([curr, imageThumbnailPayload, timestampPayload])\n return acc\n },\n [] as [BoundWitness, ImageThumbnail, TimeStamp][],\n )\n const indexes = await Promise.all(\n tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {\n const { sourceUrl: url, 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 = (await PayloadBuilder.dataHashPairs([bw, imageThumbnailPayload, timestampPayload])).map(([, hash]) => hash)\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadBuilder.dataHash(urlPayload)\n const fields: ImageThumbnailResultIndexFields = { key, sources, success, timestamp }\n if (status) fields.status = status\n const result: ImageThumbnailResultIndex = await new PayloadBuilder<ImageThumbnailResultIndex>({ schema: ImageThumbnailResultIndexSchema })\n .fields(fields)\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 {\n ImageThumbnailResult,\n ImageThumbnailResultFields,\n ImageThumbnailResultSchema,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResultIndex,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {\n // Filter out the two operands\n const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)\n const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndex)\n\n // If we have operands\n if (imageThumbnailDivinerQueries.length > 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 = await new PayloadBuilder<ImageThumbnailResult>({ schema: UrlSchema }).fields({ url }).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 (\n await Promise.all(\n imageThumbnailResultIndexes.map(async (imageThumbnailResultIndex) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { key, schema, ...commonFields } = imageThumbnailResultIndex\n const url = keyToUrlDictionary?.[key]\n if (url) {\n const fields: ImageThumbnailResultFields = { ...commonFields, url }\n return await new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema }).fields(fields).build()\n }\n }),\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 { Payload } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels'\nimport { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override configSchemas = [DivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResultQuery[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const { limit: payloadLimit, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url } = query\n const limit = payloadLimit ?? 1\n const order = payloadOrder ?? 'desc'\n const offset = payloadOffset ?? 0\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadBuilder.dataHash(urlPayload)\n const fields: Partial<ImageThumbnailResultQuery> = { key, limit, offset, order }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n return await new PayloadBuilder<ImageThumbnailResultQuery>({ schema: PayloadDivinerQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ImageThumbnailResultIndex } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\n/**\n * The fields that will need to be indexed on in the underlying store\n */\nexport type QueryableImageThumbnailResultProperties = Extract<keyof ImageThumbnailResultIndex, 'status' | 'success' | 'timestamp' | 'key'>\n\n/**\n * The query that will be used to retrieve the results from the underlying store\n */\nexport type ImageThumbnailResultQuery = PayloadDivinerQueryPayload & Pick<ImageThumbnailResultIndex, QueryableImageThumbnailResultProperties>\n\n/**\n * A type guard for ImageThumbnailResultQuery\n */\n// TODO: Use a more derived schema than PayloadDivinerQuerySchema\nexport const isImageThumbnailResultQuery = isPayloadOfSchemaType<ImageThumbnailResultQuery>(PayloadDivinerQuerySchema)\n","import { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\nexport const ImageThumbnailStateToIndexCandidateDivinerSchema: ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\n","import { DivinerConfig } from '@xyo-network/diviner-model'\nimport { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'\n\nimport { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\nexport const ImageThumbnailStateToIndexCandidateDivinerConfigSchema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfig = DivinerConfig<{\n payloadDivinerLimit?: number\n /**\n * Where the diviner should look for stored thumbnails\n */\n payloadStore?: SearchableStorage\n schema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n}>\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { ImageThumbnail, ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isModuleState, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels'\nimport { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config'\nimport { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | ImageThumbnail | TimeStamp\n\n/**\n * The response from the ImageThumbnailStateToIndexCandidateDiviner\n */\nexport type ImageThumbnailStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<ImageThumbnailDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\nconst payload_schemas = [ImageThumbnailSchema, TimestampSchema]\n\n/**\n * Index candidate identity functions\n */\nconst indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailStateToIndexCandidateDiviner<\n TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchemas = [DivinerConfigSchema, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static labels: ImageThumbnailDivinerStageLabels = {\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 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?.findIndex((s) => s === schema))\n const hashes = indexes.map((index) => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]\n return [bw, ...indexCandidates]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailStateToIndexCandidateDivinerResponse> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(\n batch.filter(isBoundWitness).map((bw) => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n )\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore\n */\n protected async getArchivistForStore() {\n const name = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore\n */\n protected async getBoundWitnessDivinerForStore() {\n const name = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.boundWitnessDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n}\n"],"mappings":"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","names":["AbstractDiviner","DivinerConfigSchema","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","isImageThumbnailDivinerQuery","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","isImageThumbnailDivinerQuery","order","UrlSchema","PayloadBuilder","PayloadDivinerQuerySchema","exists","isBoundWitness","AbstractDiviner","DivinerConfigSchema","ImageThumbnailSchema","isImageThumbnail","PayloadBuilder","isTimestamp","TimestampSchema","ImageThumbnailSchema","TimestampSchema","isImageThumbnail","isTimestamp","AbstractDiviner","DivinerConfigSchema","exists","PayloadBuilder","isBoundWitness"]}
|
package/package.json
CHANGED
|
@@ -10,36 +10,35 @@
|
|
|
10
10
|
"url": "https://github.com/XYOracleNetwork/plugins/issues"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@xylabs/assert": "^2.13.
|
|
14
|
-
"@xylabs/exists": "^2.13.
|
|
15
|
-
"@xyo-network/archivist-model": "^2.
|
|
16
|
-
"@xyo-network/archivist-wrapper": "^2.
|
|
17
|
-
"@xyo-network/boundwitness-model": "^2.
|
|
18
|
-
"@xyo-network/diviner-abstract": "^2.
|
|
19
|
-
"@xyo-network/diviner-boundwitness-model": "^2.
|
|
20
|
-
"@xyo-network/diviner-indexing": "^2.
|
|
21
|
-
"@xyo-network/diviner-model": "^2.
|
|
22
|
-
"@xyo-network/diviner-payload-model": "^2.
|
|
23
|
-
"@xyo-network/diviner-wrapper": "^2.
|
|
24
|
-
"@xyo-network/
|
|
25
|
-
"@xyo-network/
|
|
26
|
-
"@xyo-network/
|
|
27
|
-
"@xyo-network/payload-
|
|
28
|
-
"@xyo-network/payload-
|
|
29
|
-
"@xyo-network/
|
|
30
|
-
"@xyo-network/witness-timestamp": "^2.88.2"
|
|
13
|
+
"@xylabs/assert": "^2.13.29",
|
|
14
|
+
"@xylabs/exists": "^2.13.29",
|
|
15
|
+
"@xyo-network/archivist-model": "^2.89.0-rc.2",
|
|
16
|
+
"@xyo-network/archivist-wrapper": "^2.89.0-rc.2",
|
|
17
|
+
"@xyo-network/boundwitness-model": "^2.89.0-rc.2",
|
|
18
|
+
"@xyo-network/diviner-abstract": "^2.89.0-rc.2",
|
|
19
|
+
"@xyo-network/diviner-boundwitness-model": "^2.89.0-rc.2",
|
|
20
|
+
"@xyo-network/diviner-indexing": "^2.89.0-rc.2",
|
|
21
|
+
"@xyo-network/diviner-model": "^2.89.0-rc.2",
|
|
22
|
+
"@xyo-network/diviner-payload-model": "^2.89.0-rc.2",
|
|
23
|
+
"@xyo-network/diviner-wrapper": "^2.89.0-rc.2",
|
|
24
|
+
"@xyo-network/image-thumbnail-payload-plugin": "~2.87.0-rc.1",
|
|
25
|
+
"@xyo-network/module-model": "^2.89.0-rc.2",
|
|
26
|
+
"@xyo-network/payload-builder": "^2.89.0-rc.2",
|
|
27
|
+
"@xyo-network/payload-model": "^2.89.0-rc.2",
|
|
28
|
+
"@xyo-network/url-payload-plugin": "~2.87.0-rc.1",
|
|
29
|
+
"@xyo-network/witness-timestamp": "^2.89.0-rc.2"
|
|
31
30
|
},
|
|
32
31
|
"devDependencies": {
|
|
33
|
-
"@xylabs/delay": "^2.13.
|
|
32
|
+
"@xylabs/delay": "^2.13.29",
|
|
34
33
|
"@xylabs/ts-scripts-yarn3": "^3.2.42",
|
|
35
34
|
"@xylabs/tsconfig": "^3.2.42",
|
|
36
|
-
"@xyo-network/account": "^2.
|
|
37
|
-
"@xyo-network/archivist-memory": "^2.
|
|
38
|
-
"@xyo-network/boundwitness-builder": "^2.
|
|
39
|
-
"@xyo-network/diviner-boundwitness-memory": "^2.
|
|
40
|
-
"@xyo-network/diviner-payload-memory": "^2.
|
|
41
|
-
"@xyo-network/manifest": "^2.
|
|
42
|
-
"@xyo-network/node-memory": "^2.
|
|
35
|
+
"@xyo-network/account": "^2.89.0-rc.2",
|
|
36
|
+
"@xyo-network/archivist-memory": "^2.89.0-rc.2",
|
|
37
|
+
"@xyo-network/boundwitness-builder": "^2.89.0-rc.2",
|
|
38
|
+
"@xyo-network/diviner-boundwitness-memory": "^2.89.0-rc.2",
|
|
39
|
+
"@xyo-network/diviner-payload-memory": "^2.89.0-rc.2",
|
|
40
|
+
"@xyo-network/manifest": "^2.89.0-rc.2",
|
|
41
|
+
"@xyo-network/node-memory": "^2.89.0-rc.2",
|
|
43
42
|
"typescript": "^5.3.3"
|
|
44
43
|
},
|
|
45
44
|
"description": "Typescript/Javascript Plugins for XYO Platform",
|
|
@@ -81,6 +80,7 @@
|
|
|
81
80
|
"url": "https://github.com/XYOracleNetwork/plugins.git"
|
|
82
81
|
},
|
|
83
82
|
"sideEffects": false,
|
|
84
|
-
"version": "2.
|
|
85
|
-
"type": "module"
|
|
83
|
+
"version": "2.87.0-rc.1",
|
|
84
|
+
"type": "module",
|
|
85
|
+
"stableVersion": "2.86.5"
|
|
86
86
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'
|
|
2
2
|
import { AbstractDiviner } from '@xyo-network/diviner-abstract'
|
|
3
3
|
import { DivinerConfigSchema } from '@xyo-network/diviner-model'
|
|
4
|
-
import { PayloadHasher } from '@xyo-network/hash'
|
|
5
4
|
import {
|
|
6
5
|
ImageThumbnail,
|
|
7
6
|
ImageThumbnailResultIndex,
|
|
@@ -32,7 +31,7 @@ export class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends Ab
|
|
|
32
31
|
const imageThumbnailPayloads: ImageThumbnail[] = payloads.filter(isImageThumbnail)
|
|
33
32
|
const timestampPayloads: TimeStamp[] = payloads.filter(isTimestamp)
|
|
34
33
|
if (bws.length > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {
|
|
35
|
-
const payloadDictionary = await
|
|
34
|
+
const payloadDictionary = await PayloadBuilder.toDataHashMap(payloads)
|
|
36
35
|
// eslint-disable-next-line unicorn/no-array-reduce
|
|
37
36
|
const tuples: [BoundWitness, ImageThumbnail, TimeStamp][] = bws.reduce<[BoundWitness, ImageThumbnail, TimeStamp][]>(
|
|
38
37
|
(acc, curr) => {
|
|
@@ -53,9 +52,9 @@ export class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends Ab
|
|
|
53
52
|
const { timestamp } = timestampPayload
|
|
54
53
|
const { status } = http ?? {}
|
|
55
54
|
const success = !!imageThumbnailPayload.url // Call anything with a thumbnail url a success
|
|
56
|
-
const sources = (await
|
|
55
|
+
const sources = (await PayloadBuilder.dataHashPairs([bw, imageThumbnailPayload, timestampPayload])).map(([, hash]) => hash)
|
|
57
56
|
const urlPayload = { schema: UrlSchema, url }
|
|
58
|
-
const key = await
|
|
57
|
+
const key = await PayloadBuilder.dataHash(urlPayload)
|
|
59
58
|
const fields: ImageThumbnailResultIndexFields = { key, sources, success, timestamp }
|
|
60
59
|
if (status) fields.status = status
|
|
61
60
|
const result: ImageThumbnailResultIndex = await new PayloadBuilder<ImageThumbnailResultIndex>({ schema: ImageThumbnailResultIndexSchema })
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { exists } from '@xylabs/exists'
|
|
2
2
|
import { AbstractDiviner } from '@xyo-network/diviner-abstract'
|
|
3
3
|
import { DivinerConfigSchema } from '@xyo-network/diviner-model'
|
|
4
|
-
import { PayloadHasher } from '@xyo-network/hash'
|
|
5
4
|
import {
|
|
6
5
|
ImageThumbnailResult,
|
|
7
6
|
ImageThumbnailResultFields,
|
|
@@ -38,7 +37,7 @@ export class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDivine
|
|
|
38
37
|
imageThumbnailDivinerQueries.map(async (imageThumbnailDivinerQuery) => {
|
|
39
38
|
const { url } = imageThumbnailDivinerQuery
|
|
40
39
|
const urlPayload = await new PayloadBuilder<ImageThumbnailResult>({ schema: UrlSchema }).fields({ url }).build()
|
|
41
|
-
const key = await
|
|
40
|
+
const key = await PayloadBuilder.dataHash(urlPayload)
|
|
42
41
|
return [key, url] as const
|
|
43
42
|
}),
|
|
44
43
|
),
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { AbstractDiviner } from '@xyo-network/diviner-abstract'
|
|
2
2
|
import { DivinerConfigSchema } from '@xyo-network/diviner-model'
|
|
3
3
|
import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'
|
|
4
|
-
import { PayloadHasher } from '@xyo-network/hash'
|
|
5
4
|
import { isImageThumbnailDivinerQuery } from '@xyo-network/image-thumbnail-payload-plugin'
|
|
6
5
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
7
6
|
import { Payload } from '@xyo-network/payload-model'
|
|
@@ -29,7 +28,7 @@ export class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends Abstra
|
|
|
29
28
|
const order = payloadOrder ?? 'desc'
|
|
30
29
|
const offset = payloadOffset ?? 0
|
|
31
30
|
const urlPayload = { schema: UrlSchema, url }
|
|
32
|
-
const key = await
|
|
31
|
+
const key = await PayloadBuilder.dataHash(urlPayload)
|
|
33
32
|
const fields: Partial<ImageThumbnailResultQuery> = { key, limit, offset, order }
|
|
34
33
|
if (payloadSuccess !== undefined) fields.success = payloadSuccess
|
|
35
34
|
if (payloadStatus !== undefined) fields.status = payloadStatus
|