Use production GraphQL query for DoorDash modifier extraction
The minimal query was rejected by DoorDash's schema validation. Replaced with production-matching query including OptionListFragment, OptionFragment, and NestedExtrasFragment. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
2cf5039c0f
commit
59dfd602cf
1 changed files with 80 additions and 6 deletions
|
|
@ -146,17 +146,91 @@ chromium.use(stealth());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!queryTemplate) {
|
if (!queryTemplate) {
|
||||||
log("Could not capture query template, using hardcoded minimal query");
|
log("Could not capture query template, using production query");
|
||||||
// Minimal query that gets optionLists
|
// Full production query matching DoorDash's frontend schema
|
||||||
queryTemplate = `query itemPage($storeId: ID!, $itemId: ID!, $consumerId: ID, $isMerchantPreview: Boolean, $isNested: Boolean!, $fulfillmentType: FulfillmentType, $shouldFetchPresetCarousels: Boolean!, $cursorContext: ItemPageCursorContextInput, $shouldFetchStoreLiteData: Boolean!) {
|
queryTemplate = `query itemPage($storeId: ID!, $itemId: ID!, $consumerId: ID, $isMerchantPreview: Boolean, $isNested: Boolean!, $fulfillmentType: FulfillmentType, $shouldFetchPresetCarousels: Boolean!, $cursorContext: ItemPageCursorContextInput, $shouldFetchStoreLiteData: Boolean!, $scheduledMinTimeUtc: String, $scheduledMaxTimeUtc: String) {
|
||||||
itemPage(storeId: $storeId, itemId: $itemId, consumerId: $consumerId, isMerchantPreview: $isMerchantPreview, fulfillmentType: $fulfillmentType, cursorContext: $cursorContext) {
|
itemPage(
|
||||||
|
storeId: $storeId
|
||||||
|
itemId: $itemId
|
||||||
|
consumerId: $consumerId
|
||||||
|
isMerchantPreview: $isMerchantPreview
|
||||||
|
fulfillmentType: $fulfillmentType
|
||||||
|
cursorContext: $cursorContext
|
||||||
|
scheduledMinTimeUtc: $scheduledMinTimeUtc
|
||||||
|
scheduledMaxTimeUtc: $scheduledMaxTimeUtc
|
||||||
|
) {
|
||||||
|
itemHeader @skip(if: $isNested) {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
description
|
||||||
|
unitAmount
|
||||||
|
currency
|
||||||
|
decimalPlaces
|
||||||
|
__typename
|
||||||
|
}
|
||||||
optionLists {
|
optionLists {
|
||||||
name minNumOptions maxNumOptions isOptional
|
...OptionListFragment
|
||||||
options { name unitAmount currency decimalPlaces displayString __typename }
|
|
||||||
__typename
|
__typename
|
||||||
}
|
}
|
||||||
__typename
|
__typename
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fragment OptionListFragment on OptionList {
|
||||||
|
type
|
||||||
|
id
|
||||||
|
name
|
||||||
|
subtitle
|
||||||
|
minNumOptions
|
||||||
|
maxNumOptions
|
||||||
|
minAggregateOptionsQuantity
|
||||||
|
maxAggregateOptionsQuantity
|
||||||
|
minOptionChoiceQuantity
|
||||||
|
maxOptionChoiceQuantity
|
||||||
|
numFreeOptions
|
||||||
|
isOptional
|
||||||
|
options {
|
||||||
|
...OptionFragment
|
||||||
|
nestedExtrasList {
|
||||||
|
...NestedExtrasFragment
|
||||||
|
__typename
|
||||||
|
}
|
||||||
|
__typename
|
||||||
|
}
|
||||||
|
__typename
|
||||||
|
}
|
||||||
|
|
||||||
|
fragment OptionFragment on FeedOption {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
unitAmount
|
||||||
|
currency
|
||||||
|
displayString
|
||||||
|
decimalPlaces
|
||||||
|
nextCursor
|
||||||
|
defaultQuantity
|
||||||
|
imgUrl
|
||||||
|
__typename
|
||||||
|
}
|
||||||
|
|
||||||
|
fragment NestedExtrasFragment on OptionList {
|
||||||
|
type
|
||||||
|
id
|
||||||
|
name
|
||||||
|
subtitle
|
||||||
|
minNumOptions
|
||||||
|
maxNumOptions
|
||||||
|
minAggregateOptionsQuantity
|
||||||
|
maxAggregateOptionsQuantity
|
||||||
|
minOptionChoiceQuantity
|
||||||
|
maxOptionChoiceQuantity
|
||||||
|
numFreeOptions
|
||||||
|
isOptional
|
||||||
|
options {
|
||||||
|
...OptionFragment
|
||||||
|
__typename
|
||||||
|
}
|
||||||
|
__typename
|
||||||
}`;
|
}`;
|
||||||
} else {
|
} else {
|
||||||
log("Captured query template (" + queryTemplate.length + " chars)");
|
log("Captured query template (" + queryTemplate.length + " chars)");
|
||||||
|
|
|
||||||
Reference in a new issue