@xyo-network/diviner-image-thumbnail 2.99.5 → 2.99.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +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/index.ts'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing'\nimport { AttachableDivinerInstance } from '@xyo-network/diviner-model'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner implements AttachableDivinerInstance {\n static override labels: ImageThumbnailDivinerLabels = { ...super.labels, ...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 { Hash } from '@xylabs/hex'\nimport { 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, Schema, WithMeta, WithSources } 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.ts'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<WithSources<ImageThumbnailResultIndex>[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const imageThumbnailPayloads: ImageThumbnail[] = payloads.filter(isImageThumbnail)\n const timestampPayloads: TimeStamp[] = payloads.filter(isTimestamp)\n if (bws.length > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {\n const payloadDictionary = await PayloadBuilder.toDataHashMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const tuples: [BoundWitness, ImageThumbnail, TimeStamp][] = bws.reduce<[BoundWitness, ImageThumbnail, TimeStamp][]>(\n (acc, curr) => {\n const imageThumbnailIndex = curr.payload_schemas?.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) as WithMeta<ImageThumbnail> | undefined\n const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp) as WithMeta<TimeStamp>\n if (imageThumbnailPayload && timestampPayload) acc.push([curr, imageThumbnailPayload, timestampPayload])\n return acc\n },\n [] as [BoundWitness, ImageThumbnail, TimeStamp][],\n )\n const indexes = await Promise.all(\n tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {\n const { sourceUrl: url, http } = imageThumbnailPayload\n const { timestamp } = timestampPayload\n const { status } = http ?? {}\n const success = !!imageThumbnailPayload.url // Call anything with a thumbnail url a success\n const sources: Hash[] = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload])\n const urlPayload = { schema: UrlSchema, url }\n const key: Hash = await PayloadBuilder.dataHash(urlPayload)\n const fields: ImageThumbnailResultIndexFields = { key, sources, success, timestamp }\n if (status) fields.status = status\n const result = await new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({\n schema: ImageThumbnailResultIndexSchema,\n })\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, Schema } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {\n // Filter out the two operands\n const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)\n const imageThumbnailResultIndexes = payloads.filter(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<Omit<ImageThumbnailResult, 'timestamp' | 'success' | 'sources'>>({ schema: UrlSchema })\n .fields({ url })\n .build()\n const key = await PayloadBuilder.dataHash(urlPayload)\n return [key, url] as const\n }),\n ),\n )\n // Map the indexes to responses using the dictionary\n return (\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, Schema } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery.ts'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n protected override async divineHandler(\n payloads: Payload[] = [],\n ): Promise<Omit<Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>, 'timestamp'>[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const { 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: Omit<ImageThumbnailResultQuery, 'schema' | 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>> = {\n key,\n limit,\n offset,\n order,\n }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n return await new PayloadBuilder<\n Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>\n >({ schema: PayloadDivinerQuerySchema })\n .fields(fields)\n .build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { 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.ts'\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, isBoundWitnessWithMeta } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-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, Schema, WithMeta, WithSources } from '@xyo-network/payload-model'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState.ts'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config.ts'\nimport { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params.ts'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | ImageThumbnail | TimeStamp\n\n/**\n * The response from the ImageThumbnailStateToIndexCandidateDiviner\n */\nexport type ImageThumbnailStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<ImageThumbnailDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\nconst payload_schemas = [ImageThumbnailSchema, TimestampSchema]\n\n/**\n * Index candidate identity functions\n */\nconst indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailStateToIndexCandidateDiviner<\n TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n static override labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n protected static async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = payload_schemas.map(schema => bw.payload_schemas?.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 WithMeta<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])) as WithSources<WithMeta<BoundWitness>>[]\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(isBoundWitnessWithMeta).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 /**\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":["ImageThumbnailDivinerLabels","ImageThumbnailDiviner","IndexingDiviner","labels","ImageThumbnailDivinerLabels","ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner","AbstractDiviner","divineHandler","payloads","bws","filter","isBoundWitness","imageThumbnailPayloads","isImageThumbnail","timestampPayloads","isTimestamp","length","payloadDictionary","PayloadBuilder","toDataHashMap","tuples","reduce","acc","curr","imageThumbnailIndex","payload_schemas","findIndex","schema","ImageThumbnailSchema","timestampIndex","TimestampSchema","imageThumbnailHash","payload_hashes","timestampHash","imageThumbnailPayload","find","timestampPayload","push","indexes","Promise","all","map","bw","sourceUrl","url","http","timestamp","status","success","sources","dataHashes","urlPayload","UrlSchema","key","dataHash","fields","result","ImageThumbnailResultIndexSchema","build","flat","configSchemas","DivinerConfigSchema","defaultConfigSchema","labels","ImageThumbnailDivinerLabels","import_diviner_abstract","import_diviner_model","import_image_thumbnail_payload_plugin","import_payload_builder","import_url_payload_plugin","ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner","AbstractDiviner","divineHandler","payloads","imageThumbnailDivinerQueries","filter","isImageThumbnailDivinerQuery","imageThumbnailResultIndexes","isImageThumbnailResultIndex","length","keyToUrlDictionary","Object","fromEntries","Promise","all","map","imageThumbnailDivinerQuery","url","urlPayload","PayloadBuilder","schema","UrlSchema","fields","build","key","dataHash","imageThumbnailResultIndex","commonFields","ImageThumbnailResultSchema","exists","configSchemas","DivinerConfigSchema","defaultConfigSchema","labels","ImageThumbnailDivinerLabels","import_diviner_abstract","import_diviner_model","import_image_thumbnail_payload_plugin","import_payload_builder","import_url_payload_plugin","ImageThumbnailQueryToImageThumbnailIndexQueryDiviner","AbstractDiviner","divineHandler","payloads","queries","filter","isImageThumbnailDivinerQuery","length","results","Promise","all","map","query","limit","payloadLimit","offset","payloadOffset","order","payloadOrder","status","payloadStatus","success","payloadSuccess","url","urlPayload","schema","UrlSchema","key","PayloadBuilder","dataHash","fields","undefined","PayloadDivinerQuerySchema","build","configSchemas","DivinerConfigSchema","defaultConfigSchema","labels","ImageThumbnailDivinerLabels","import_diviner_payload_model","isImageThumbnailResultQuery","isPayloadOfSchemaType","PayloadDivinerQuerySchema","import_image_thumbnail_payload_plugin","ImageThumbnailStateToIndexCandidateDivinerSchema","ImageThumbnailDivinerSchema","ImageThumbnailStateToIndexCandidateDivinerConfigSchema","ImageThumbnailStateToIndexCandidateDivinerSchema","import_exists","import_boundwitness_model","import_diviner_abstract","import_image_thumbnail_payload_plugin","import_payload_builder","import_witness_timestamp","payload_schemas","ImageThumbnailSchema","TimestampSchema","indexCandidateIdentityFunctions","isImageThumbnail","isTimestamp","order","moduleName","ImageThumbnailStateToIndexCandidateDiviner","AbstractDiviner","payloadDivinerLimit","config","getPayloadsInBoundWitness","bw","archivist","indexes","map","schema","findIndex","s","hashes","index","payload_hashes","results","get","filteredResults","is","find","includes","undefined","indexCandidates","filter","exists","divineHandler","payloads","lastState","isModuleState","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","Promise","all","isBoundWitnessWithMeta","flat","nextState","name","assertEx","payloadStore","mod","resolve","ArchivistWrapper","wrap","account","DivinerWrapper","configSchemas","ImageThumbnailStateToIndexCandidateDivinerConfigSchema","defaultConfigSchema","labels","ImageThumbnailDivinerLabels"]}
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/index.ts'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing'\nimport { AttachableDivinerInstance } from '@xyo-network/diviner-model'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner implements AttachableDivinerInstance {\n static override labels: ImageThumbnailDivinerLabels = { ...super.labels, ...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 { Hash } from '@xylabs/hex'\nimport { 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, Schema, WithMeta, WithSources } 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.ts'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<WithSources<ImageThumbnailResultIndex>[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const imageThumbnailPayloads: ImageThumbnail[] = payloads.filter(isImageThumbnail)\n const timestampPayloads: TimeStamp[] = payloads.filter(isTimestamp)\n if (bws.length > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {\n const payloadDictionary = await PayloadBuilder.toDataHashMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const tuples: [BoundWitness, ImageThumbnail, TimeStamp][] = bws.reduce<[BoundWitness, ImageThumbnail, TimeStamp][]>(\n (acc, curr) => {\n const imageThumbnailIndex = curr.payload_schemas?.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) as WithMeta<ImageThumbnail> | undefined\n const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp) as WithMeta<TimeStamp>\n if (imageThumbnailPayload && timestampPayload) acc.push([curr, imageThumbnailPayload, timestampPayload])\n return acc\n },\n [] as [BoundWitness, ImageThumbnail, TimeStamp][],\n )\n const indexes = await Promise.all(\n tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {\n const { sourceUrl: url, http } = imageThumbnailPayload\n const { timestamp } = timestampPayload\n const { status } = http ?? {}\n const success = !!imageThumbnailPayload.url // Call anything with a thumbnail url a success\n const sources: Hash[] = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload])\n const urlPayload = { schema: UrlSchema, url }\n const key: Hash = await PayloadBuilder.dataHash(urlPayload)\n const fields: ImageThumbnailResultIndexFields = { key, sources, success, timestamp }\n if (status) fields.status = status\n const result = await new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({\n schema: ImageThumbnailResultIndexSchema,\n })\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, Schema } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {\n // Filter out the two operands\n const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)\n const imageThumbnailResultIndexes = payloads.filter(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<Omit<ImageThumbnailResult, 'timestamp' | 'success' | 'sources'>>({ schema: UrlSchema })\n .fields({ url })\n .build()\n const key = await PayloadBuilder.dataHash(urlPayload)\n return [key, url] as const\n }),\n ),\n )\n // Map the indexes to responses using the dictionary\n return (\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, Schema } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery.ts'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n protected override async divineHandler(\n payloads: Payload[] = [],\n ): Promise<Omit<Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>, 'timestamp'>[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const { 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: Omit<ImageThumbnailResultQuery, 'schema' | 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>> = {\n key,\n limit,\n offset,\n order,\n }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n return await new PayloadBuilder<\n Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>\n >({ schema: PayloadDivinerQuerySchema })\n .fields(fields)\n .build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { 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.ts'\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, isBoundWitnessWithMeta } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-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, Schema, WithMeta, WithSources } from '@xyo-network/payload-model'\nimport { isTimestamp, TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport { ImageThumbnailDivinerLabels, ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState.ts'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config.ts'\nimport { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params.ts'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | ImageThumbnail | TimeStamp\n\n/**\n * The response from the ImageThumbnailStateToIndexCandidateDiviner\n */\nexport type ImageThumbnailStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<ImageThumbnailDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\nconst payload_schemas = [ImageThumbnailSchema, TimestampSchema]\n\n/**\n * Index candidate identity functions\n */\nconst indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailStateToIndexCandidateDiviner<\n TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n static override labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n protected static async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = payload_schemas.map(schema => bw.payload_schemas?.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 WithMeta<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])) as WithSources<WithMeta<BoundWitness>>[]\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(isBoundWitnessWithMeta).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 /**\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_image_thumbnail_payload_plugin","import_payload_builder","import_witness_timestamp"]}
@@ -1,11 +1,3 @@
1
- var __defProp = Object.defineProperty;
2
- var __getProtoOf = Object.getPrototypeOf;
3
- var __reflectGet = Reflect.get;
4
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
7
- var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
8
-
9
1
  // src/Diviner/Diviner.ts
10
2
  import { IndexingDiviner } from "@xyo-network/diviner-indexing";
11
3
 
@@ -15,150 +7,120 @@ var ImageThumbnailDivinerLabels = {
15
7
  };
16
8
 
17
9
  // src/Diviner/Diviner.ts
18
- var _ImageThumbnailDiviner = class _ImageThumbnailDiviner extends IndexingDiviner {
10
+ var ImageThumbnailDiviner = class extends IndexingDiviner {
11
+ static labels = { ...super.labels, ...ImageThumbnailDivinerLabels };
19
12
  };
20
- __name(_ImageThumbnailDiviner, "ImageThumbnailDiviner");
21
- __publicField(_ImageThumbnailDiviner, "labels", {
22
- ...__superGet(_ImageThumbnailDiviner, _ImageThumbnailDiviner, "labels"),
23
- ...ImageThumbnailDivinerLabels
24
- });
25
- var ImageThumbnailDiviner = _ImageThumbnailDiviner;
26
13
 
27
14
  // src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts
28
15
  import { isBoundWitness } from "@xyo-network/boundwitness-model";
29
16
  import { AbstractDiviner } from "@xyo-network/diviner-abstract";
30
17
  import { DivinerConfigSchema } from "@xyo-network/diviner-model";
31
- import { ImageThumbnailResultIndexSchema, ImageThumbnailSchema, isImageThumbnail } from "@xyo-network/image-thumbnail-payload-plugin";
18
+ import {
19
+ ImageThumbnailResultIndexSchema,
20
+ ImageThumbnailSchema,
21
+ isImageThumbnail
22
+ } from "@xyo-network/image-thumbnail-payload-plugin";
32
23
  import { PayloadBuilder } from "@xyo-network/payload-builder";
33
24
  import { UrlSchema } from "@xyo-network/url-payload-plugin";
34
25
  import { isTimestamp, TimestampSchema } from "@xyo-network/witness-timestamp";
35
- var _ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class _ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {
26
+ var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends AbstractDiviner {
27
+ static configSchemas = [...super.configSchemas, DivinerConfigSchema];
28
+ static defaultConfigSchema = DivinerConfigSchema;
29
+ static labels = {
30
+ ...super.labels,
31
+ ...ImageThumbnailDivinerLabels,
32
+ "network.xyo.diviner.stage": "indexCandidateToIndexDiviner"
33
+ };
36
34
  async divineHandler(payloads = []) {
37
35
  const bws = payloads.filter(isBoundWitness);
38
36
  const imageThumbnailPayloads = payloads.filter(isImageThumbnail);
39
37
  const timestampPayloads = payloads.filter(isTimestamp);
40
38
  if (bws.length > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {
41
39
  const payloadDictionary = await PayloadBuilder.toDataHashMap(payloads);
42
- const tuples = bws.reduce((acc, curr) => {
43
- var _a, _b, _c, _d;
44
- const imageThumbnailIndex = (_a = curr.payload_schemas) == null ? void 0 : _a.findIndex((schema) => schema === ImageThumbnailSchema);
45
- const timestampIndex = (_b = curr.payload_schemas) == null ? void 0 : _b.findIndex((schema) => schema === TimestampSchema);
46
- const imageThumbnailHash = (_c = curr.payload_hashes) == null ? void 0 : _c[imageThumbnailIndex];
47
- const timestampHash = (_d = curr.payload_hashes) == null ? void 0 : _d[timestampIndex];
48
- const imageThumbnailPayload = [
49
- payloadDictionary[imageThumbnailHash]
50
- ].find(isImageThumbnail);
51
- const timestampPayload = [
52
- payloadDictionary[timestampHash]
53
- ].find(isTimestamp);
54
- if (imageThumbnailPayload && timestampPayload) acc.push([
55
- curr,
56
- imageThumbnailPayload,
57
- timestampPayload
58
- ]);
59
- return acc;
60
- }, []);
61
- const indexes = await Promise.all(tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {
62
- const { sourceUrl: url, http } = imageThumbnailPayload;
63
- const { timestamp } = timestampPayload;
64
- const { status } = http ?? {};
65
- const success = !!imageThumbnailPayload.url;
66
- const sources = await PayloadBuilder.dataHashes([
67
- bw,
68
- imageThumbnailPayload,
69
- timestampPayload
70
- ]);
71
- const urlPayload = {
72
- schema: UrlSchema,
73
- url
74
- };
75
- const key = await PayloadBuilder.dataHash(urlPayload);
76
- const fields = {
77
- key,
78
- sources,
79
- success,
80
- timestamp
81
- };
82
- if (status) fields.status = status;
83
- const result = await new PayloadBuilder({
84
- schema: ImageThumbnailResultIndexSchema
85
- }).fields(fields).build();
86
- return [
87
- result
88
- ];
89
- }));
40
+ const tuples = bws.reduce(
41
+ (acc, curr) => {
42
+ var _a, _b, _c, _d;
43
+ const imageThumbnailIndex = (_a = curr.payload_schemas) == null ? void 0 : _a.findIndex((schema) => schema === ImageThumbnailSchema);
44
+ const timestampIndex = (_b = curr.payload_schemas) == null ? void 0 : _b.findIndex((schema) => schema === TimestampSchema);
45
+ const imageThumbnailHash = (_c = curr.payload_hashes) == null ? void 0 : _c[imageThumbnailIndex];
46
+ const timestampHash = (_d = curr.payload_hashes) == null ? void 0 : _d[timestampIndex];
47
+ const imageThumbnailPayload = [payloadDictionary[imageThumbnailHash]].find(isImageThumbnail);
48
+ const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp);
49
+ if (imageThumbnailPayload && timestampPayload) acc.push([curr, imageThumbnailPayload, timestampPayload]);
50
+ return acc;
51
+ },
52
+ []
53
+ );
54
+ const indexes = await Promise.all(
55
+ tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {
56
+ const { sourceUrl: url, http } = imageThumbnailPayload;
57
+ const { timestamp } = timestampPayload;
58
+ const { status } = http ?? {};
59
+ const success = !!imageThumbnailPayload.url;
60
+ const sources = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload]);
61
+ const urlPayload = { schema: UrlSchema, url };
62
+ const key = await PayloadBuilder.dataHash(urlPayload);
63
+ const fields = { key, sources, success, timestamp };
64
+ if (status) fields.status = status;
65
+ const result = await new PayloadBuilder({
66
+ schema: ImageThumbnailResultIndexSchema
67
+ }).fields(fields).build();
68
+ return [result];
69
+ })
70
+ );
90
71
  return indexes.flat();
91
72
  }
92
73
  return [];
93
74
  }
94
75
  };
95
- __name(_ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner, "ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner");
96
- __publicField(_ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner, "configSchemas", [
97
- ...__superGet(_ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner, _ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner, "configSchemas"),
98
- DivinerConfigSchema
99
- ]);
100
- __publicField(_ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner, "defaultConfigSchema", DivinerConfigSchema);
101
- __publicField(_ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner, "labels", {
102
- ...__superGet(_ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner, _ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner, "labels"),
103
- ...ImageThumbnailDivinerLabels,
104
- "network.xyo.diviner.stage": "indexCandidateToIndexDiviner"
105
- });
106
- var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = _ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner;
107
76
 
108
77
  // src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts
109
78
  import { exists } from "@xylabs/exists";
110
79
  import { AbstractDiviner as AbstractDiviner2 } from "@xyo-network/diviner-abstract";
111
80
  import { DivinerConfigSchema as DivinerConfigSchema2 } from "@xyo-network/diviner-model";
112
- import { ImageThumbnailResultSchema, isImageThumbnailDivinerQuery, isImageThumbnailResultIndex } from "@xyo-network/image-thumbnail-payload-plugin";
81
+ import {
82
+ ImageThumbnailResultSchema,
83
+ isImageThumbnailDivinerQuery,
84
+ isImageThumbnailResultIndex
85
+ } from "@xyo-network/image-thumbnail-payload-plugin";
113
86
  import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
114
87
  import { UrlSchema as UrlSchema2 } from "@xyo-network/url-payload-plugin";
115
- var _ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner = class _ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner2 {
88
+ var ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner = class extends AbstractDiviner2 {
89
+ static configSchemas = [...super.configSchemas, DivinerConfigSchema2];
90
+ static defaultConfigSchema = DivinerConfigSchema2;
91
+ static labels = {
92
+ ...super.labels,
93
+ ...ImageThumbnailDivinerLabels,
94
+ "network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner"
95
+ };
116
96
  async divineHandler(payloads = []) {
117
97
  const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery);
118
98
  const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndex);
119
99
  if (imageThumbnailDivinerQueries.length > 0 && imageThumbnailResultIndexes.length > 0) {
120
- const keyToUrlDictionary = Object.fromEntries(await Promise.all(imageThumbnailDivinerQueries.map(async (imageThumbnailDivinerQuery) => {
121
- const { url } = imageThumbnailDivinerQuery;
122
- const urlPayload = await new PayloadBuilder2({
123
- schema: UrlSchema2
124
- }).fields({
125
- url
126
- }).build();
127
- const key = await PayloadBuilder2.dataHash(urlPayload);
128
- return [
129
- key,
130
- url
131
- ];
132
- })));
133
- return (await Promise.all(imageThumbnailResultIndexes.map(async (imageThumbnailResultIndex) => {
134
- const { key, schema, ...commonFields } = imageThumbnailResultIndex;
135
- const url = keyToUrlDictionary == null ? void 0 : keyToUrlDictionary[key];
136
- if (url) {
137
- const fields = {
138
- ...commonFields,
139
- url
140
- };
141
- return await new PayloadBuilder2({
142
- schema: ImageThumbnailResultSchema
143
- }).fields(fields).build();
144
- }
145
- }))).filter(exists);
100
+ const keyToUrlDictionary = Object.fromEntries(
101
+ await Promise.all(
102
+ imageThumbnailDivinerQueries.map(async (imageThumbnailDivinerQuery) => {
103
+ const { url } = imageThumbnailDivinerQuery;
104
+ const urlPayload = await new PayloadBuilder2({ schema: UrlSchema2 }).fields({ url }).build();
105
+ const key = await PayloadBuilder2.dataHash(urlPayload);
106
+ return [key, url];
107
+ })
108
+ )
109
+ );
110
+ return (await Promise.all(
111
+ imageThumbnailResultIndexes.map(async (imageThumbnailResultIndex) => {
112
+ const { key, schema, ...commonFields } = imageThumbnailResultIndex;
113
+ const url = keyToUrlDictionary == null ? void 0 : keyToUrlDictionary[key];
114
+ if (url) {
115
+ const fields = { ...commonFields, url };
116
+ return await new PayloadBuilder2({ schema: ImageThumbnailResultSchema }).fields(fields).build();
117
+ }
118
+ })
119
+ )).filter(exists);
146
120
  }
147
121
  return [];
148
122
  }
149
123
  };
150
- __name(_ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner, "ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner");
151
- __publicField(_ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner, "configSchemas", [
152
- ...__superGet(_ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner, _ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner, "configSchemas"),
153
- DivinerConfigSchema2
154
- ]);
155
- __publicField(_ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner, "defaultConfigSchema", DivinerConfigSchema2);
156
- __publicField(_ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner, "labels", {
157
- ...__superGet(_ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner, _ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner, "labels"),
158
- ...ImageThumbnailDivinerLabels,
159
- "network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner"
160
- });
161
- var ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner = _ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner;
162
124
 
163
125
  // src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts
164
126
  import { AbstractDiviner as AbstractDiviner3 } from "@xyo-network/diviner-abstract";
@@ -167,49 +129,41 @@ import { PayloadDivinerQuerySchema } from "@xyo-network/diviner-payload-model";
167
129
  import { isImageThumbnailDivinerQuery as isImageThumbnailDivinerQuery2 } from "@xyo-network/image-thumbnail-payload-plugin";
168
130
  import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
169
131
  import { UrlSchema as UrlSchema3 } from "@xyo-network/url-payload-plugin";
170
- var _ImageThumbnailQueryToImageThumbnailIndexQueryDiviner = class _ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner3 {
132
+ var ImageThumbnailQueryToImageThumbnailIndexQueryDiviner = class extends AbstractDiviner3 {
133
+ static configSchemas = [...super.configSchemas, DivinerConfigSchema3];
134
+ static defaultConfigSchema = DivinerConfigSchema3;
135
+ static labels = {
136
+ ...super.labels,
137
+ ...ImageThumbnailDivinerLabels,
138
+ "network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner"
139
+ };
171
140
  async divineHandler(payloads = []) {
172
141
  const queries = payloads.filter(isImageThumbnailDivinerQuery2);
173
142
  if (queries.length > 0) {
174
- const results = await Promise.all(queries.map(async (query) => {
175
- const { limit: payloadLimit, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url } = query;
176
- const limit = payloadLimit ?? 1;
177
- const order2 = payloadOrder ?? "desc";
178
- const offset = payloadOffset ?? 0;
179
- const urlPayload = {
180
- schema: UrlSchema3,
181
- url
182
- };
183
- const key = await PayloadBuilder3.dataHash(urlPayload);
184
- const fields = {
185
- key,
186
- limit,
187
- offset,
188
- order: order2
189
- };
190
- if (payloadSuccess !== void 0) fields.success = payloadSuccess;
191
- if (payloadStatus !== void 0) fields.status = payloadStatus;
192
- return await new PayloadBuilder3({
193
- schema: PayloadDivinerQuerySchema
194
- }).fields(fields).build();
195
- }));
143
+ const results = await Promise.all(
144
+ queries.map(async (query) => {
145
+ const { limit: payloadLimit, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url } = query;
146
+ const limit = payloadLimit ?? 1;
147
+ const order2 = payloadOrder ?? "desc";
148
+ const offset = payloadOffset ?? 0;
149
+ const urlPayload = { schema: UrlSchema3, url };
150
+ const key = await PayloadBuilder3.dataHash(urlPayload);
151
+ const fields = {
152
+ key,
153
+ limit,
154
+ offset,
155
+ order: order2
156
+ };
157
+ if (payloadSuccess !== void 0) fields.success = payloadSuccess;
158
+ if (payloadStatus !== void 0) fields.status = payloadStatus;
159
+ return await new PayloadBuilder3({ schema: PayloadDivinerQuerySchema }).fields(fields).build();
160
+ })
161
+ );
196
162
  return results;
197
163
  }
198
164
  return [];
199
165
  }
200
166
  };
201
- __name(_ImageThumbnailQueryToImageThumbnailIndexQueryDiviner, "ImageThumbnailQueryToImageThumbnailIndexQueryDiviner");
202
- __publicField(_ImageThumbnailQueryToImageThumbnailIndexQueryDiviner, "configSchemas", [
203
- ...__superGet(_ImageThumbnailQueryToImageThumbnailIndexQueryDiviner, _ImageThumbnailQueryToImageThumbnailIndexQueryDiviner, "configSchemas"),
204
- DivinerConfigSchema3
205
- ]);
206
- __publicField(_ImageThumbnailQueryToImageThumbnailIndexQueryDiviner, "defaultConfigSchema", DivinerConfigSchema3);
207
- __publicField(_ImageThumbnailQueryToImageThumbnailIndexQueryDiviner, "labels", {
208
- ...__superGet(_ImageThumbnailQueryToImageThumbnailIndexQueryDiviner, _ImageThumbnailQueryToImageThumbnailIndexQueryDiviner, "labels"),
209
- ...ImageThumbnailDivinerLabels,
210
- "network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner"
211
- });
212
- var ImageThumbnailQueryToImageThumbnailIndexQueryDiviner = _ImageThumbnailQueryToImageThumbnailIndexQueryDiviner;
213
167
 
214
168
  // src/Diviner/ImageThumbnailResultQuery.ts
215
169
  import { PayloadDivinerQuerySchema as PayloadDivinerQuerySchema2 } from "@xyo-network/diviner-payload-model";
@@ -235,17 +189,18 @@ import { ImageThumbnailSchema as ImageThumbnailSchema2, isImageThumbnail as isIm
235
189
  import { isModuleState, ModuleStateSchema } from "@xyo-network/module-model";
236
190
  import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
237
191
  import { isTimestamp as isTimestamp2, TimestampSchema as TimestampSchema2 } from "@xyo-network/witness-timestamp";
238
- var payload_schemas = [
239
- ImageThumbnailSchema2,
240
- TimestampSchema2
241
- ];
242
- var indexCandidateIdentityFunctions = [
243
- isImageThumbnail2,
244
- isTimestamp2
245
- ];
192
+ var payload_schemas = [ImageThumbnailSchema2, TimestampSchema2];
193
+ var indexCandidateIdentityFunctions = [isImageThumbnail2, isTimestamp2];
246
194
  var order = "asc";
247
195
  var moduleName = "ImageThumbnailStateToIndexCandidateDiviner";
248
- var _ImageThumbnailStateToIndexCandidateDiviner = class _ImageThumbnailStateToIndexCandidateDiviner extends AbstractDiviner4 {
196
+ var ImageThumbnailStateToIndexCandidateDiviner = class _ImageThumbnailStateToIndexCandidateDiviner extends AbstractDiviner4 {
197
+ static configSchemas = [...super.configSchemas, ImageThumbnailStateToIndexCandidateDivinerConfigSchema];
198
+ static defaultConfigSchema = ImageThumbnailStateToIndexCandidateDivinerConfigSchema;
199
+ static labels = {
200
+ ...super.labels,
201
+ ...ImageThumbnailDivinerLabels,
202
+ "network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
203
+ };
249
204
  get payloadDivinerLimit() {
250
205
  return this.config.payloadDivinerLimit ?? 1e3;
251
206
  }
@@ -262,55 +217,27 @@ var _ImageThumbnailStateToIndexCandidateDiviner = class _ImageThumbnailStateToIn
262
217
  const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is));
263
218
  if (filteredResults.includes(void 0)) return void 0;
264
219
  const indexCandidates = filteredResults.filter(exists2);
265
- return [
266
- bw,
267
- ...indexCandidates
268
- ];
220
+ return [bw, ...indexCandidates];
269
221
  }
270
222
  async divineHandler(payloads = []) {
271
223
  const lastState = payloads.find(isModuleState);
272
- if (!lastState) return [
273
- {
274
- schema: ModuleStateSchema,
275
- state: {
276
- offset: 0
277
- }
278
- }
279
- ];
224
+ if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }];
280
225
  const { offset } = lastState.state;
281
226
  const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore();
282
- const query = await new PayloadBuilder4({
283
- schema: BoundWitnessDivinerQuerySchema
284
- }).fields({
285
- limit: this.payloadDivinerLimit,
286
- offset,
287
- order,
288
- payload_schemas
289
- }).build();
290
- const batch = await boundWitnessDiviner.divine([
291
- query
292
- ]);
293
- if (batch.length === 0) return [
294
- lastState
295
- ];
227
+ const query = await new PayloadBuilder4({ schema: BoundWitnessDivinerQuerySchema }).fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas }).build();
228
+ const batch = await boundWitnessDiviner.divine([query]);
229
+ if (batch.length === 0) return [lastState];
296
230
  const sourceArchivist = await this.getArchivistForStore();
297
- const indexCandidates = (await Promise.all(batch.filter(isBoundWitnessWithMeta).map((bw) => _ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)))).filter(exists2).flat();
298
- const nextState = {
299
- schema: ModuleStateSchema,
300
- state: {
301
- ...lastState.state,
302
- offset: offset + batch.length
303
- }
304
- };
305
- return [
306
- nextState,
307
- ...indexCandidates
308
- ];
231
+ const indexCandidates = (await Promise.all(
232
+ batch.filter(isBoundWitnessWithMeta).map((bw) => _ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist))
233
+ )).filter(exists2).flat();
234
+ const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } };
235
+ return [nextState, ...indexCandidates];
309
236
  }
310
237
  /**
311
- * Retrieves the archivist for the payloadStore
312
- * @returns The archivist for the payloadStore
313
- */
238
+ * Retrieves the archivist for the payloadStore
239
+ * @returns The archivist for the payloadStore
240
+ */
314
241
  async getArchivistForStore() {
315
242
  var _a, _b;
316
243
  const name = assertEx((_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`);
@@ -318,28 +245,19 @@ var _ImageThumbnailStateToIndexCandidateDiviner = class _ImageThumbnailStateToIn
318
245
  return ArchivistWrapper.wrap(mod, this.account);
319
246
  }
320
247
  /**
321
- * Retrieves the BoundWitness Diviner for the payloadStore
322
- * @returns The BoundWitness Diviner for the payloadStore
323
- */
248
+ * Retrieves the BoundWitness Diviner for the payloadStore
249
+ * @returns The BoundWitness Diviner for the payloadStore
250
+ */
324
251
  async getBoundWitnessDivinerForStore() {
325
252
  var _a, _b;
326
- const name = assertEx((_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.boundWitnessDiviner, () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`);
253
+ const name = assertEx(
254
+ (_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.boundWitnessDiviner,
255
+ () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`
256
+ );
327
257
  const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.boundWitnessDiviner`);
328
258
  return DivinerWrapper.wrap(mod, this.account);
329
259
  }
330
260
  };
331
- __name(_ImageThumbnailStateToIndexCandidateDiviner, "ImageThumbnailStateToIndexCandidateDiviner");
332
- __publicField(_ImageThumbnailStateToIndexCandidateDiviner, "configSchemas", [
333
- ...__superGet(_ImageThumbnailStateToIndexCandidateDiviner, _ImageThumbnailStateToIndexCandidateDiviner, "configSchemas"),
334
- ImageThumbnailStateToIndexCandidateDivinerConfigSchema
335
- ]);
336
- __publicField(_ImageThumbnailStateToIndexCandidateDiviner, "defaultConfigSchema", ImageThumbnailStateToIndexCandidateDivinerConfigSchema);
337
- __publicField(_ImageThumbnailStateToIndexCandidateDiviner, "labels", {
338
- ...__superGet(_ImageThumbnailStateToIndexCandidateDiviner, _ImageThumbnailStateToIndexCandidateDiviner, "labels"),
339
- ...ImageThumbnailDivinerLabels,
340
- "network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
341
- });
342
- var ImageThumbnailStateToIndexCandidateDiviner = _ImageThumbnailStateToIndexCandidateDiviner;
343
261
  export {
344
262
  ImageThumbnailDiviner,
345
263
  ImageThumbnailDivinerLabels,