@factorypure/client-helpers 1.1.16 → 1.1.18
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/index.d.ts +5 -20
- package/dist/index.js +54 -12
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -508,28 +508,12 @@ export declare const immersiveScrapeResultsSchema: z.ZodObject<{
|
|
|
508
508
|
}, z.core.$strip>>;
|
|
509
509
|
ai_extracted_sku: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
510
510
|
ai_extracted_brand: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
ai_extraction_quality: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
516
|
-
high: "high";
|
|
517
|
-
medium: "medium";
|
|
518
|
-
low: "low";
|
|
519
|
-
}>>>;
|
|
520
|
-
ai_extraction_method: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
521
|
-
openai: "openai";
|
|
522
|
-
regex_fallback: "regex_fallback";
|
|
523
|
-
cached: "cached";
|
|
524
|
-
none: "none";
|
|
525
|
-
}>>>;
|
|
511
|
+
ai_extracted_description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
512
|
+
ai_extracted_features: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
513
|
+
ai_extracted_specifications: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
514
|
+
ai_extracted_shipping: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
526
515
|
ai_processed_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
527
516
|
listing_hash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
528
|
-
ai_unique_skus_found: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodNumber>>>;
|
|
529
|
-
ai_most_common_sku: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
530
|
-
ai_sku_confidence_avg: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
531
|
-
ai_high_quality_listing_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
532
|
-
ai_total_listing_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
533
517
|
inline_link: z.ZodOptional<z.ZodNull>;
|
|
534
518
|
delivery: z.ZodOptional<z.ZodNull>;
|
|
535
519
|
}, z.core.$strip>;
|
|
@@ -697,6 +681,7 @@ export declare const HIDE_OVERRIDE_REASONS: {
|
|
|
697
681
|
CALCULATED_SKU_MATCH: string;
|
|
698
682
|
CALCULATED_SKU_PARTIAL_MATCH: string;
|
|
699
683
|
CALCULATED_ALT_SKU_MATCH: string;
|
|
684
|
+
AI_COMPARISON_MATCH: string;
|
|
700
685
|
};
|
|
701
686
|
export declare const TOO_CHEAP_MULTIPLIER = 0.75;
|
|
702
687
|
export declare const TOO_EXPENSIVE_MULTIPLIER = 1.15;
|
package/dist/index.js
CHANGED
|
@@ -334,20 +334,12 @@ export const immersiveScrapeResultsSchema = z.object({
|
|
|
334
334
|
// AI extraction fields (per store listing)
|
|
335
335
|
ai_extracted_sku: z.string().nullable().optional(),
|
|
336
336
|
ai_extracted_brand: z.string().nullable().optional(),
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
ai_extraction_quality: z.enum(['high', 'medium', 'low']).nullable().optional(),
|
|
342
|
-
ai_extraction_method: z.enum(['openai', 'regex_fallback', 'cached', 'none']).nullable().optional(),
|
|
337
|
+
ai_extracted_description: z.string().nullable().optional(),
|
|
338
|
+
ai_extracted_features: z.string().nullable().optional(),
|
|
339
|
+
ai_extracted_specifications: z.string().nullable().optional(),
|
|
340
|
+
ai_extracted_shipping: z.string().nullable().optional(),
|
|
343
341
|
ai_processed_at: z.string().nullable().optional(),
|
|
344
342
|
listing_hash: z.string().nullable().optional(),
|
|
345
|
-
// AI aggregate fields (from variant_scrape_found_product_ids)
|
|
346
|
-
ai_unique_skus_found: z.record(z.string(), z.number()).nullable().optional(),
|
|
347
|
-
ai_most_common_sku: z.string().nullable().optional(),
|
|
348
|
-
ai_sku_confidence_avg: z.number().nullable().optional(),
|
|
349
|
-
ai_high_quality_listing_count: z.number().nullable().optional(),
|
|
350
|
-
ai_total_listing_count: z.number().nullable().optional(),
|
|
351
343
|
inline_link: z.null().optional(),
|
|
352
344
|
delivery: z.null().optional(),
|
|
353
345
|
});
|
|
@@ -429,6 +421,7 @@ export const HIDE_OVERRIDE_REASONS = {
|
|
|
429
421
|
CALCULATED_SKU_MATCH: 'Calculated SKU Match',
|
|
430
422
|
CALCULATED_SKU_PARTIAL_MATCH: 'Calculated SKU Partial Match',
|
|
431
423
|
CALCULATED_ALT_SKU_MATCH: 'Calc. Alt SKU Match',
|
|
424
|
+
AI_COMPARISON_MATCH: 'AI Comparison Match',
|
|
432
425
|
};
|
|
433
426
|
const HIDE_ALWAYS_MAP = {
|
|
434
427
|
[HIDE_REASONS.HIGH_PRICE_OUTLIER]: true,
|
|
@@ -1199,6 +1192,55 @@ class RefurbishedUsedRule {
|
|
|
1199
1192
|
// ===============================
|
|
1200
1193
|
// Override Rules
|
|
1201
1194
|
// ===============================
|
|
1195
|
+
/**
|
|
1196
|
+
* Rule for filtering AI comparison mismatches
|
|
1197
|
+
*/
|
|
1198
|
+
class AIComparisonOverrideRule {
|
|
1199
|
+
id = 'ai_comparison_override';
|
|
1200
|
+
name = 'AI Comparison Override';
|
|
1201
|
+
description = 'Filters results where AI comparison determined the listing does match the variant';
|
|
1202
|
+
severity = FilterSeverity.INFO;
|
|
1203
|
+
priority = 200;
|
|
1204
|
+
enabled = true;
|
|
1205
|
+
canBeOverridden = true;
|
|
1206
|
+
overridableBy = [];
|
|
1207
|
+
evaluate(context) {
|
|
1208
|
+
// Only applies to results with listing_hash (primarily immersive results)
|
|
1209
|
+
const result = context.result;
|
|
1210
|
+
if (!result.listing_hash || !context.comparisonMap) {
|
|
1211
|
+
return null;
|
|
1212
|
+
}
|
|
1213
|
+
const variantId = String(context.variant.id);
|
|
1214
|
+
const listingHash = result.listing_hash;
|
|
1215
|
+
// Check if we have comparison data for this variant and listing
|
|
1216
|
+
const variantComparisons = context.comparisonMap[variantId];
|
|
1217
|
+
if (!variantComparisons) {
|
|
1218
|
+
return null;
|
|
1219
|
+
}
|
|
1220
|
+
const comparison = variantComparisons[listingHash];
|
|
1221
|
+
if (!comparison) {
|
|
1222
|
+
return null;
|
|
1223
|
+
}
|
|
1224
|
+
// Only filter confirmed overrides (is_match = 1 AND sufficient_info = 1)
|
|
1225
|
+
// Allow results where we don't have sufficient info to compare
|
|
1226
|
+
if (comparison.is_match === 1 && comparison.sufficient_info === 1) {
|
|
1227
|
+
return {
|
|
1228
|
+
ruleId: this.id,
|
|
1229
|
+
severity: this.severity,
|
|
1230
|
+
message: HIDE_OVERRIDE_REASONS.AI_COMPARISON_MATCH,
|
|
1231
|
+
metadata: {
|
|
1232
|
+
listingHash,
|
|
1233
|
+
isMatch: comparison.is_match,
|
|
1234
|
+
sufficientInfo: comparison.sufficient_info,
|
|
1235
|
+
resultDescription: comparison.result_description,
|
|
1236
|
+
comparedAt: comparison.compared_at,
|
|
1237
|
+
},
|
|
1238
|
+
timestamp: new Date().toISOString(),
|
|
1239
|
+
};
|
|
1240
|
+
}
|
|
1241
|
+
return null;
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1202
1244
|
/**
|
|
1203
1245
|
* Override rule for SKU matches in title
|
|
1204
1246
|
*/
|