@xyo-network/diviner-image-thumbnail 3.2.0-rc.1 → 3.2.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
+ import type { Hex } from '@xylabs/hex';
1
2
  import type { StateDictionary } from '@xyo-network/module-model';
2
3
  export type ImageThumbnailDivinerState = StateDictionary & {
3
- offset: number;
4
+ cursor: Hex;
4
5
  };
5
6
  //# sourceMappingURL=ImageThumbnailDivinerState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageThumbnailDivinerState.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailDivinerState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAEhE,MAAM,MAAM,0BAA0B,GAAG,eAAe,GAAG;IACzD,MAAM,EAAE,MAAM,CAAA;CACf,CAAA"}
1
+ {"version":3,"file":"ImageThumbnailDivinerState.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailDivinerState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAEhE,MAAM,MAAM,0BAA0B,GAAG,eAAe,GAAG;IACzD,MAAM,EAAE,GAAG,CAAA;CACZ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,KAAK,EAEV,yBAAyB,EAE1B,MAAM,6CAA6C,CAAA;AAOpD,OAAO,KAAK,EACV,OAAO,EAAE,MAAM,EAAE,WAAW,EAC7B,MAAM,4BAA4B,CAAA;AAKnC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAGxF;;GAEG;AACH,qBAAa,wDAAyD,SAAQ,eAAe;IAC3F,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,OAAgB,MAAM,EAAE,gCAAgC,CAIvD;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,WAAW,CAAC,yBAAyB,CAAC,EAAE,CAAC;CA2CpH"}
1
+ {"version":3,"file":"ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,KAAK,EAEV,yBAAyB,EAE1B,MAAM,6CAA6C,CAAA;AAOpD,OAAO,KAAK,EACV,OAAO,EAAE,MAAM,EAAE,WAAW,EAC7B,MAAM,4BAA4B,CAAA;AAKnC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAGxF;;GAEG;AACH,qBAAa,wDAAyD,SAAQ,eAAe;IAC3F,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,OAAgB,MAAM,EAAE,gCAAgC,CAIvD;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,WAAW,CAAC,yBAAyB,CAAC,EAAE,CAAC;CA4CpH"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,6CAA6C,CAAA;AAOpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAGxF;;GAEG;AACH,qBAAa,oEAAqE,SAAQ,eAAe;IACvG,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,OAAgB,MAAM,EAAE,gCAAgC,CAIvD;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;CAwClG"}
1
+ {"version":3,"file":"ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,6CAA6C,CAAA;AAOpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAGxF;;GAEG;AACH,qBAAa,oEAAqE,SAAQ,eAAe;IACvG,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,OAAgB,MAAM,EAAE,gCAAgC,CAIvD;cAEwB,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;CAmClG"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAK/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAExF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAE/E;;GAEG;AACH,qBAAa,oDAAqD,SAAQ,eAAe;IACvF,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,OAAgB,MAAM,EAAE,gCAAgC,CAIvD;cAEwB,aAAa,CACpC,QAAQ,GAAE,OAAO,EAAO,GACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,WAAW,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;CAgChJ"}
1
+ {"version":3,"file":"ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAK/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAA;AAExF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAE/E;;GAEG;AACH,qBAAa,oDAAqD,SAAQ,eAAe;IACvF,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgD;IAChG,gBAAyB,mBAAmB,EAAE,MAAM,CAAsB;IAC1E,OAAgB,MAAM,EAAE,gCAAgC,CAIvD;cAEwB,aAAa,CACpC,QAAQ,GAAE,OAAO,EAAO,GACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,WAAW,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;CA8BhJ"}
@@ -5,7 +5,7 @@ import { AbstractDiviner } from '@xyo-network/diviner-abstract';
5
5
  import { DivinerWrapper } from '@xyo-network/diviner-wrapper';
6
6
  import type { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin';
7
7
  import type { ModuleState } from '@xyo-network/module-model';
8
- import type { Payload, Schema } from '@xyo-network/payload-model';
8
+ import { type Payload, type Schema } from '@xyo-network/payload-model';
9
9
  import type { TimeStamp } from '@xyo-network/witness-timestamp';
10
10
  import type { ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels.ts';
11
11
  import type { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState.ts';
@@ -41,22 +41,64 @@ export declare class ImageThumbnailStateToIndexCandidateDiviner<TParams extends
41
41
  * Retrieves the archivist for the payloadStore
42
42
  * @returns The archivist for the payloadStore
43
43
  */
44
- protected getArchivistForStore(): Promise<ArchivistWrapper<import("@xyo-network/archivist-model").ArchivistModule<import(".store/@xylabs-object-npm-4.4.12-63cf432727/package").BaseParamsFields & {
45
- account?: import(".store/@xyo-network-account-model-virtual-3409e52736/package").AccountInstance | "random";
44
+ protected getArchivistForStore(): Promise<ArchivistWrapper<import("@xyo-network/archivist-model").ArchivistModule<import("@xylabs/object").BaseParamsFields & {
45
+ account?: import(".store/@xyo-network-account-model-virtual-6c9dfaafa5/package").AccountInstance | "random";
46
46
  addToResolvers?: boolean;
47
- additionalSigners?: import(".store/@xyo-network-account-model-virtual-3409e52736/package").AccountInstance[];
47
+ additionalSigners?: import(".store/@xyo-network-account-model-virtual-6c9dfaafa5/package").AccountInstance[];
48
48
  allowNameResolution?: boolean;
49
- config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & {
50
- parents?: import("@xyo-network/archivist-model").ArchivistParents;
51
- requireAllParents?: boolean;
52
- schema: "network.xyo.archivist.config";
53
- storage?: import("@xyo-network/archivist-model").ArchivistStorage;
54
- storeParentReads?: boolean;
55
- }, "schema"> & {
56
- schema: "network.xyo.archivist.config";
57
- }, "schema"> & {
58
- schema: string;
59
- };
49
+ config: import("@xylabs/object").DeepRestrictToStringKeys<{
50
+ schema: Schema;
51
+ readonly archiving?: {
52
+ readonly archivists?: string[] | undefined;
53
+ readonly queries?: string[] | undefined;
54
+ } | undefined;
55
+ readonly allowedQueries?: string[] | undefined;
56
+ readonly archivist?: import("@xyo-network/module-model").ModuleIdentifier | undefined;
57
+ readonly consoleLogger?: import(".store/@xylabs-logger-npm-4.4.25-f61ab04e23/package").LogLevel | undefined;
58
+ readonly labels?: {
59
+ [x: string]: string | undefined;
60
+ } | undefined;
61
+ readonly name?: import("@xyo-network/module-model").ModuleName | undefined;
62
+ readonly paging?: {
63
+ [x: string]: {
64
+ size?: number | undefined;
65
+ };
66
+ } | undefined;
67
+ readonly retry?: {
68
+ backoff?: number | undefined;
69
+ interval?: number | undefined;
70
+ retries?: number | undefined;
71
+ } | undefined;
72
+ readonly security?: {
73
+ readonly allowAnonymous?: boolean | undefined;
74
+ readonly allowed?: {
75
+ [x: string]: (Lowercase<string> | Lowercase<string>[])[];
76
+ } | undefined;
77
+ readonly disallowed?: {
78
+ [x: string]: Lowercase<string>[];
79
+ } | undefined;
80
+ } | undefined;
81
+ readonly sign?: boolean | undefined;
82
+ readonly storeQueries?: boolean | undefined;
83
+ readonly timestamp?: boolean | undefined;
84
+ parents?: {
85
+ commit?: Lowercase<string>[] | undefined;
86
+ read?: Lowercase<string>[] | undefined;
87
+ write?: Lowercase<string>[] | undefined;
88
+ } | undefined;
89
+ requireAllParents?: boolean | undefined;
90
+ storage?: {
91
+ indexes?: {
92
+ key: {
93
+ [x: string]: import("@xyo-network/archivist-model").IndexDirection;
94
+ };
95
+ multiEntry?: boolean | undefined;
96
+ name?: string | undefined;
97
+ unique?: boolean | undefined;
98
+ }[] | undefined;
99
+ } | undefined;
100
+ storeParentReads?: boolean | undefined;
101
+ }>;
60
102
  ephemeralQueryAccountEnabled?: boolean;
61
103
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
62
104
  }, import("@xyo-network/archivist-model").ArchivistModuleEventData>>>;
@@ -64,24 +106,53 @@ export declare class ImageThumbnailStateToIndexCandidateDiviner<TParams extends
64
106
  * Retrieves the BoundWitness Diviner for the payloadStore
65
107
  * @returns The BoundWitness Diviner for the payloadStore
66
108
  */
67
- protected getBoundWitnessDivinerForStore(): Promise<DivinerWrapper<import("@xyo-network/diviner-model").DivinerModule<import(".store/@xylabs-object-npm-4.4.12-63cf432727/package").BaseParamsFields & {
68
- account?: import(".store/@xyo-network-account-model-virtual-3409e52736/package").AccountInstance | "random";
109
+ protected getBoundWitnessDivinerForStore(): Promise<DivinerWrapper<import("@xyo-network/diviner-model").DivinerModule<import("@xylabs/object").BaseParamsFields & {
110
+ account?: import(".store/@xyo-network-account-model-virtual-6c9dfaafa5/package").AccountInstance | "random";
69
111
  addToResolvers?: boolean;
70
- additionalSigners?: import(".store/@xyo-network-account-model-virtual-3409e52736/package").AccountInstance[];
112
+ additionalSigners?: import(".store/@xyo-network-account-model-virtual-6c9dfaafa5/package").AccountInstance[];
71
113
  allowNameResolution?: boolean;
72
- config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & {
73
- schema: "network.xyo.diviner.config";
74
- }, "schema"> & {
75
- schema: "network.xyo.diviner.config";
76
- }, "schema"> & {
77
- schema: string;
78
- };
114
+ config: import("@xylabs/object").DeepRestrictToStringKeys<{
115
+ schema: Schema;
116
+ readonly archiving?: {
117
+ readonly archivists?: string[] | undefined;
118
+ readonly queries?: string[] | undefined;
119
+ } | undefined;
120
+ readonly allowedQueries?: string[] | undefined;
121
+ readonly archivist?: import("@xyo-network/module-model").ModuleIdentifier | undefined;
122
+ readonly consoleLogger?: import(".store/@xylabs-logger-npm-4.4.25-f61ab04e23/package").LogLevel | undefined;
123
+ readonly labels?: {
124
+ [x: string]: string | undefined;
125
+ } | undefined;
126
+ readonly name?: import("@xyo-network/module-model").ModuleName | undefined;
127
+ readonly paging?: {
128
+ [x: string]: {
129
+ size?: number | undefined;
130
+ };
131
+ } | undefined;
132
+ readonly retry?: {
133
+ backoff?: number | undefined;
134
+ interval?: number | undefined;
135
+ retries?: number | undefined;
136
+ } | undefined;
137
+ readonly security?: {
138
+ readonly allowAnonymous?: boolean | undefined;
139
+ readonly allowed?: {
140
+ [x: string]: (Lowercase<string> | Lowercase<string>[])[];
141
+ } | undefined;
142
+ readonly disallowed?: {
143
+ [x: string]: Lowercase<string>[];
144
+ } | undefined;
145
+ } | undefined;
146
+ readonly sign?: boolean | undefined;
147
+ readonly storeQueries?: boolean | undefined;
148
+ readonly timestamp?: boolean | undefined;
149
+ }>;
79
150
  ephemeralQueryAccountEnabled?: boolean;
80
151
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
81
- }, import("@xyo-network/diviner-model").DivinerModuleEventData>, {
82
- schema: string;
83
- } & import("@xyo-network/payload-model").PayloadFields, {
84
- schema: string;
85
- } & import("@xyo-network/payload-model").PayloadFields>>;
152
+ }, import("@xyo-network/diviner-model").DivinerModuleEventData>, import("@xylabs/object").DeepRestrictToStringKeys<{
153
+ schema: Schema;
154
+ }>, import("@xylabs/object").DeepRestrictToStringKeys<{
155
+ schema: Schema;
156
+ }>>>;
86
157
  }
87
158
  //# sourceMappingURL=Diviner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AAEjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAG5D,OAAO,KAAK,EACV,OAAO,EAAE,MAAM,EAChB,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAG/D,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAA;AAEzF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAElF,OAAO,KAAK,EAAE,gDAAgD,EAAE,MAAM,aAAa,CAAA;AAEnF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAA;AAEtE;;GAEG;AACH,MAAM,MAAM,kDAAkD,GAAG;IAC/D;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,0BAA0B,CAAC;IAClD;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AAsBD;;GAEG;AACH,qBAAa,0CAA0C,CACrD,OAAO,SAAS,gDAAgD,GAAG,gDAAgD,CACnH,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAmF;IACnI,gBAAyB,mBAAmB,EAAE,MAAM,CAAyD;IAC7G,OAAgB,MAAM,EAAE,gCAAgC,CAIvD;IAED,IAAI,mBAAmB,WAEtB;qBAEsB,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;cAU9G,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,kDAAkD,CAAC;IA6B7H;;;OAGG;cACa,oBAAoB;;;;;;;;;;;;;;;;;;;IAMpC;;;OAGG;cACa,8BAA8B;;;;;;;;;;;;;;;;;;;CAQ/C"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,8BAA8B,CAAA;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AAEjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,OAAO,EACL,KAAK,OAAO,EAAE,KAAK,MAAM,EAC1B,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAG/D,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAA;AAEzF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAElF,OAAO,KAAK,EAAE,gDAAgD,EAAE,MAAM,aAAa,CAAA;AAEnF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAA;AAEtE;;GAEG;AACH,MAAM,MAAM,kDAAkD,GAAG;IAC/D;;OAEG;IACH,SAAS,EAAE,WAAW,CAAC,0BAA0B,CAAC;IAClD;;OAEG;IACH,GAAG,cAAc,EAAE;CACpB,CAAA;AA0BD;;GAEG;AACH,qBAAa,0CAA0C,CACrD,OAAO,SAAS,gDAAgD,GAAG,gDAAgD,CACnH,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAmF;IACnI,gBAAyB,mBAAmB,EAAE,MAAM,CAAyD;IAC7G,OAAgB,MAAM,EAAE,gCAAgC,CAIvD;IAED,IAAI,mBAAmB,WAEtB;qBAEsB,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC;cAU9G,aAAa,CAAC,QAAQ,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,kDAAkD,CAAC;IAoC7H;;;OAGG;cACa,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAMpC;;;OAGG;cACa,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQ/C"}
@@ -54,17 +54,16 @@ var ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner = class extends Abs
54
54
  const { timestamp } = timestampPayload;
55
55
  const { status } = http ?? {};
56
56
  const success = !!imageThumbnailPayload.url;
57
- const sources = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload]);
57
+ const $sources = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload]);
58
58
  const urlPayload = { schema: UrlSchema, url };
59
59
  const key = await PayloadBuilder.dataHash(urlPayload);
60
60
  const fields = {
61
61
  key,
62
- sources,
63
62
  success,
64
63
  timestamp
65
64
  };
66
65
  if (status) fields.status = status;
67
- const result = await new PayloadBuilder({ schema: ImageThumbnailResultIndexSchema }).fields(fields).build();
66
+ const result = new PayloadBuilder({ schema: ImageThumbnailResultIndexSchema }).meta({ $sources }).fields(fields).build();
68
67
  return [result];
69
68
  })
70
69
  );
@@ -81,7 +80,7 @@ import { DivinerConfigSchema as DivinerConfigSchema2 } from "@xyo-network/divine
81
80
  import {
82
81
  ImageThumbnailResultSchema,
83
82
  isImageThumbnailDivinerQuery,
84
- isImageThumbnailResultIndex
83
+ isImageThumbnailResultIndexWithSources
85
84
  } from "@xyo-network/image-thumbnail-payload-plugin";
86
85
  import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
87
86
  import { UrlSchema as UrlSchema2 } from "@xyo-network/url-payload-plugin";
@@ -95,33 +94,32 @@ var ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner = class
95
94
  };
96
95
  async divineHandler(payloads = []) {
97
96
  const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery);
98
- const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndex);
97
+ const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndexWithSources);
99
98
  if (imageThumbnailDivinerQueries.length > 0 && imageThumbnailResultIndexes.length > 0) {
100
99
  const keyToUrlDictionary = Object.fromEntries(
101
100
  await Promise.all(
102
101
  imageThumbnailDivinerQueries.map(async (imageThumbnailDivinerQuery) => {
103
102
  const { url } = imageThumbnailDivinerQuery;
104
- const urlPayload = await new PayloadBuilder2({ schema: UrlSchema2 }).fields({ url }).build();
103
+ const urlPayload = new PayloadBuilder2({ schema: UrlSchema2 }).fields({ url }).build();
105
104
  const key = await PayloadBuilder2.dataHash(urlPayload);
106
105
  return [key, url];
107
106
  })
108
107
  )
109
108
  );
110
- return (await Promise.all(
111
- imageThumbnailResultIndexes.map(async (imageThumbnailResultIndex) => {
112
- const {
113
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
114
- key,
115
- schema,
116
- ...commonFields
117
- } = imageThumbnailResultIndex;
118
- const url = keyToUrlDictionary?.[key];
119
- if (url) {
120
- const fields = { ...commonFields, url };
121
- return await new PayloadBuilder2({ schema: ImageThumbnailResultSchema }).fields(fields).build();
122
- }
123
- })
124
- )).filter(exists);
109
+ return imageThumbnailResultIndexes.map((imageThumbnailResultIndex) => {
110
+ const {
111
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
112
+ key,
113
+ schema,
114
+ $sources,
115
+ ...commonFields
116
+ } = imageThumbnailResultIndex;
117
+ const url = keyToUrlDictionary?.[key];
118
+ if (url) {
119
+ const fields = { ...commonFields, url };
120
+ return new PayloadBuilder2({ schema: ImageThumbnailResultSchema }).fields(fields).meta({ $sources }).build();
121
+ }
122
+ }).filter(exists);
125
123
  }
126
124
  return [];
127
125
  }
@@ -149,7 +147,6 @@ var ImageThumbnailQueryToImageThumbnailIndexQueryDiviner = class extends Abstrac
149
147
  queries.map(async (query) => {
150
148
  const {
151
149
  limit: payloadLimit,
152
- offset: payloadOffset,
153
150
  order: payloadOrder,
154
151
  status: payloadStatus,
155
152
  success: payloadSuccess,
@@ -157,18 +154,16 @@ var ImageThumbnailQueryToImageThumbnailIndexQueryDiviner = class extends Abstrac
157
154
  } = query;
158
155
  const limit = payloadLimit ?? 1;
159
156
  const order2 = payloadOrder ?? "desc";
160
- const offset = payloadOffset ?? 0;
161
157
  const urlPayload = { schema: UrlSchema3, url };
162
158
  const key = await PayloadBuilder3.dataHash(urlPayload);
163
159
  const fields = {
164
160
  key,
165
161
  limit,
166
- offset,
167
162
  order: order2
168
163
  };
169
164
  if (payloadSuccess !== void 0) fields.success = payloadSuccess;
170
165
  if (payloadStatus !== void 0) fields.status = payloadStatus;
171
- return await new PayloadBuilder3({ schema: PayloadDivinerQuerySchema }).fields(fields).build();
166
+ return new PayloadBuilder3({ schema: PayloadDivinerQuerySchema }).fields(fields).build();
172
167
  })
173
168
  );
174
169
  return results;
@@ -190,19 +185,27 @@ var ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerS
190
185
  var ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`;
191
186
 
192
187
  // src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts
188
+ import { filterAs } from "@xylabs/array";
193
189
  import { assertEx } from "@xylabs/assert";
194
190
  import { exists as exists2 } from "@xylabs/exists";
191
+ import { AsObjectFactory } from "@xylabs/object";
195
192
  import { ArchivistWrapper } from "@xyo-network/archivist-wrapper";
196
- import { isBoundWitness as isBoundWitness2 } from "@xyo-network/boundwitness-model";
193
+ import { asBoundWitness, isBoundWitness as isBoundWitness2 } from "@xyo-network/boundwitness-model";
194
+ import { payloadSchemasContainsAll } from "@xyo-network/boundwitness-validator";
197
195
  import { AbstractDiviner as AbstractDiviner4 } from "@xyo-network/diviner-abstract";
198
- import { BoundWitnessDivinerQuerySchema } from "@xyo-network/diviner-boundwitness-model";
199
196
  import { DivinerWrapper } from "@xyo-network/diviner-wrapper";
200
197
  import { ImageThumbnailSchema as ImageThumbnailSchema2, isImageThumbnail as isImageThumbnail2 } from "@xyo-network/image-thumbnail-payload-plugin";
201
198
  import { isModuleState, ModuleStateSchema } from "@xyo-network/module-model";
202
- import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
199
+ import {
200
+ SequenceConstants
201
+ } from "@xyo-network/payload-model";
203
202
  import { isTimestamp as isTimestamp2, TimestampSchema as TimestampSchema2 } from "@xyo-network/witness-timestamp";
204
203
  var payload_schemas = [ImageThumbnailSchema2, TimestampSchema2];
205
204
  var indexCandidateIdentityFunctions = [isImageThumbnail2, isTimestamp2];
205
+ var isIndexCandidate = (x) => {
206
+ return indexCandidateIdentityFunctions.map((is) => is(x)).some(Boolean);
207
+ };
208
+ var asIndexCandidate = AsObjectFactory.create(isIndexCandidate);
206
209
  var order = "asc";
207
210
  var moduleName = "ImageThumbnailStateToIndexCandidateDiviner";
208
211
  var ImageThumbnailStateToIndexCandidateDiviner = class _ImageThumbnailStateToIndexCandidateDiviner extends AbstractDiviner4 {
@@ -222,27 +225,24 @@ var ImageThumbnailStateToIndexCandidateDiviner = class _ImageThumbnailStateToInd
222
225
  const results = await archivist.get(hashes);
223
226
  const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is));
224
227
  if (filteredResults.includes(void 0)) return void 0;
225
- const indexCandidates = filteredResults.filter(exists2);
228
+ const indexCandidates = filterAs(filteredResults, asIndexCandidate);
226
229
  return [bw, ...indexCandidates];
227
230
  }
228
231
  async divineHandler(payloads = []) {
229
- const lastState = payloads.find(isModuleState);
230
- if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }];
231
- const { offset } = lastState.state;
232
- const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore();
233
- const query = await new PayloadBuilder4({ schema: BoundWitnessDivinerQuerySchema }).fields({
234
- limit: this.payloadDivinerLimit,
235
- offset,
236
- order,
237
- payload_schemas
238
- }).build();
239
- const batch = await boundWitnessDiviner.divine([query]);
240
- if (batch.length === 0) return [lastState];
232
+ const lastState = payloads.find(isModuleState) ?? { schema: ModuleStateSchema, state: { cursor: SequenceConstants.minLocalSequence } };
233
+ const cursor = lastState?.state?.cursor;
241
234
  const sourceArchivist = await this.getArchivistForStore();
235
+ if (!sourceArchivist) return [lastState];
236
+ const nextOffset = { limit: this.payloadDivinerLimit, order };
237
+ if (cursor !== SequenceConstants.minLocalSequence) nextOffset.cursor = cursor;
238
+ const next = await sourceArchivist.next(nextOffset);
239
+ if (next.length === 0) return [lastState];
240
+ const batch = filterAs(next, asBoundWitness).filter(exists2).filter((bw) => payloadSchemasContainsAll(bw, payload_schemas));
242
241
  const indexCandidates = (await Promise.all(
243
242
  batch.filter(isBoundWitness2).map((bw) => _ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist))
244
243
  )).filter(exists2).flat();
245
- const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } };
244
+ const nextCursor = assertEx(next.at(-1)?._sequence, () => `${moduleName}: Expected next to have a sequence`);
245
+ const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, cursor: nextCursor } };
246
246
  return [nextState, ...indexCandidates];
247
247
  }
248
248
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner/Diviner.ts","../../src/Diviner/ImageThumbnailDivinerLabels.ts","../../src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts","../../src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts","../../src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts","../../src/Diviner/ImageThumbnailResultQuery.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing'\nimport type { AttachableDivinerInstance } from '@xyo-network/diviner-model'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner implements AttachableDivinerInstance {\n static override labels: ImageThumbnailDivinerLabels = { ...super.labels, ...ImageThumbnailDivinerLabels }\n}\n","import type { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'\nimport type { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport interface ImageThumbnailDivinerLabels extends Labels {\n 'network.xyo.image.thumbnail': 'diviner'\n}\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport const ImageThumbnailDivinerLabels: ImageThumbnailDivinerLabels = { 'network.xyo.image.thumbnail': 'diviner' }\n\n/**\n * Labels for Image Thumbnail Diviner Stage Diviners\n */\nexport type ImageThumbnailDivinerStageLabels = ImageThumbnailDivinerLabels & {\n /**\n * Labels for the stage of the Image Thumbnail Diviner Stage Diviner\n */\n [key in DivinerStageSchema]: IndexingDivinerStage\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport type {\n ImageThumbnail,\n ImageThumbnailResultIndex,\n ImageThumbnailResultIndexFields,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultIndexSchema,\n ImageThumbnailSchema,\n isImageThumbnail,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Payload, Schema, WithSources,\n} from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\nimport type { TimeStamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override 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 ImageThumbnail | undefined\n const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp) as TimeStamp\n if (imageThumbnailPayload && timestampPayload) acc.push([curr, imageThumbnailPayload, timestampPayload])\n return acc\n },\n [] as [BoundWitness, ImageThumbnail, TimeStamp][],\n )\n const indexes = await Promise.all(\n tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {\n const { sourceUrl: url, http } = imageThumbnailPayload\n const { timestamp } = timestampPayload\n const { status } = http ?? {}\n const success = !!imageThumbnailPayload.url // Call anything with a thumbnail url a success\n const sources: Hash[] = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload])\n const urlPayload = { schema: UrlSchema, url }\n const key: Hash = await PayloadBuilder.dataHash(urlPayload)\n const fields: ImageThumbnailResultIndexFields = {\n key, sources, success, timestamp,\n }\n if (status) fields.status = status\n const result = await new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({ schema: ImageThumbnailResultIndexSchema })\n .fields(fields)\n .build()\n return [result]\n }),\n )\n return indexes.flat()\n }\n return []\n }\n}\n","import { exists } from '@xylabs/exists'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport type {\n ImageThumbnailResult,\n ImageThumbnailResultFields,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultSchema,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResultIndex,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override 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 {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n key, schema, ...commonFields\n } = 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 type { Payload, Schema } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery.ts'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override 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, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url,\n } = 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 type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { ImageThumbnailResultIndex } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\n/**\n * The fields that will need to be indexed on in the underlying store\n */\nexport type QueryableImageThumbnailResultProperties = Extract<keyof ImageThumbnailResultIndex, 'status' | 'success' | 'timestamp' | 'key'>\n\n/**\n * The query that will be used to retrieve the results from the underlying store\n */\nexport type ImageThumbnailResultQuery = PayloadDivinerQueryPayload & Pick<ImageThumbnailResultIndex, QueryableImageThumbnailResultProperties>\n\n/**\n * A type guard for ImageThumbnailResultQuery\n */\n// TODO: Use a more derived schema than PayloadDivinerQuerySchema\nexport const isImageThumbnailResultQuery = isPayloadOfSchemaType<ImageThumbnailResultQuery>(PayloadDivinerQuerySchema)\n","import { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\nexport const ImageThumbnailStateToIndexCandidateDivinerSchema: ImageThumbnailStateToIndexCandidateDivinerSchema\n= `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\n","import type { DivinerConfig } from '@xyo-network/diviner-model'\nimport type { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'\n\nimport { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema.ts'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\nexport const ImageThumbnailStateToIndexCandidateDivinerConfigSchema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n= `${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 type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport type { BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'\nimport { BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport type { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport type { ModuleState } from '@xyo-network/module-model'\nimport { isModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Payload, Schema, WithSources,\n} from '@xyo-network/payload-model'\nimport type { TimeStamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState.ts'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config.ts'\nimport type { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params.ts'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | ImageThumbnail | TimeStamp\n\n/**\n * The response from the ImageThumbnailStateToIndexCandidateDiviner\n */\nexport type ImageThumbnailStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<ImageThumbnailDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\nconst payload_schemas = [ImageThumbnailSchema, TimestampSchema]\n\n/**\n * Index candidate identity functions\n */\nconst indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const\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 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({\n limit: this.payloadDivinerLimit, offset, order, payload_schemas,\n })\n .build()\n const batch = (await boundWitnessDiviner.divine([query])) as WithSources<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(isBoundWitness).map(bw => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n )\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore\n */\n protected async getArchivistForStore() {\n const name = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore\n */\n protected async getBoundWitnessDivinerForStore() {\n const name = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.boundWitnessDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n}\n"],"mappings":"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","names":["AbstractDiviner","DivinerConfigSchema","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","isImageThumbnailDivinerQuery","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","isImageThumbnailDivinerQuery","order","UrlSchema","PayloadBuilder","PayloadDivinerQuerySchema","exists","isBoundWitness","AbstractDiviner","ImageThumbnailSchema","isImageThumbnail","PayloadBuilder","isTimestamp","TimestampSchema","ImageThumbnailSchema","TimestampSchema","isImageThumbnail","isTimestamp","AbstractDiviner","exists","PayloadBuilder","isBoundWitness"]}
1
+ {"version":3,"sources":["../../src/Diviner/Diviner.ts","../../src/Diviner/ImageThumbnailDivinerLabels.ts","../../src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts","../../src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts","../../src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts","../../src/Diviner/ImageThumbnailResultQuery.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Schema.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Config.ts","../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["import { IndexingDiviner } from '@xyo-network/diviner-indexing'\nimport type { AttachableDivinerInstance } from '@xyo-network/diviner-model'\n\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\nexport class ImageThumbnailDiviner extends IndexingDiviner implements AttachableDivinerInstance {\n static override labels: ImageThumbnailDivinerLabels = { ...super.labels, ...ImageThumbnailDivinerLabels }\n}\n","import type { DivinerStageSchema, IndexingDivinerStage } from '@xyo-network/diviner-indexing'\nimport type { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport interface ImageThumbnailDivinerLabels extends Labels {\n 'network.xyo.image.thumbnail': 'diviner'\n}\n\n/**\n * Labels for Image Thumbnail Diviner components\n */\nexport const ImageThumbnailDivinerLabels: ImageThumbnailDivinerLabels = { 'network.xyo.image.thumbnail': 'diviner' }\n\n/**\n * Labels for Image Thumbnail Diviner Stage Diviners\n */\nexport type ImageThumbnailDivinerStageLabels = ImageThumbnailDivinerLabels & {\n /**\n * Labels for the stage of the Image Thumbnail Diviner Stage Diviner\n */\n [key in DivinerStageSchema]: IndexingDivinerStage\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport type {\n ImageThumbnail,\n ImageThumbnailResultIndex,\n ImageThumbnailResultIndexFields,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultIndexSchema,\n ImageThumbnailSchema,\n isImageThumbnail,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n Payload, Schema, WithSources,\n} from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\nimport type { TimeStamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override 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 ImageThumbnail | undefined\n const timestampPayload = [payloadDictionary[timestampHash]].find(isTimestamp) as TimeStamp\n if (imageThumbnailPayload && timestampPayload) acc.push([curr, imageThumbnailPayload, timestampPayload])\n return acc\n },\n [] as [BoundWitness, ImageThumbnail, TimeStamp][],\n )\n const indexes = await Promise.all(\n tuples.map(async ([bw, imageThumbnailPayload, timestampPayload]) => {\n const { sourceUrl: url, http } = imageThumbnailPayload\n const { timestamp } = timestampPayload\n const { status } = http ?? {}\n const success = !!imageThumbnailPayload.url // Call anything with a thumbnail url a success\n const $sources: Hash[] = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload])\n const urlPayload = { schema: UrlSchema, url }\n const key: Hash = await PayloadBuilder.dataHash(urlPayload)\n const fields: ImageThumbnailResultIndexFields = {\n key, success, timestamp,\n }\n if (status) fields.status = status\n const result = new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({ schema: ImageThumbnailResultIndexSchema })\n .meta({ $sources })\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 type {\n ImageThumbnailResult,\n ImageThumbnailResultFields,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport {\n ImageThumbnailResultSchema,\n isImageThumbnailDivinerQuery,\n isImageThumbnailResultIndexWithSources,\n} from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {\n // Filter out the two operands\n const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)\n const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndexWithSources)\n\n // If we have operands\n if (imageThumbnailDivinerQueries.length > 0 && imageThumbnailResultIndexes.length > 0) {\n // Create a dictionary to translate index keys to the urls that represent them\n const keyToUrlDictionary = Object.fromEntries(\n await Promise.all(\n imageThumbnailDivinerQueries.map(async (imageThumbnailDivinerQuery) => {\n const { url } = imageThumbnailDivinerQuery\n const urlPayload = new PayloadBuilder<Omit<ImageThumbnailResult, 'timestamp' | 'success' | 'sources'>>({ schema: UrlSchema })\n .fields({ url })\n .build()\n const key = await PayloadBuilder.dataHash(urlPayload)\n return [key, url] as const\n }),\n ),\n )\n // Map the indexes to responses using the dictionary\n return imageThumbnailResultIndexes.map((imageThumbnailResultIndex) => {\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n key, schema, $sources, ...commonFields\n } = imageThumbnailResultIndex\n const url = keyToUrlDictionary?.[key]\n if (url) {\n const fields: ImageThumbnailResultFields = { ...commonFields, url }\n return new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema }).fields(fields).meta({ $sources }).build()\n }\n }).filter(exists)\n }\n return []\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { isImageThumbnailDivinerQuery } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport { UrlSchema } from '@xyo-network/url-payload-plugin'\n\nimport type { ImageThumbnailDivinerStageLabels } from './ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from './ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailResultQuery } from './ImageThumbnailResultQuery.ts'\n\n/**\n * A diviner that converts ImageThumbnailDivinerQuery to ImageThumbnailResultQuery\n */\nexport class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, DivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = DivinerConfigSchema\n static override labels: ImageThumbnailDivinerStageLabels = {\n ...super.labels,\n ...ImageThumbnailDivinerLabels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n protected override async divineHandler(\n payloads: Payload[] = [],\n ): Promise<Omit<Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>, 'timestamp'>[]> {\n const queries = payloads.filter(isImageThumbnailDivinerQuery)\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const {\n limit: payloadLimit, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url,\n } = query\n const limit = payloadLimit ?? 1\n const order = payloadOrder ?? 'desc'\n const urlPayload = { schema: UrlSchema, url }\n const key = await PayloadBuilder.dataHash(urlPayload)\n const fields: Omit<ImageThumbnailResultQuery, 'schema' | 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>> = {\n key,\n limit,\n order,\n }\n if (payloadSuccess !== undefined) fields.success = payloadSuccess\n if (payloadStatus !== undefined) fields.status = payloadStatus\n return new PayloadBuilder<\n Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>\n >({ schema: PayloadDivinerQuerySchema })\n .fields(fields)\n .build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { ImageThumbnailResultIndex } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\n/**\n * The fields that will need to be indexed on in the underlying store\n */\nexport type QueryableImageThumbnailResultProperties = Extract<keyof ImageThumbnailResultIndex, 'status' | 'success' | 'timestamp' | 'key'>\n\n/**\n * The query that will be used to retrieve the results from the underlying store\n */\nexport type ImageThumbnailResultQuery = PayloadDivinerQueryPayload & Pick<ImageThumbnailResultIndex, QueryableImageThumbnailResultProperties>\n\n/**\n * A type guard for ImageThumbnailResultQuery\n */\n// TODO: Use a more derived schema than PayloadDivinerQuerySchema\nexport const isImageThumbnailResultQuery = isPayloadOfSchemaType<ImageThumbnailResultQuery>(PayloadDivinerQuerySchema)\n","import { ImageThumbnailDivinerSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\nexport const ImageThumbnailStateToIndexCandidateDivinerSchema: ImageThumbnailStateToIndexCandidateDivinerSchema\n= `${ImageThumbnailDivinerSchema}.stage.stateToIndexCandidateDiviner`\n","import type { DivinerConfig } from '@xyo-network/diviner-model'\nimport type { SearchableStorage } from '@xyo-network/image-thumbnail-payload-plugin'\n\nimport { ImageThumbnailStateToIndexCandidateDivinerSchema } from './Schema.ts'\n\nexport type ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`\nexport const ImageThumbnailStateToIndexCandidateDivinerConfigSchema: ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n= `${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 { filterAs } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { AsObjectFactory } from '@xylabs/object'\nimport type { ArchivistInstance, ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { asBoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { payloadSchemasContainsAll } from '@xyo-network/boundwitness-validator'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport type { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport type { ModuleState } from '@xyo-network/module-model'\nimport { isModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport {\n type Payload, type Schema, SequenceConstants,\n} from '@xyo-network/payload-model'\nimport type { TimeStamp } from '@xyo-network/witness-timestamp'\nimport { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\nimport type { ImageThumbnailDivinerStageLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport { ImageThumbnailDivinerLabels } from '../ImageThumbnailDivinerLabels.ts'\nimport type { ImageThumbnailDivinerState } from '../ImageThumbnailDivinerState.ts'\nimport { ImageThumbnailStateToIndexCandidateDivinerConfigSchema } from './Config.ts'\nimport type { ImageThumbnailStateToIndexCandidateDivinerParams } from './Params.ts'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | ImageThumbnail | TimeStamp\n\n/**\n * The response from the ImageThumbnailStateToIndexCandidateDiviner\n */\nexport type ImageThumbnailStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<ImageThumbnailDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\nconst payload_schemas = [ImageThumbnailSchema, TimestampSchema]\n\n/**\n * Index candidate identity functions\n */\nconst indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const\nconst isIndexCandidate = (x?: unknown | null): x is IndexCandidate => {\n return indexCandidateIdentityFunctions.map(is => is(x)).some(Boolean)\n}\nconst asIndexCandidate = AsObjectFactory.create(isIndexCandidate)\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'ImageThumbnailStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class ImageThumbnailStateToIndexCandidateDiviner<\n TParams extends ImageThumbnailStateToIndexCandidateDivinerParams = ImageThumbnailStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ImageThumbnailStateToIndexCandidateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = ImageThumbnailStateToIndexCandidateDivinerConfigSchema\n static override 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[] = filterAs(filteredResults, asIndexCandidate)\n return [bw, ...indexCandidates]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailStateToIndexCandidateDivinerResponse> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)\n // If there is no last state, start from the beginning\n ?? { schema: ModuleStateSchema, state: { cursor: SequenceConstants.minLocalSequence } }\n\n // Get the last cursor\n const cursor = lastState?.state?.cursor\n // Get the archivist for the store\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n\n // Get the next batch of results\n const nextOffset: ArchivistNextOptions = { limit: this.payloadDivinerLimit, order }\n // Only use the cursor if it's a valid offset\n if (cursor !== SequenceConstants.minLocalSequence) nextOffset.cursor = cursor\n // Get next batch of results starting from the offset\n const next = await sourceArchivist.next(nextOffset)\n if (next.length === 0) return [lastState]\n\n const batch = filterAs(next, asBoundWitness)\n .filter(exists)\n .filter(bw => payloadSchemasContainsAll(bw, payload_schemas))\n // Get source data\n const indexCandidates: IndexCandidate[] = (await Promise.all(\n batch\n .filter(isBoundWitness)\n .map(bw => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n ))\n .filter(exists)\n .flat()\n const nextCursor = assertEx(next.at(-1)?._sequence, () => `${moduleName}: Expected next to have a sequence`)\n const nextState: ModuleState<ImageThumbnailDivinerState> = { schema: ModuleStateSchema, state: { ...lastState.state, cursor: nextCursor } }\n return [nextState, ...indexCandidates]\n }\n\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore\n */\n protected async getArchivistForStore() {\n const name = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.archivist`)\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore\n */\n protected async getBoundWitnessDivinerForStore() {\n const name = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n const mod = assertEx(await this.resolve(name), () => `${moduleName}: Failed to resolve payloadStore.boundWitnessDiviner`)\n return DivinerWrapper.wrap(mod, this.account)\n }\n}\n"],"mappings":"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","names":["AbstractDiviner","DivinerConfigSchema","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","isImageThumbnailDivinerQuery","PayloadBuilder","UrlSchema","AbstractDiviner","DivinerConfigSchema","isImageThumbnailDivinerQuery","order","UrlSchema","PayloadBuilder","PayloadDivinerQuerySchema","exists","isBoundWitness","AbstractDiviner","ImageThumbnailSchema","isImageThumbnail","isTimestamp","TimestampSchema","ImageThumbnailSchema","TimestampSchema","isImageThumbnail","isTimestamp","AbstractDiviner","exists","isBoundWitness"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/diviner-image-thumbnail",
3
- "version": "3.2.0-rc.1",
3
+ "version": "3.2.0-rc.3",
4
4
  "description": "Typescript/Javascript Plugins for XYO Platform",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -29,39 +29,41 @@
29
29
  "module": "dist/neutral/index.mjs",
30
30
  "types": "dist/neutral/index.d.ts",
31
31
  "dependencies": {
32
- "@xylabs/assert": "^4.4.12",
33
- "@xylabs/exists": "^4.4.12",
34
- "@xylabs/hex": "^4.4.12",
35
- "@xyo-network/archivist-model": "^3.6.0-rc.1",
36
- "@xyo-network/archivist-wrapper": "^3.6.0-rc.1",
37
- "@xyo-network/boundwitness-model": "^3.6.0-rc.1",
38
- "@xyo-network/diviner-abstract": "^3.6.0-rc.1",
39
- "@xyo-network/diviner-boundwitness-model": "^3.6.0-rc.1",
40
- "@xyo-network/diviner-indexing": "^3.6.0-rc.1",
41
- "@xyo-network/diviner-model": "^3.6.0-rc.1",
42
- "@xyo-network/diviner-payload-model": "^3.6.0-rc.1",
43
- "@xyo-network/diviner-wrapper": "^3.6.0-rc.1",
44
- "@xyo-network/image-thumbnail-payload-plugin": "^3.2.0-rc.1",
45
- "@xyo-network/module-model": "^3.6.0-rc.1",
46
- "@xyo-network/payload-builder": "^3.6.0-rc.1",
47
- "@xyo-network/payload-model": "^3.6.0-rc.1",
48
- "@xyo-network/url-payload-plugin": "^3.2.0-rc.1",
49
- "@xyo-network/witness-timestamp": "^3.6.0-rc.1"
32
+ "@xylabs/array": "^4.4.25",
33
+ "@xylabs/assert": "^4.4.25",
34
+ "@xylabs/exists": "^4.4.25",
35
+ "@xylabs/hex": "^4.4.25",
36
+ "@xylabs/object": "^4.4.25",
37
+ "@xyo-network/archivist-model": "^3.6.0-rc.13",
38
+ "@xyo-network/archivist-wrapper": "^3.6.0-rc.13",
39
+ "@xyo-network/boundwitness-model": "^3.6.0-rc.13",
40
+ "@xyo-network/boundwitness-validator": "^3.6.0-rc.13",
41
+ "@xyo-network/diviner-abstract": "^3.6.0-rc.13",
42
+ "@xyo-network/diviner-indexing": "^3.6.0-rc.13",
43
+ "@xyo-network/diviner-model": "^3.6.0-rc.13",
44
+ "@xyo-network/diviner-payload-model": "^3.6.0-rc.13",
45
+ "@xyo-network/diviner-wrapper": "^3.6.0-rc.13",
46
+ "@xyo-network/image-thumbnail-payload-plugin": "^3.2.0-rc.3",
47
+ "@xyo-network/module-model": "^3.6.0-rc.13",
48
+ "@xyo-network/payload-builder": "^3.6.0-rc.13",
49
+ "@xyo-network/payload-model": "^3.6.0-rc.13",
50
+ "@xyo-network/url-payload-plugin": "^3.2.0-rc.3",
51
+ "@xyo-network/witness-timestamp": "^3.6.0-rc.13"
50
52
  },
51
53
  "devDependencies": {
52
- "@xylabs/delay": "^4.4.12",
53
- "@xylabs/hex": "^4.4.12",
54
- "@xylabs/ts-scripts-yarn3": "^4.2.4",
55
- "@xylabs/tsconfig": "^4.2.4",
56
- "@xylabs/vitest-extended": "^4.4.12",
57
- "@xyo-network/account": "^3.6.0-rc.1",
58
- "@xyo-network/archivist-memory": "^3.6.0-rc.1",
59
- "@xyo-network/boundwitness-builder": "^3.6.0-rc.1",
60
- "@xyo-network/diviner-boundwitness-memory": "^3.6.0-rc.1",
61
- "@xyo-network/diviner-payload-memory": "^3.6.0-rc.1",
62
- "@xyo-network/manifest": "^3.6.0-rc.1",
63
- "@xyo-network/module-factory-locator": "^3.6.0-rc.1",
64
- "@xyo-network/node-memory": "^3.6.0-rc.1",
54
+ "@xylabs/delay": "^4.4.25",
55
+ "@xylabs/hex": "^4.4.25",
56
+ "@xylabs/ts-scripts-yarn3": "^4.2.6",
57
+ "@xylabs/tsconfig": "^4.2.6",
58
+ "@xylabs/vitest-extended": "^4.4.25",
59
+ "@xyo-network/account": "^3.6.0-rc.13",
60
+ "@xyo-network/archivist-memory": "^3.6.0-rc.13",
61
+ "@xyo-network/boundwitness-builder": "^3.6.0-rc.13",
62
+ "@xyo-network/diviner-boundwitness-memory": "^3.6.0-rc.13",
63
+ "@xyo-network/diviner-payload-memory": "^3.6.0-rc.13",
64
+ "@xyo-network/manifest": "^3.6.0-rc.13",
65
+ "@xyo-network/module-factory-locator": "^3.6.0-rc.13",
66
+ "@xyo-network/node-memory": "^3.6.0-rc.13",
65
67
  "typescript": "^5.7.2",
66
68
  "vitest": "^2.1.8"
67
69
  },
@@ -1,5 +1,6 @@
1
+ import type { Hex } from '@xylabs/hex'
1
2
  import type { StateDictionary } from '@xyo-network/module-model'
2
3
 
3
4
  export type ImageThumbnailDivinerState = StateDictionary & {
4
- offset: number
5
+ cursor: Hex
5
6
  }
@@ -62,14 +62,15 @@ export class ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner extends Ab
62
62
  const { timestamp } = timestampPayload
63
63
  const { status } = http ?? {}
64
64
  const success = !!imageThumbnailPayload.url // Call anything with a thumbnail url a success
65
- const sources: Hash[] = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload])
65
+ const $sources: Hash[] = await PayloadBuilder.dataHashes([bw, imageThumbnailPayload, timestampPayload])
66
66
  const urlPayload = { schema: UrlSchema, url }
67
67
  const key: Hash = await PayloadBuilder.dataHash(urlPayload)
68
68
  const fields: ImageThumbnailResultIndexFields = {
69
- key, sources, success, timestamp,
69
+ key, success, timestamp,
70
70
  }
71
71
  if (status) fields.status = status
72
- const result = await new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({ schema: ImageThumbnailResultIndexSchema })
72
+ const result = new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({ schema: ImageThumbnailResultIndexSchema })
73
+ .meta({ $sources })
73
74
  .fields(fields)
74
75
  .build()
75
76
  return [result]
@@ -8,7 +8,7 @@ import type {
8
8
  import {
9
9
  ImageThumbnailResultSchema,
10
10
  isImageThumbnailDivinerQuery,
11
- isImageThumbnailResultIndex,
11
+ isImageThumbnailResultIndexWithSources,
12
12
  } from '@xyo-network/image-thumbnail-payload-plugin'
13
13
  import { PayloadBuilder } from '@xyo-network/payload-builder'
14
14
  import type { Payload, Schema } from '@xyo-network/payload-model'
@@ -32,7 +32,7 @@ export class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDivine
32
32
  protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailResult[]> {
33
33
  // Filter out the two operands
34
34
  const imageThumbnailDivinerQueries = payloads.filter(isImageThumbnailDivinerQuery)
35
- const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndex)
35
+ const imageThumbnailResultIndexes = payloads.filter(isImageThumbnailResultIndexWithSources)
36
36
 
37
37
  // If we have operands
38
38
  if (imageThumbnailDivinerQueries.length > 0 && imageThumbnailResultIndexes.length > 0) {
@@ -41,7 +41,7 @@ export class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDivine
41
41
  await Promise.all(
42
42
  imageThumbnailDivinerQueries.map(async (imageThumbnailDivinerQuery) => {
43
43
  const { url } = imageThumbnailDivinerQuery
44
- const urlPayload = await new PayloadBuilder<Omit<ImageThumbnailResult, 'timestamp' | 'success' | 'sources'>>({ schema: UrlSchema })
44
+ const urlPayload = new PayloadBuilder<Omit<ImageThumbnailResult, 'timestamp' | 'success' | 'sources'>>({ schema: UrlSchema })
45
45
  .fields({ url })
46
46
  .build()
47
47
  const key = await PayloadBuilder.dataHash(urlPayload)
@@ -50,22 +50,17 @@ export class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDivine
50
50
  ),
51
51
  )
52
52
  // Map the indexes to responses using the dictionary
53
- return (
54
- await Promise.all(
55
- imageThumbnailResultIndexes.map(async (imageThumbnailResultIndex) => {
56
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
57
- const {
58
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
59
- key, schema, ...commonFields
60
- } = imageThumbnailResultIndex
61
- const url = keyToUrlDictionary?.[key]
62
- if (url) {
63
- const fields: ImageThumbnailResultFields = { ...commonFields, url }
64
- return await new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema }).fields(fields).build()
65
- }
66
- }),
67
- )
68
- ).filter(exists)
53
+ return imageThumbnailResultIndexes.map((imageThumbnailResultIndex) => {
54
+ const {
55
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
56
+ key, schema, $sources, ...commonFields
57
+ } = imageThumbnailResultIndex
58
+ const url = keyToUrlDictionary?.[key]
59
+ if (url) {
60
+ const fields: ImageThumbnailResultFields = { ...commonFields, url }
61
+ return new PayloadBuilder<ImageThumbnailResult>({ schema: ImageThumbnailResultSchema }).fields(fields).meta({ $sources }).build()
62
+ }
63
+ }).filter(exists)
69
64
  }
70
65
  return []
71
66
  }
@@ -30,22 +30,20 @@ export class ImageThumbnailQueryToImageThumbnailIndexQueryDiviner extends Abstra
30
30
  const results = await Promise.all(
31
31
  queries.map(async (query) => {
32
32
  const {
33
- limit: payloadLimit, offset: payloadOffset, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url,
33
+ limit: payloadLimit, order: payloadOrder, status: payloadStatus, success: payloadSuccess, url,
34
34
  } = query
35
35
  const limit = payloadLimit ?? 1
36
36
  const order = payloadOrder ?? 'desc'
37
- const offset = payloadOffset ?? 0
38
37
  const urlPayload = { schema: UrlSchema, url }
39
38
  const key = await PayloadBuilder.dataHash(urlPayload)
40
39
  const fields: Omit<ImageThumbnailResultQuery, 'schema' | 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>> = {
41
40
  key,
42
41
  limit,
43
- offset,
44
42
  order,
45
43
  }
46
44
  if (payloadSuccess !== undefined) fields.success = payloadSuccess
47
45
  if (payloadStatus !== undefined) fields.status = payloadStatus
48
- return await new PayloadBuilder<
46
+ return new PayloadBuilder<
49
47
  Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>
50
48
  >({ schema: PayloadDivinerQuerySchema })
51
49
  .fields(fields)
@@ -1,20 +1,20 @@
1
+ import { filterAs } from '@xylabs/array'
1
2
  import { assertEx } from '@xylabs/assert'
2
3
  import { exists } from '@xylabs/exists'
3
- import type { ArchivistInstance } from '@xyo-network/archivist-model'
4
+ import { AsObjectFactory } from '@xylabs/object'
5
+ import type { ArchivistInstance, ArchivistNextOptions } from '@xyo-network/archivist-model'
4
6
  import { ArchivistWrapper } from '@xyo-network/archivist-wrapper'
5
7
  import type { BoundWitness } from '@xyo-network/boundwitness-model'
6
- import { isBoundWitness } from '@xyo-network/boundwitness-model'
8
+ import { asBoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'
9
+ import { payloadSchemasContainsAll } from '@xyo-network/boundwitness-validator'
7
10
  import { AbstractDiviner } from '@xyo-network/diviner-abstract'
8
- import type { BoundWitnessDivinerQueryPayload } from '@xyo-network/diviner-boundwitness-model'
9
- import { BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'
10
11
  import { DivinerWrapper } from '@xyo-network/diviner-wrapper'
11
12
  import type { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'
12
13
  import { ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'
13
14
  import type { ModuleState } from '@xyo-network/module-model'
14
15
  import { isModuleState, ModuleStateSchema } from '@xyo-network/module-model'
15
- import { PayloadBuilder } from '@xyo-network/payload-builder'
16
- import type {
17
- Payload, Schema, WithSources,
16
+ import {
17
+ type Payload, type Schema, SequenceConstants,
18
18
  } from '@xyo-network/payload-model'
19
19
  import type { TimeStamp } from '@xyo-network/witness-timestamp'
20
20
  import { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'
@@ -53,6 +53,10 @@ const payload_schemas = [ImageThumbnailSchema, TimestampSchema]
53
53
  * Index candidate identity functions
54
54
  */
55
55
  const indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const
56
+ const isIndexCandidate = (x?: unknown | null): x is IndexCandidate => {
57
+ return indexCandidateIdentityFunctions.map(is => is(x)).some(Boolean)
58
+ }
59
+ const asIndexCandidate = AsObjectFactory.create(isIndexCandidate)
56
60
 
57
61
  /**
58
62
  * The default order to search Bound Witnesses to identify index candidates
@@ -88,36 +92,43 @@ export class ImageThumbnailStateToIndexCandidateDiviner<
88
92
  const results = await archivist.get(hashes)
89
93
  const filteredResults = indexCandidateIdentityFunctions.map(is => results.find(is))
90
94
  if (filteredResults.includes(undefined)) return undefined
91
- const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]
95
+ const indexCandidates: IndexCandidate[] = filterAs(filteredResults, asIndexCandidate)
92
96
  return [bw, ...indexCandidates]
93
97
  }
94
98
 
95
99
  protected override async divineHandler(payloads: Payload[] = []): Promise<ImageThumbnailStateToIndexCandidateDivinerResponse> {
96
100
  // Retrieve the last state from what was passed in
97
101
  const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)
98
- // If there is no last state, start from the beginning
99
- if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]
100
- // Otherwise, get the last offset
101
- const { offset } = lastState.state
102
+ // If there is no last state, start from the beginning
103
+ ?? { schema: ModuleStateSchema, state: { cursor: SequenceConstants.minLocalSequence } }
104
+
105
+ // Get the last cursor
106
+ const cursor = lastState?.state?.cursor
107
+ // Get the archivist for the store
108
+ const sourceArchivist = await this.getArchivistForStore()
109
+ if (!sourceArchivist) return [lastState]
110
+
111
+ // Get the next batch of results
112
+ const nextOffset: ArchivistNextOptions = { limit: this.payloadDivinerLimit, order }
113
+ // Only use the cursor if it's a valid offset
114
+ if (cursor !== SequenceConstants.minLocalSequence) nextOffset.cursor = cursor
102
115
  // Get next batch of results starting from the offset
103
- const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()
104
- const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })
105
- .fields({
106
- limit: this.payloadDivinerLimit, offset, order, payload_schemas,
107
- })
108
- .build()
109
- const batch = (await boundWitnessDiviner.divine([query])) as WithSources<BoundWitness>[]
110
- if (batch.length === 0) return [lastState]
116
+ const next = await sourceArchivist.next(nextOffset)
117
+ if (next.length === 0) return [lastState]
118
+
119
+ const batch = filterAs(next, asBoundWitness)
120
+ .filter(exists)
121
+ .filter(bw => payloadSchemasContainsAll(bw, payload_schemas))
111
122
  // Get source data
112
- const sourceArchivist = await this.getArchivistForStore()
113
- const indexCandidates: IndexCandidate[] = (
114
- await Promise.all(
115
- batch.filter(isBoundWitness).map(bw => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),
116
- )
117
- )
123
+ const indexCandidates: IndexCandidate[] = (await Promise.all(
124
+ batch
125
+ .filter(isBoundWitness)
126
+ .map(bw => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),
127
+ ))
118
128
  .filter(exists)
119
129
  .flat()
120
- const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }
130
+ const nextCursor = assertEx(next.at(-1)?._sequence, () => `${moduleName}: Expected next to have a sequence`)
131
+ const nextState: ModuleState<ImageThumbnailDivinerState> = { schema: ModuleStateSchema, state: { ...lastState.state, cursor: nextCursor } }
121
132
  return [nextState, ...indexCandidates]
122
133
  }
123
134
 
package/xy.config.ts CHANGED
@@ -7,5 +7,4 @@ const config: XyTsupConfig = {
7
7
  },
8
8
  }
9
9
 
10
- // eslint-disable-next-line import-x/no-default-export
11
10
  export default config