@xyo-network/diviner-image-thumbnail 7.0.1 → 7.0.2

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.
@@ -25,7 +25,7 @@ export declare const ImageThumbnailResultQueryZod: z.ZodMiniObject<{
25
25
  limit: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
26
26
  order: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniLiteral<"asc">, z.ZodMiniLiteral<"desc">]>>;
27
27
  schemas: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniCustom<import("@xyo-network/sdk-protocol").Schema, import("@xyo-network/sdk-protocol").Schema>>>;
28
- key: z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<import("@xylabs/sdk").BrandedHash, string>>;
28
+ key: z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<import("@ariestools/sdk").BrandedHash, string>>;
29
29
  status: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
30
30
  success: z.ZodMiniBoolean<boolean>;
31
31
  timestamp: z.ZodMiniNumber<number>;
@@ -38,7 +38,7 @@ export declare const isImageThumbnailResultQuery: <T>(value: T) => value is T &
38
38
  schema: string & {
39
39
  readonly __schema: true;
40
40
  };
41
- key: import("@xylabs/sdk").BrandedHash;
41
+ key: import("@ariestools/sdk").BrandedHash;
42
42
  success: boolean;
43
43
  timestamp: number;
44
44
  address?: import("@xyo-network/sdk-protocol").XyoQuantAddress | (Lowercase<string> & {
@@ -64,7 +64,7 @@ export declare const asImageThumbnailResultQuery: {
64
64
  schema: string & {
65
65
  readonly __schema: true;
66
66
  };
67
- key: import("@xylabs/sdk").BrandedHash;
67
+ key: import("@ariestools/sdk").BrandedHash;
68
68
  success: boolean;
69
69
  timestamp: number;
70
70
  address?: import("@xyo-network/sdk-protocol").XyoQuantAddress | (Lowercase<string> & {
@@ -85,11 +85,11 @@ export declare const asImageThumbnailResultQuery: {
85
85
  schemas?: import("@xyo-network/sdk-protocol").Schema[] | undefined;
86
86
  status?: number | undefined;
87
87
  }) | undefined;
88
- <T>(value: T, assert: import("@xylabs/sdk").ZodFactoryConfig): T & {
88
+ <T>(value: T, assert: import("@ariestools/sdk").ZodFactoryConfig): T & {
89
89
  schema: string & {
90
90
  readonly __schema: true;
91
91
  };
92
- key: import("@xylabs/sdk").BrandedHash;
92
+ key: import("@ariestools/sdk").BrandedHash;
93
93
  success: boolean;
94
94
  timestamp: number;
95
95
  address?: import("@xyo-network/sdk-protocol").XyoQuantAddress | (Lowercase<string> & {
@@ -116,7 +116,7 @@ export declare const toImageThumbnailResultQuery: {
116
116
  schema: string & {
117
117
  readonly __schema: true;
118
118
  };
119
- key: import("@xylabs/sdk").BrandedHash;
119
+ key: import("@ariestools/sdk").BrandedHash;
120
120
  success: boolean;
121
121
  timestamp: number;
122
122
  address?: import("@xyo-network/sdk-protocol").XyoQuantAddress | (Lowercase<string> & {
@@ -137,11 +137,11 @@ export declare const toImageThumbnailResultQuery: {
137
137
  schemas?: import("@xyo-network/sdk-protocol").Schema[] | undefined;
138
138
  status?: number | undefined;
139
139
  }) | undefined;
140
- <T>(value: T, assert: import("@xylabs/sdk").ZodFactoryConfig): T & {
140
+ <T>(value: T, assert: import("@ariestools/sdk").ZodFactoryConfig): T & {
141
141
  schema: string & {
142
142
  readonly __schema: true;
143
143
  };
144
- key: import("@xylabs/sdk").BrandedHash;
144
+ key: import("@ariestools/sdk").BrandedHash;
145
145
  success: boolean;
146
146
  timestamp: number;
147
147
  address?: import("@xyo-network/sdk-protocol").XyoQuantAddress | (Lowercase<string> & {
@@ -77,7 +77,7 @@ var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends Abs
77
77
  };
78
78
 
79
79
  // src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts
80
- import { exists } from "@xylabs/sdk";
80
+ import { exists } from "@ariestools/sdk";
81
81
  import {
82
82
  ImageThumbnailResultSchema,
83
83
  isImageThumbnailDivinerQuery,
@@ -187,7 +187,7 @@ import {
187
187
  zodAsFactory,
188
188
  zodIsFactory,
189
189
  zodToFactory
190
- } from "@xylabs/sdk";
190
+ } from "@ariestools/sdk";
191
191
  import { PayloadDivinerQueryPayloadZod } from "@xyo-network/diviner-payload-model";
192
192
  import { ImageThumbnailResultIndexZod } from "@xyo-network/image-thumbnail-payload-plugin";
193
193
  import * as z from "zod/mini";
@@ -218,7 +218,7 @@ import {
218
218
  assertEx,
219
219
  exists as exists2,
220
220
  filterAs
221
- } from "@xylabs/sdk";
221
+ } from "@ariestools/sdk";
222
222
  import { ImageThumbnailSchema as ImageThumbnailSchema2, isImageThumbnail as isImageThumbnail2 } from "@xyo-network/image-thumbnail-payload-plugin";
223
223
  import {
224
224
  AbstractDiviner as AbstractDiviner4,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Diviner/Diviner.ts", "../../src/Diviner/ImageThumbnailDivinerLabels.ts", "../../src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts", "../../src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts", "../../src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts", "../../src/Diviner/ImageThumbnailResultQuery.ts", "../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.ts", "../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.ts", "../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],
4
- "sourcesContent": ["import { IndexingDiviner } from '@xyo-network/diviner-indexing'\nimport type { AttachableDivinerInstance } from '@xyo-network/sdk'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner implements AttachableDivinerInstance {\n static override readonly labels: ImageThumbnailDivinerLabels = { ...super.labels, ...ImageThumbnailDivinerLabels }\n}\n", "import type { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'\nimport type { Labels } from '@xyo-network/sdk'\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport interface ImageThumbnailDivinerLabels extends Labels {\n 'network.xyo.image.thumbnail': 'diviner'\n}\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport const ImageThumbnailDivinerLabels: ImageThumbnailDivinerLabels = { 'network.xyo.image.thumbnail': 'diviner' }\n\n/**\n * Labels for Image Thumbnail Diviner Stage Diviners\n */\nexport type ImageThumbnailDivinerStageLabels = ImageThumbnailDivinerLabels & Record<DivinerStageSchema, IndexingDivinerStage>\n", "import type { Hash } from '@xylabs/sdk'\nimport type {\n ImageThumbnail,\n ImageThumbnailResultIndex,\n ImageThumbnailResultIndexFields,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultIndexSchema,\n ImageThumbnailSchema,\n isImageThumbnail,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport type {\n BoundWitness,\n Payload, Schema, WithSources,\n} from '@xyo-network/sdk'\nimport {\n AbstractDiviner, DivinerConfigSchema, isBoundWitness, PayloadBuilder,\n} from '@xyo-network/sdk'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\nimport type { Timestamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<WithSources<ImageThumbnailResultIndex>[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const imageThumbnailPayloads: ImageThumbnail[] = payloads.filter(isImageThumbnail)\n const timestampPayloads: Timestamp[] = payloads.filter(isTimestamp)\n if (bws.length > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {\n const payloadDictionary: Record<string, Payload> = await PayloadBuilder.toDataHashMap(payloads)\n\n const tuples: [BoundWitness, ImageThumbnail, Timestamp][] = bws.reduce<[BoundWitness, ImageThumbnail, Timestamp][]>(\n (acc, curr) => {\n const imageThumbnailIndex = curr.payload_schemas?.indexOf(ImageThumbnailSchema)\n const timestampIndex = curr.payload_schemas?.indexOf(TimestampSchema)\n const imageThumbnailHash: string | undefined = imageThumbnailIndex == null ? undefined : curr.payload_hashes?.[imageThumbnailIndex]\n const timestampHash: string | undefined = timestampIndex == null ? undefined : curr.payload_hashes?.[timestampIndex]\n const imageThumbnailPayload = imageThumbnailHash == null ? undefined : [payloadDictionary[imageThumbnailHash]].find(isImageThumbnail)\n const timestampPayload = timestampHash == null ? undefined : [payloadDictionary[timestampHash]].find(isTimestamp)\n if (imageThumbnailPayload != null && timestampPayload != null) 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?.length ?? 0) > 0 // Call anything with a thumbnail URL a success\n const $sources: Hash[] = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload])\n const urlPayload = { schema: UrlSchema, url }\n const key: Hash = await PayloadBuilder.dataHash(urlPayload)\n const fields: ImageThumbnailResultIndexFields = {\n key, success, timestamp,\n }\n if (status != null) fields.status = status\n const builder = new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({ schema: ImageThumbnailResultIndexSchema })\n const result = builder\n .fields({ ...fields }).meta({ $sources })\n .build()\n return [result]\n }),\n )\n return indexes.flat()\n }\n return []\n }\n}\n", "import { exists } from '@xylabs/sdk'\nimport type {\n ImageThumbnailResult,\n ImageThumbnailResultFields,\n ImageThumbnailResultIndex,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultSchema,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResultIndex,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport type {\n Payload, Schema, WithSources,\n} from '@xyo-network/sdk'\nimport {\n AbstractDiviner, DivinerConfigSchema, PayloadBuilder,\n} from '@xyo-network/sdk'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {\n // Filter out the two operands\n const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)\n const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndex) as WithSources<ImageThumbnailResultIndex>[]\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 urlPayloadBuilder = new PayloadBuilder<Omit<ImageThumbnailResult, 'timestamp' | 'success' | 'sources'>>({ schema: UrlSchema })\n const urlPayload = urlPayloadBuilder\n .fields({ url })\n .build()\n const key = await PayloadBuilder.dataHash(urlPayload)\n return [key, url] as const\n }),\n ),\n )\n // Map the indexes to responses using the dictionary\n return imageThumbnailResultIndexes.map((imageThumbnailResultIndex) => {\n const {\n\n key, schema, $sources, ...commonFields\n } = imageThumbnailResultIndex\n const keyString: string = key\n const url = keyToUrlDictionary[keyString]\n if (url != null && url !== '') {\n const fields: ImageThumbnailResultFields = { ...commonFields, url }\n const builder = new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema })\n return builder.fields(fields).meta({ $sources }).build()\n }\n }).filter(exists)\n }\n return []\n }\n}\n", "import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isImageThumbnailDivinerQuery } from '@xyo-network/image-thumbnail-payload-plugin'\nimport type { Payload, Schema } from '@xyo-network/sdk'\nimport {\n AbstractDiviner, DivinerConfigSchema, PayloadBuilder,\n} from '@xyo-network/sdk'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery.ts'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n protected override async divineHandler(\n payloads: Payload[] = [],\n ): Promise<Omit<Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>, 'timestamp'>[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const {\n limit: payloadLimit, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url,\n } = query\n const limit = payloadLimit ?? 1\n const order = payloadOrder ?? 'desc'\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadBuilder.dataHash(urlPayload)\n const fields: Omit<ImageThumbnailResultQuery, 'schema' | 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>> = {\n key,\n limit,\n order,\n }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n const builder = new PayloadBuilder<\n Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>\n >({ schema: PayloadDivinerQuerySchema })\n return builder\n .fields(fields)\n .build()\n }),\n )\n return results\n }\n return []\n }\n}\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk'\nimport { PayloadDivinerQueryPayloadZod } from '@xyo-network/diviner-payload-model'\nimport type { ImageThumbnailResultIndex } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { ImageThumbnailResultIndexZod } from '@xyo-network/image-thumbnail-payload-plugin'\nimport * as z from 'zod/mini'\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 const ImageThumbnailResultQueryZod = z.extend(PayloadDivinerQueryPayloadZod, {\n key: ImageThumbnailResultIndexZod.shape.key,\n status: ImageThumbnailResultIndexZod.shape.status,\n success: ImageThumbnailResultIndexZod.shape.success,\n timestamp: ImageThumbnailResultIndexZod.shape.timestamp,\n})\n\nexport type ImageThumbnailResultQuery = z.infer<typeof ImageThumbnailResultQueryZod>\n\n/**\n * A type guard for ImageThumbnailResultQuery\n */\nexport const isImageThumbnailResultQuery = zodIsFactory(ImageThumbnailResultQueryZod)\nexport const asImageThumbnailResultQuery = zodAsFactory(ImageThumbnailResultQueryZod, 'asImageThumbnailResultQuery')\nexport const toImageThumbnailResultQuery = zodToFactory(ImageThumbnailResultQueryZod, 'toImageThumbnailResultQuery')\n", "import type { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'\nimport type { DivinerConfig } from '@xyo-network/sdk'\nimport { asSchema } from '@xyo-network/sdk'\n\nimport { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema.ts'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = typeof ImageThumbnailStateToIndexCandidateDivinerConfigSchema\nexport const ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n = asSchema(`${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`, true)\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfig = DivinerConfig<{\n payloadDivinerLimit?: number\n /**\n * Where the diviner should look for stored thumbnails\n */\n payloadStore?: SearchableStorage\n schema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n}>\n", "import { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { asSchema } from '@xyo-network/sdk'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerSchema = typeof ImageThumbnailStateToIndexCandidateDivinerSchema\nexport const ImageThumbnailStateToIndexCandidateDivinerSchema\n = asSchema(`${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`, true)\n", "import {\n AsObjectFactory, assertEx, exists, filterAs,\n} from '@xylabs/sdk'\nimport type { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport type {\n ArchivistInstance, ArchivistNextOptions, BoundWitness, DivinerInstance, ModuleState, Payload, Schema,\n} from '@xyo-network/sdk'\nimport {\n AbstractDiviner, ArchivistWrapper, asBoundWitness, DivinerWrapper, isBoundWitness, isModuleState, ModuleStateSchema, payloadSchemasContainsAll, SequenceConstants,\n} from '@xyo-network/sdk'\nimport type { Timestamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState.ts'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config.ts'\nimport type { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params.ts'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | ImageThumbnail | Timestamp\n\n/**\n * The response from the ImageThumbnailStateToIndexCandidateDiviner\n */\nexport type ImageThumbnailStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<ImageThumbnailDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\nconst payload_schemas = [ImageThumbnailSchema, TimestampSchema]\n\n/**\n * Index candidate identity functions\n */\nconst indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const\nconst isIndexCandidate = (x?: unknown): x is IndexCandidate => {\n return indexCandidateIdentityFunctions.map(is => is(x)).some(Boolean)\n}\nconst asIndexCandidate = AsObjectFactory.create(isIndexCandidate)\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailStateToIndexCandidateDiviner<\n TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n protected static async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = payload_schemas.map(schema => bw.payload_schemas?.indexOf(schema))\n const hashes = indexes.map(index => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const filteredResults = indexCandidateIdentityFunctions.map(is => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filterAs(filteredResults, asIndexCandidate)\n return [bw, ...indexCandidates]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailStateToIndexCandidateDivinerResponse> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)\n // If there is no last state, start from the beginning\n ?? { schema: ModuleStateSchema, state: { cursor: SequenceConstants.minLocalSequence } }\n\n // Get the last cursor\n const cursor = lastState?.state?.cursor\n // Get the archivist for the store\n const sourceArchivist = await this.getArchivistForStore()\n\n // Get the next batch of results\n const nextOffset: ArchivistNextOptions = { limit: this.payloadDivinerLimit, order }\n // Only use the cursor if it's a valid offset\n if (cursor !== SequenceConstants.minLocalSequence) nextOffset.cursor = cursor\n // Get next batch of results starting from the offset\n const next = await sourceArchivist.next(nextOffset)\n if (next.length === 0) return [lastState]\n\n const batch = filterAs(next, asBoundWitness)\n .filter(exists)\n .filter(bw => payloadSchemasContainsAll(bw, payload_schemas))\n // Get source data\n const boundWitnessCandidates = await Promise.all(\n batch\n .filter(isBoundWitness)\n .map(bw => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n )\n const indexCandidates: IndexCandidate[] = boundWitnessCandidates\n .filter(exists)\n .flat()\n const nextCursor = assertEx(next.at(-1)?._sequence, () => `${moduleName}: Expected next to have a sequence`)\n const nextState: ModuleState<ImageThumbnailDivinerState> = { schema: ModuleStateSchema, state: { ...lastState.state, cursor: nextCursor } }\n return [nextState, ...indexCandidates]\n }\n\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore\n */\n protected async getArchivistForStore() {\n const name = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerInstance> {\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"],
4
+ "sourcesContent": ["import { IndexingDiviner } from '@xyo-network/diviner-indexing'\nimport type { AttachableDivinerInstance } from '@xyo-network/sdk'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner implements AttachableDivinerInstance {\n static override readonly labels: ImageThumbnailDivinerLabels = { ...super.labels, ...ImageThumbnailDivinerLabels }\n}\n", "import type { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'\nimport type { Labels } from '@xyo-network/sdk'\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport interface ImageThumbnailDivinerLabels extends Labels {\n 'network.xyo.image.thumbnail': 'diviner'\n}\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport const ImageThumbnailDivinerLabels: ImageThumbnailDivinerLabels = { 'network.xyo.image.thumbnail': 'diviner' }\n\n/**\n * Labels for Image Thumbnail Diviner Stage Diviners\n */\nexport type ImageThumbnailDivinerStageLabels = ImageThumbnailDivinerLabels & Record<DivinerStageSchema, IndexingDivinerStage>\n", "import type { Hash } from '@ariestools/sdk'\nimport type {\n ImageThumbnail,\n ImageThumbnailResultIndex,\n ImageThumbnailResultIndexFields,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultIndexSchema,\n ImageThumbnailSchema,\n isImageThumbnail,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport type {\n BoundWitness,\n Payload, Schema, WithSources,\n} from '@xyo-network/sdk'\nimport {\n AbstractDiviner, DivinerConfigSchema, isBoundWitness, PayloadBuilder,\n} from '@xyo-network/sdk'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\nimport type { Timestamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<WithSources<ImageThumbnailResultIndex>[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const imageThumbnailPayloads: ImageThumbnail[] = payloads.filter(isImageThumbnail)\n const timestampPayloads: Timestamp[] = payloads.filter(isTimestamp)\n if (bws.length > 0 && imageThumbnailPayloads.length > 0 && timestampPayloads.length > 0) {\n const payloadDictionary: Record<string, Payload> = await PayloadBuilder.toDataHashMap(payloads)\n\n const tuples: [BoundWitness, ImageThumbnail, Timestamp][] = bws.reduce<[BoundWitness, ImageThumbnail, Timestamp][]>(\n (acc, curr) => {\n const imageThumbnailIndex = curr.payload_schemas?.indexOf(ImageThumbnailSchema)\n const timestampIndex = curr.payload_schemas?.indexOf(TimestampSchema)\n const imageThumbnailHash: string | undefined = imageThumbnailIndex == null ? undefined : curr.payload_hashes?.[imageThumbnailIndex]\n const timestampHash: string | undefined = timestampIndex == null ? undefined : curr.payload_hashes?.[timestampIndex]\n const imageThumbnailPayload = imageThumbnailHash == null ? undefined : [payloadDictionary[imageThumbnailHash]].find(isImageThumbnail)\n const timestampPayload = timestampHash == null ? undefined : [payloadDictionary[timestampHash]].find(isTimestamp)\n if (imageThumbnailPayload != null && timestampPayload != null) 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?.length ?? 0) > 0 // Call anything with a thumbnail URL a success\n const $sources: Hash[] = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload])\n const urlPayload = { schema: UrlSchema, url }\n const key: Hash = await PayloadBuilder.dataHash(urlPayload)\n const fields: ImageThumbnailResultIndexFields = {\n key, success, timestamp,\n }\n if (status != null) fields.status = status\n const builder = new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({ schema: ImageThumbnailResultIndexSchema })\n const result = builder\n .fields({ ...fields }).meta({ $sources })\n .build()\n return [result]\n }),\n )\n return indexes.flat()\n }\n return []\n }\n}\n", "import { exists } from '@ariestools/sdk'\nimport type {\n ImageThumbnailResult,\n ImageThumbnailResultFields,\n ImageThumbnailResultIndex,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultSchema,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResultIndex,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport type {\n Payload, Schema, WithSources,\n} from '@xyo-network/sdk'\nimport {\n AbstractDiviner, DivinerConfigSchema, PayloadBuilder,\n} from '@xyo-network/sdk'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {\n // Filter out the two operands\n const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)\n const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndex) as WithSources<ImageThumbnailResultIndex>[]\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 urlPayloadBuilder = new PayloadBuilder<Omit<ImageThumbnailResult, 'timestamp' | 'success' | 'sources'>>({ schema: UrlSchema })\n const urlPayload = urlPayloadBuilder\n .fields({ url })\n .build()\n const key = await PayloadBuilder.dataHash(urlPayload)\n return [key, url] as const\n }),\n ),\n )\n // Map the indexes to responses using the dictionary\n return imageThumbnailResultIndexes.map((imageThumbnailResultIndex) => {\n const {\n\n key, schema, $sources, ...commonFields\n } = imageThumbnailResultIndex\n const keyString: string = key\n const url = keyToUrlDictionary[keyString]\n if (url != null && url !== '') {\n const fields: ImageThumbnailResultFields = { ...commonFields, url }\n const builder = new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema })\n return builder.fields(fields).meta({ $sources }).build()\n }\n }).filter(exists)\n }\n return []\n }\n}\n", "import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isImageThumbnailDivinerQuery } from '@xyo-network/image-thumbnail-payload-plugin'\nimport type { Payload, Schema } from '@xyo-network/sdk'\nimport {\n AbstractDiviner, DivinerConfigSchema, PayloadBuilder,\n} from '@xyo-network/sdk'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery.ts'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n protected override async divineHandler(\n payloads: Payload[] = [],\n ): Promise<Omit<Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>, 'timestamp'>[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const {\n limit: payloadLimit, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url,\n } = query\n const limit = payloadLimit ?? 1\n const order = payloadOrder ?? 'desc'\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadBuilder.dataHash(urlPayload)\n const fields: Omit<ImageThumbnailResultQuery, 'schema' | 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>> = {\n key,\n limit,\n order,\n }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n const builder = new PayloadBuilder<\n Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>\n >({ schema: PayloadDivinerQuerySchema })\n return builder\n .fields(fields)\n .build()\n }),\n )\n return results\n }\n return []\n }\n}\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { PayloadDivinerQueryPayloadZod } from '@xyo-network/diviner-payload-model'\nimport type { ImageThumbnailResultIndex } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { ImageThumbnailResultIndexZod } from '@xyo-network/image-thumbnail-payload-plugin'\nimport * as z from 'zod/mini'\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 const ImageThumbnailResultQueryZod = z.extend(PayloadDivinerQueryPayloadZod, {\n key: ImageThumbnailResultIndexZod.shape.key,\n status: ImageThumbnailResultIndexZod.shape.status,\n success: ImageThumbnailResultIndexZod.shape.success,\n timestamp: ImageThumbnailResultIndexZod.shape.timestamp,\n})\n\nexport type ImageThumbnailResultQuery = z.infer<typeof ImageThumbnailResultQueryZod>\n\n/**\n * A type guard for ImageThumbnailResultQuery\n */\nexport const isImageThumbnailResultQuery = zodIsFactory(ImageThumbnailResultQueryZod)\nexport const asImageThumbnailResultQuery = zodAsFactory(ImageThumbnailResultQueryZod, 'asImageThumbnailResultQuery')\nexport const toImageThumbnailResultQuery = zodToFactory(ImageThumbnailResultQueryZod, 'toImageThumbnailResultQuery')\n", "import type { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'\nimport type { DivinerConfig } from '@xyo-network/sdk'\nimport { asSchema } from '@xyo-network/sdk'\n\nimport { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema.ts'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = typeof ImageThumbnailStateToIndexCandidateDivinerConfigSchema\nexport const ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n = asSchema(`${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`, true)\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfig = DivinerConfig<{\n payloadDivinerLimit?: number\n /**\n * Where the diviner should look for stored thumbnails\n */\n payloadStore?: SearchableStorage\n schema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n}>\n", "import { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { asSchema } from '@xyo-network/sdk'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerSchema = typeof ImageThumbnailStateToIndexCandidateDivinerSchema\nexport const ImageThumbnailStateToIndexCandidateDivinerSchema\n = asSchema(`${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`, true)\n", "import {\n AsObjectFactory, assertEx, exists, filterAs,\n} from '@ariestools/sdk'\nimport type { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport type {\n ArchivistInstance, ArchivistNextOptions, BoundWitness, DivinerInstance, ModuleState, Payload, Schema,\n} from '@xyo-network/sdk'\nimport {\n AbstractDiviner, ArchivistWrapper, asBoundWitness, DivinerWrapper, isBoundWitness, isModuleState, ModuleStateSchema, payloadSchemasContainsAll, SequenceConstants,\n} from '@xyo-network/sdk'\nimport type { Timestamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState.ts'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config.ts'\nimport type { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params.ts'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | ImageThumbnail | Timestamp\n\n/**\n * The response from the ImageThumbnailStateToIndexCandidateDiviner\n */\nexport type ImageThumbnailStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<ImageThumbnailDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\nconst payload_schemas = [ImageThumbnailSchema, TimestampSchema]\n\n/**\n * Index candidate identity functions\n */\nconst indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const\nconst isIndexCandidate = (x?: unknown): x is IndexCandidate => {\n return indexCandidateIdentityFunctions.map(is => is(x)).some(Boolean)\n}\nconst asIndexCandidate = AsObjectFactory.create(isIndexCandidate)\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailStateToIndexCandidateDiviner<\n TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n static override readonly labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n protected static async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = payload_schemas.map(schema => bw.payload_schemas?.indexOf(schema))\n const hashes = indexes.map(index => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const filteredResults = indexCandidateIdentityFunctions.map(is => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filterAs(filteredResults, asIndexCandidate)\n return [bw, ...indexCandidates]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailStateToIndexCandidateDivinerResponse> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)\n // If there is no last state, start from the beginning\n ?? { schema: ModuleStateSchema, state: { cursor: SequenceConstants.minLocalSequence } }\n\n // Get the last cursor\n const cursor = lastState?.state?.cursor\n // Get the archivist for the store\n const sourceArchivist = await this.getArchivistForStore()\n\n // Get the next batch of results\n const nextOffset: ArchivistNextOptions = { limit: this.payloadDivinerLimit, order }\n // Only use the cursor if it's a valid offset\n if (cursor !== SequenceConstants.minLocalSequence) nextOffset.cursor = cursor\n // Get next batch of results starting from the offset\n const next = await sourceArchivist.next(nextOffset)\n if (next.length === 0) return [lastState]\n\n const batch = filterAs(next, asBoundWitness)\n .filter(exists)\n .filter(bw => payloadSchemasContainsAll(bw, payload_schemas))\n // Get source data\n const boundWitnessCandidates = await Promise.all(\n batch\n .filter(isBoundWitness)\n .map(bw => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n )\n const indexCandidates: IndexCandidate[] = boundWitnessCandidates\n .filter(exists)\n .flat()\n const nextCursor = assertEx(next.at(-1)?._sequence, () => `${moduleName}: Expected next to have a sequence`)\n const nextState: ModuleState<ImageThumbnailDivinerState> = { schema: ModuleStateSchema, state: { ...lastState.state, cursor: nextCursor } }\n return [nextState, ...indexCandidates]\n }\n\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore\n */\n protected async getArchivistForStore() {\n const name = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerInstance> {\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"],
5
5
  "mappings": "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",
6
6
  "names": ["AbstractDiviner", "DivinerConfigSchema", "PayloadBuilder", "UrlSchema", "AbstractDiviner", "DivinerConfigSchema", "PayloadBuilder", "UrlSchema", "isImageThumbnailDivinerQuery", "AbstractDiviner", "DivinerConfigSchema", "PayloadBuilder", "UrlSchema", "AbstractDiviner", "DivinerConfigSchema", "isImageThumbnailDivinerQuery", "order", "UrlSchema", "PayloadBuilder", "asSchema", "asSchema", "exists", "ImageThumbnailSchema", "isImageThumbnail", "AbstractDiviner", "isBoundWitness", "isTimestamp", "TimestampSchema", "ImageThumbnailSchema", "TimestampSchema", "isImageThumbnail", "isTimestamp", "AbstractDiviner", "exists", "isBoundWitness"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/diviner-image-thumbnail",
3
- "version": "7.0.1",
3
+ "version": "7.0.2",
4
4
  "description": "Typescript/Javascript Plugins for XYO Platform",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -31,30 +31,30 @@
31
31
  "README.md"
32
32
  ],
33
33
  "dependencies": {
34
- "@xyo-network/image-thumbnail-payload-plugin": "~7.0.1",
35
- "@xyo-network/url-payload-plugin": "~7.0.1"
34
+ "@xyo-network/url-payload-plugin": "~7.0.2",
35
+ "@xyo-network/image-thumbnail-payload-plugin": "~7.0.2"
36
36
  },
37
37
  "devDependencies": {
38
+ "@ariestools/sdk": "^7.0.5",
38
39
  "@bitauth/libauth": "~3.0.0",
39
40
  "@noble/post-quantum": "~0.6.1",
40
41
  "@opentelemetry/api": "^1.9.1",
41
42
  "@opentelemetry/sdk-trace-base": "^2.8.0",
42
43
  "@scure/base": "^2.2.0",
43
44
  "@scure/bip39": "~2.2.0",
44
- "@xylabs/geo": "^7.0.1",
45
- "@xylabs/sdk": "^7.0.1",
46
- "@xylabs/threads": "^7.0.1",
47
- "@xylabs/toolchain": "~8.5.3",
48
- "@xylabs/tsconfig": "~8.5.3",
49
- "@xylabs/vitest-extended": "^7.0.1",
50
- "@xyo-network/diviner-boundwitness": "^7.0.3",
51
- "@xyo-network/diviner-indexing": "~7.0.3",
52
- "@xyo-network/diviner-payload-generic": "^7.0.3",
53
- "@xyo-network/diviner-payload-model": "^7.0.3",
54
- "@xyo-network/payload-utils": "~7.0.4",
55
- "@xyo-network/sdk": "~7.0.3",
56
- "@xyo-network/sdk-protocol": "^7.0.4",
57
- "@xyo-network/witness-timestamp": "^7.0.3",
45
+ "@xylabs/geo": "^7.0.5",
46
+ "@xylabs/threads": "^7.0.5",
47
+ "@xylabs/toolchain": "~8.5.15",
48
+ "@xylabs/tsconfig": "~8.5.15",
49
+ "@xylabs/vitest-extended": "^7.0.5",
50
+ "@xyo-network/diviner-boundwitness": "^7.0.5",
51
+ "@xyo-network/diviner-indexing": "~7.0.5",
52
+ "@xyo-network/diviner-payload-generic": "^7.0.5",
53
+ "@xyo-network/diviner-payload-model": "^7.0.5",
54
+ "@xyo-network/payload-utils": "~7.0",
55
+ "@xyo-network/sdk": "~7.0.5",
56
+ "@xyo-network/sdk-protocol": "^7.0.8",
57
+ "@xyo-network/witness-timestamp": "^7.0.5",
58
58
  "ajv": "^8.20.0",
59
59
  "async-mutex": "^0.5.0",
60
60
  "browserslist": "4.28.4",
@@ -68,11 +68,12 @@
68
68
  "lru-cache": "^11.5.1",
69
69
  "observable-fns": "~0.6.1",
70
70
  "typescript": "~6.0.3",
71
- "vite": "^8.1.0",
71
+ "vite": "^8.1.2",
72
72
  "vitest": "^4.1.9",
73
73
  "zod": "^4.4.3"
74
74
  },
75
75
  "peerDependencies": {
76
+ "@ariestools/sdk": "^7.0",
76
77
  "@bitauth/libauth": "~3.0",
77
78
  "@noble/post-quantum": "~0.6.1",
78
79
  "@opentelemetry/api": "^1.9",
@@ -80,7 +81,6 @@
80
81
  "@scure/base": "^2.2",
81
82
  "@scure/bip39": "~2.2",
82
83
  "@xylabs/geo": "^7.0",
83
- "@xylabs/sdk": "^7.0",
84
84
  "@xylabs/threads": "^7.0",
85
85
  "@xyo-network/diviner-indexing": "^7.0",
86
86
  "@xyo-network/diviner-payload-model": "^7.0",