@xyo-network/diviner-image-thumbnail 3.2.0-rc.1 → 3.2.0-rc.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.
- package/dist/neutral/Diviner/ImageThumbnailDivinerState.d.ts +2 -1
- package/dist/neutral/Diviner/ImageThumbnailDivinerState.d.ts.map +1 -1
- package/dist/neutral/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts.map +1 -1
- package/dist/neutral/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.d.ts.map +1 -1
- package/dist/neutral/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.d.ts.map +1 -1
- package/dist/neutral/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.ts +100 -29
- package/dist/neutral/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.d.ts.map +1 -1
- package/dist/neutral/index.mjs +23 -22
- package/dist/neutral/index.mjs.map +1 -1
- package/package.json +34 -32
- package/src/Diviner/ImageThumbnailDivinerState.ts +2 -1
- package/src/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.ts +4 -3
- package/src/Diviner/ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDiviner.ts +0 -1
- package/src/Diviner/ImageThumbnailQueryToImageThumbnailIndexQueryDiviner.ts +2 -4
- package/src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts +26 -21
- package/xy.config.ts +0 -1
|
@@ -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,
|
|
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"}
|
package/dist/neutral/Diviner/ImageThumbnailIndexCandidateToImageThumbnailIndexDiviner.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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;CAuClG"}
|
|
@@ -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;
|
|
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"}
|
|
@@ -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("
|
|
45
|
-
account?: import(".store/@xyo-network-account-model-virtual-
|
|
44
|
+
protected getArchivistForStore(): Promise<ArchivistWrapper<import("@xyo-network/archivist-model").ArchivistModule<import("@xylabs/object").BaseParamsFields & {
|
|
45
|
+
account?: import(".store/@xyo-network-account-model-virtual-c5d2167f6b/package").AccountInstance | "random";
|
|
46
46
|
addToResolvers?: boolean;
|
|
47
|
-
additionalSigners?: import(".store/@xyo-network-account-model-virtual-
|
|
47
|
+
additionalSigners?: import(".store/@xyo-network-account-model-virtual-c5d2167f6b/package").AccountInstance[];
|
|
48
48
|
allowNameResolution?: boolean;
|
|
49
|
-
config: import("@
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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.24-da15b744dd/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("
|
|
68
|
-
account?: import(".store/@xyo-network-account-model-virtual-
|
|
109
|
+
protected getBoundWitnessDivinerForStore(): Promise<DivinerWrapper<import("@xyo-network/diviner-model").DivinerModule<import("@xylabs/object").BaseParamsFields & {
|
|
110
|
+
account?: import(".store/@xyo-network-account-model-virtual-c5d2167f6b/package").AccountInstance | "random";
|
|
69
111
|
addToResolvers?: boolean;
|
|
70
|
-
additionalSigners?: import(".store/@xyo-network-account-model-virtual-
|
|
112
|
+
additionalSigners?: import(".store/@xyo-network-account-model-virtual-c5d2167f6b/package").AccountInstance[];
|
|
71
113
|
allowNameResolution?: boolean;
|
|
72
|
-
config: import("@
|
|
73
|
-
schema:
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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.24-da15b744dd/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:
|
|
83
|
-
}
|
|
84
|
-
schema:
|
|
85
|
-
}
|
|
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":"
|
|
1
|
+
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../../src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts"],"names":[],"mappings":"AAIA,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;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AAEjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACjE,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;IAgC7H;;;OAGG;cACa,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAMpC;;;OAGG;cACa,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQ/C"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -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 =
|
|
66
|
+
const result = new PayloadBuilder({ schema: ImageThumbnailResultIndexSchema }).meta({ $sources }).fields(fields).build();
|
|
68
67
|
return [result];
|
|
69
68
|
})
|
|
70
69
|
);
|
|
@@ -149,7 +148,6 @@ var ImageThumbnailQueryToImageThumbnailIndexQueryDiviner = class extends Abstrac
|
|
|
149
148
|
queries.map(async (query) => {
|
|
150
149
|
const {
|
|
151
150
|
limit: payloadLimit,
|
|
152
|
-
offset: payloadOffset,
|
|
153
151
|
order: payloadOrder,
|
|
154
152
|
status: payloadStatus,
|
|
155
153
|
success: payloadSuccess,
|
|
@@ -157,18 +155,16 @@ var ImageThumbnailQueryToImageThumbnailIndexQueryDiviner = class extends Abstrac
|
|
|
157
155
|
} = query;
|
|
158
156
|
const limit = payloadLimit ?? 1;
|
|
159
157
|
const order2 = payloadOrder ?? "desc";
|
|
160
|
-
const offset = payloadOffset ?? 0;
|
|
161
158
|
const urlPayload = { schema: UrlSchema3, url };
|
|
162
159
|
const key = await PayloadBuilder3.dataHash(urlPayload);
|
|
163
160
|
const fields = {
|
|
164
161
|
key,
|
|
165
162
|
limit,
|
|
166
|
-
offset,
|
|
167
163
|
order: order2
|
|
168
164
|
};
|
|
169
165
|
if (payloadSuccess !== void 0) fields.success = payloadSuccess;
|
|
170
166
|
if (payloadStatus !== void 0) fields.status = payloadStatus;
|
|
171
|
-
return
|
|
167
|
+
return new PayloadBuilder3({ schema: PayloadDivinerQuerySchema }).fields(fields).build();
|
|
172
168
|
})
|
|
173
169
|
);
|
|
174
170
|
return results;
|
|
@@ -190,19 +186,24 @@ var ImageThumbnailStateToIndexCandidateDivinerSchema = `${ImageThumbnailDivinerS
|
|
|
190
186
|
var ImageThumbnailStateToIndexCandidateDivinerConfigSchema = `${ImageThumbnailStateToIndexCandidateDivinerSchema}.config`;
|
|
191
187
|
|
|
192
188
|
// src/Diviner/ImageThumbnailStateToIndexCandidateDiviner/Diviner.ts
|
|
189
|
+
import { filterAs } from "@xylabs/array";
|
|
193
190
|
import { assertEx } from "@xylabs/assert";
|
|
194
191
|
import { exists as exists2 } from "@xylabs/exists";
|
|
192
|
+
import { AsObjectFactory } from "@xylabs/object";
|
|
195
193
|
import { ArchivistWrapper } from "@xyo-network/archivist-wrapper";
|
|
196
|
-
import { isBoundWitness as isBoundWitness2 } from "@xyo-network/boundwitness-model";
|
|
194
|
+
import { asBoundWitness, isBoundWitness as isBoundWitness2 } from "@xyo-network/boundwitness-model";
|
|
195
|
+
import { payloadSchemasContainsAll } from "@xyo-network/boundwitness-validator";
|
|
197
196
|
import { AbstractDiviner as AbstractDiviner4 } from "@xyo-network/diviner-abstract";
|
|
198
|
-
import { BoundWitnessDivinerQuerySchema } from "@xyo-network/diviner-boundwitness-model";
|
|
199
197
|
import { DivinerWrapper } from "@xyo-network/diviner-wrapper";
|
|
200
198
|
import { ImageThumbnailSchema as ImageThumbnailSchema2, isImageThumbnail as isImageThumbnail2 } from "@xyo-network/image-thumbnail-payload-plugin";
|
|
201
199
|
import { isModuleState, ModuleStateSchema } from "@xyo-network/module-model";
|
|
202
|
-
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
203
200
|
import { isTimestamp as isTimestamp2, TimestampSchema as TimestampSchema2 } from "@xyo-network/witness-timestamp";
|
|
204
201
|
var payload_schemas = [ImageThumbnailSchema2, TimestampSchema2];
|
|
205
202
|
var indexCandidateIdentityFunctions = [isImageThumbnail2, isTimestamp2];
|
|
203
|
+
var isIndexCandidate = (x) => {
|
|
204
|
+
return indexCandidateIdentityFunctions.map((is) => is(x)).some(Boolean);
|
|
205
|
+
};
|
|
206
|
+
var asIndexCandidate = AsObjectFactory.create(isIndexCandidate);
|
|
206
207
|
var order = "asc";
|
|
207
208
|
var moduleName = "ImageThumbnailStateToIndexCandidateDiviner";
|
|
208
209
|
var ImageThumbnailStateToIndexCandidateDiviner = class _ImageThumbnailStateToIndexCandidateDiviner extends AbstractDiviner4 {
|
|
@@ -222,27 +223,27 @@ var ImageThumbnailStateToIndexCandidateDiviner = class _ImageThumbnailStateToInd
|
|
|
222
223
|
const results = await archivist.get(hashes);
|
|
223
224
|
const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is));
|
|
224
225
|
if (filteredResults.includes(void 0)) return void 0;
|
|
225
|
-
const indexCandidates = filteredResults
|
|
226
|
+
const indexCandidates = filterAs(filteredResults, asIndexCandidate);
|
|
226
227
|
return [bw, ...indexCandidates];
|
|
227
228
|
}
|
|
228
229
|
async divineHandler(payloads = []) {
|
|
229
230
|
const lastState = payloads.find(isModuleState);
|
|
230
|
-
if (!lastState) return [{ schema: ModuleStateSchema, state: {
|
|
231
|
-
const {
|
|
232
|
-
const
|
|
233
|
-
|
|
231
|
+
if (!lastState) return [{ schema: ModuleStateSchema, state: { cursor: "0" } }];
|
|
232
|
+
const { cursor } = lastState.state;
|
|
233
|
+
const sourceArchivist = await this.getArchivistForStore();
|
|
234
|
+
if (!sourceArchivist) return [lastState];
|
|
235
|
+
const next = await sourceArchivist.next({
|
|
234
236
|
limit: this.payloadDivinerLimit,
|
|
235
|
-
offset,
|
|
236
237
|
order,
|
|
237
|
-
|
|
238
|
-
})
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
const sourceArchivist = await this.getArchivistForStore();
|
|
238
|
+
cursor
|
|
239
|
+
});
|
|
240
|
+
if (next.length === 0) return [lastState];
|
|
241
|
+
const batch = filterAs(next, asBoundWitness).filter(exists2).filter((bw) => payloadSchemasContainsAll(bw, payload_schemas));
|
|
242
242
|
const indexCandidates = (await Promise.all(
|
|
243
243
|
batch.filter(isBoundWitness2).map((bw) => _ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist))
|
|
244
244
|
)).filter(exists2).flat();
|
|
245
|
-
const
|
|
245
|
+
const nextCursor = assertEx(next.at(-1)?._sequence, () => `${moduleName}: Expected next to have a sequence`);
|
|
246
|
+
const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, cursor: nextCursor } };
|
|
246
247
|
return [nextState, ...indexCandidates];
|
|
247
248
|
}
|
|
248
249
|
/**
|
|
@@ -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 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 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, 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 } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { asBoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { payloadSchemasContainsAll } from '@xyo-network/boundwitness-validator'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport type { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { ImageThumbnailSchema, isImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin'\nimport type { ModuleState } from '@xyo-network/module-model'\nimport { isModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport 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 if (!lastState) return [{ schema: ModuleStateSchema, state: { cursor: '0' } }]\n // Otherwise, get the last offset\n const { cursor } = lastState.state\n // Get next batch of results starting from the offset\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const next = await sourceArchivist.next({\n limit: this.payloadDivinerLimit, order, cursor,\n })\n if (next.length === 0) return [lastState]\n const batch = filterAs(next, asBoundWitness)\n .filter(exists)\n .filter(bw => payloadSchemasContainsAll(bw, payload_schemas))\n // Get source data\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(\n batch\n .filter(isBoundWitness)\n .map(bw => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),\n )\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.
|
|
3
|
+
"version": "3.2.0-rc.2",
|
|
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/
|
|
33
|
-
"@xylabs/
|
|
34
|
-
"@xylabs/
|
|
35
|
-
"@
|
|
36
|
-
"@
|
|
37
|
-
"@xyo-network/
|
|
38
|
-
"@xyo-network/
|
|
39
|
-
"@xyo-network/
|
|
40
|
-
"@xyo-network/
|
|
41
|
-
"@xyo-network/diviner-
|
|
42
|
-
"@xyo-network/diviner-
|
|
43
|
-
"@xyo-network/diviner-
|
|
44
|
-
"@xyo-network/
|
|
45
|
-
"@xyo-network/
|
|
46
|
-
"@xyo-network/payload-
|
|
47
|
-
"@xyo-network/
|
|
48
|
-
"@xyo-network/
|
|
49
|
-
"@xyo-network/
|
|
32
|
+
"@xylabs/array": "^4.4.24",
|
|
33
|
+
"@xylabs/assert": "^4.4.24",
|
|
34
|
+
"@xylabs/exists": "^4.4.24",
|
|
35
|
+
"@xylabs/hex": "^4.4.24",
|
|
36
|
+
"@xylabs/object": "^4.4.24",
|
|
37
|
+
"@xyo-network/archivist-model": "^3.6.0-rc.11",
|
|
38
|
+
"@xyo-network/archivist-wrapper": "^3.6.0-rc.11",
|
|
39
|
+
"@xyo-network/boundwitness-model": "^3.6.0-rc.11",
|
|
40
|
+
"@xyo-network/boundwitness-validator": "^3.6.0-rc.11",
|
|
41
|
+
"@xyo-network/diviner-abstract": "^3.6.0-rc.11",
|
|
42
|
+
"@xyo-network/diviner-indexing": "^3.6.0-rc.11",
|
|
43
|
+
"@xyo-network/diviner-model": "^3.6.0-rc.11",
|
|
44
|
+
"@xyo-network/diviner-payload-model": "^3.6.0-rc.11",
|
|
45
|
+
"@xyo-network/diviner-wrapper": "^3.6.0-rc.11",
|
|
46
|
+
"@xyo-network/image-thumbnail-payload-plugin": "^3.2.0-rc.2",
|
|
47
|
+
"@xyo-network/module-model": "^3.6.0-rc.11",
|
|
48
|
+
"@xyo-network/payload-builder": "^3.6.0-rc.11",
|
|
49
|
+
"@xyo-network/payload-model": "^3.6.0-rc.11",
|
|
50
|
+
"@xyo-network/url-payload-plugin": "^3.2.0-rc.2",
|
|
51
|
+
"@xyo-network/witness-timestamp": "^3.6.0-rc.11"
|
|
50
52
|
},
|
|
51
53
|
"devDependencies": {
|
|
52
|
-
"@xylabs/delay": "^4.4.
|
|
53
|
-
"@xylabs/hex": "^4.4.
|
|
54
|
-
"@xylabs/ts-scripts-yarn3": "^4.2.
|
|
55
|
-
"@xylabs/tsconfig": "^4.2.
|
|
56
|
-
"@xylabs/vitest-extended": "^4.4.
|
|
57
|
-
"@xyo-network/account": "^3.6.0-rc.
|
|
58
|
-
"@xyo-network/archivist-memory": "^3.6.0-rc.
|
|
59
|
-
"@xyo-network/boundwitness-builder": "^3.6.0-rc.
|
|
60
|
-
"@xyo-network/diviner-boundwitness-memory": "^3.6.0-rc.
|
|
61
|
-
"@xyo-network/diviner-payload-memory": "^3.6.0-rc.
|
|
62
|
-
"@xyo-network/manifest": "^3.6.0-rc.
|
|
63
|
-
"@xyo-network/module-factory-locator": "^3.6.0-rc.
|
|
64
|
-
"@xyo-network/node-memory": "^3.6.0-rc.
|
|
54
|
+
"@xylabs/delay": "^4.4.24",
|
|
55
|
+
"@xylabs/hex": "^4.4.24",
|
|
56
|
+
"@xylabs/ts-scripts-yarn3": "^4.2.6",
|
|
57
|
+
"@xylabs/tsconfig": "^4.2.6",
|
|
58
|
+
"@xylabs/vitest-extended": "^4.4.24",
|
|
59
|
+
"@xyo-network/account": "^3.6.0-rc.11",
|
|
60
|
+
"@xyo-network/archivist-memory": "^3.6.0-rc.11",
|
|
61
|
+
"@xyo-network/boundwitness-builder": "^3.6.0-rc.11",
|
|
62
|
+
"@xyo-network/diviner-boundwitness-memory": "^3.6.0-rc.11",
|
|
63
|
+
"@xyo-network/diviner-payload-memory": "^3.6.0-rc.11",
|
|
64
|
+
"@xyo-network/manifest": "^3.6.0-rc.11",
|
|
65
|
+
"@xyo-network/module-factory-locator": "^3.6.0-rc.11",
|
|
66
|
+
"@xyo-network/node-memory": "^3.6.0-rc.11",
|
|
65
67
|
"typescript": "^5.7.2",
|
|
66
68
|
"vitest": "^2.1.8"
|
|
67
69
|
},
|
|
@@ -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,
|
|
69
|
+
key, success, timestamp,
|
|
70
70
|
}
|
|
71
71
|
if (status) fields.status = status
|
|
72
|
-
const result =
|
|
72
|
+
const result = new PayloadBuilder<WithSources<ImageThumbnailResultIndex>>({ schema: ImageThumbnailResultIndexSchema })
|
|
73
|
+
.meta({ $sources })
|
|
73
74
|
.fields(fields)
|
|
74
75
|
.build()
|
|
75
76
|
return [result]
|
|
@@ -53,7 +53,6 @@ export class ImageThumbnailIndexQueryResponseToImageThumbnailQueryResponseDivine
|
|
|
53
53
|
return (
|
|
54
54
|
await Promise.all(
|
|
55
55
|
imageThumbnailResultIndexes.map(async (imageThumbnailResultIndex) => {
|
|
56
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
57
56
|
const {
|
|
58
57
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
59
58
|
key, schema, ...commonFields
|
|
@@ -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,
|
|
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
|
|
46
|
+
return new PayloadBuilder<
|
|
49
47
|
Omit<ImageThumbnailResultQuery, 'timestamp' | 'success'> & Partial<Pick<ImageThumbnailResultQuery, 'success'>>
|
|
50
48
|
>({ schema: PayloadDivinerQuerySchema })
|
|
51
49
|
.fields(fields)
|
|
@@ -1,21 +1,19 @@
|
|
|
1
|
+
import { filterAs } from '@xylabs/array'
|
|
1
2
|
import { assertEx } from '@xylabs/assert'
|
|
2
3
|
import { exists } from '@xylabs/exists'
|
|
4
|
+
import { AsObjectFactory } from '@xylabs/object'
|
|
3
5
|
import type { ArchivistInstance } 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 {
|
|
16
|
-
import type {
|
|
17
|
-
Payload, Schema, WithSources,
|
|
18
|
-
} from '@xyo-network/payload-model'
|
|
16
|
+
import type { Payload, Schema } from '@xyo-network/payload-model'
|
|
19
17
|
import type { TimeStamp } from '@xyo-network/witness-timestamp'
|
|
20
18
|
import { isTimestamp, TimestampSchema } from '@xyo-network/witness-timestamp'
|
|
21
19
|
|
|
@@ -53,6 +51,10 @@ const payload_schemas = [ImageThumbnailSchema, TimestampSchema]
|
|
|
53
51
|
* Index candidate identity functions
|
|
54
52
|
*/
|
|
55
53
|
const indexCandidateIdentityFunctions = [isImageThumbnail, isTimestamp] as const
|
|
54
|
+
const isIndexCandidate = (x?: unknown | null): x is IndexCandidate => {
|
|
55
|
+
return indexCandidateIdentityFunctions.map(is => is(x)).some(Boolean)
|
|
56
|
+
}
|
|
57
|
+
const asIndexCandidate = AsObjectFactory.create(isIndexCandidate)
|
|
56
58
|
|
|
57
59
|
/**
|
|
58
60
|
* The default order to search Bound Witnesses to identify index candidates
|
|
@@ -88,7 +90,7 @@ export class ImageThumbnailStateToIndexCandidateDiviner<
|
|
|
88
90
|
const results = await archivist.get(hashes)
|
|
89
91
|
const filteredResults = indexCandidateIdentityFunctions.map(is => results.find(is))
|
|
90
92
|
if (filteredResults.includes(undefined)) return undefined
|
|
91
|
-
const indexCandidates: IndexCandidate[] = filteredResults
|
|
93
|
+
const indexCandidates: IndexCandidate[] = filterAs(filteredResults, asIndexCandidate)
|
|
92
94
|
return [bw, ...indexCandidates]
|
|
93
95
|
}
|
|
94
96
|
|
|
@@ -96,28 +98,31 @@ export class ImageThumbnailStateToIndexCandidateDiviner<
|
|
|
96
98
|
// Retrieve the last state from what was passed in
|
|
97
99
|
const lastState = payloads.find(isModuleState<ImageThumbnailDivinerState>)
|
|
98
100
|
// If there is no last state, start from the beginning
|
|
99
|
-
if (!lastState) return [{ schema: ModuleStateSchema, state: {
|
|
101
|
+
if (!lastState) return [{ schema: ModuleStateSchema, state: { cursor: '0' } }]
|
|
100
102
|
// Otherwise, get the last offset
|
|
101
|
-
const {
|
|
103
|
+
const { cursor } = lastState.state
|
|
102
104
|
// 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]
|
|
111
|
-
// Get source data
|
|
112
105
|
const sourceArchivist = await this.getArchivistForStore()
|
|
106
|
+
if (!sourceArchivist) return [lastState]
|
|
107
|
+
const next = await sourceArchivist.next({
|
|
108
|
+
limit: this.payloadDivinerLimit, order, cursor,
|
|
109
|
+
})
|
|
110
|
+
if (next.length === 0) return [lastState]
|
|
111
|
+
const batch = filterAs(next, asBoundWitness)
|
|
112
|
+
.filter(exists)
|
|
113
|
+
.filter(bw => payloadSchemasContainsAll(bw, payload_schemas))
|
|
114
|
+
// Get source data
|
|
113
115
|
const indexCandidates: IndexCandidate[] = (
|
|
114
116
|
await Promise.all(
|
|
115
|
-
batch
|
|
117
|
+
batch
|
|
118
|
+
.filter(isBoundWitness)
|
|
119
|
+
.map(bw => ImageThumbnailStateToIndexCandidateDiviner.getPayloadsInBoundWitness(bw, sourceArchivist)),
|
|
116
120
|
)
|
|
117
121
|
)
|
|
118
122
|
.filter(exists)
|
|
119
123
|
.flat()
|
|
120
|
-
const
|
|
124
|
+
const nextCursor = assertEx(next.at(-1)?._sequence, () => `${moduleName}: Expected next to have a sequence`)
|
|
125
|
+
const nextState: ModuleState<ImageThumbnailDivinerState> = { schema: ModuleStateSchema, state: { ...lastState.state, cursor: nextCursor } }
|
|
121
126
|
return [nextState, ...indexCandidates]
|
|
122
127
|
}
|
|
123
128
|
|