@@ -478,29 +478,48 @@ const printObject = (objectType) => {
478478 lines . push ( `class ${ objectType . name } ${ extendsClause } ${ implementsClause } {` ) ;
479479 lines . push ( ` const ${ objectType . name } ({` ) ;
480480 const fields = Object . values ( objectType . getFields ( ) ) . sort ( ( a , b ) => a . name . localeCompare ( b . name ) ) ;
481+
482+ // Special handling for PurchaseAndroid and PurchaseIOS to add isAlternativeBilling if missing
483+ const needsAlternativeBilling = ( objectType . name === 'PurchaseAndroid' || objectType . name === 'PurchaseIOS' )
484+ && ! fields . some ( f => f . name === 'isAlternativeBilling' ) ;
485+
481486 const fieldInfos = fields . map ( ( field ) => {
482487 const { type, nullable, metadata } = getDartType ( field . type ) ;
483488 const fieldName = escapeDartName ( field . name ) ;
484489 return { field, fieldName, type, nullable, metadata } ;
485490 } ) ;
491+
486492 fieldInfos . forEach ( ( { field, nullable, fieldName } ) => {
487493 addDocComment ( lines , field . description , ' ' ) ;
488494 const line = ` ${ nullable ? '' : 'required ' } this.${ fieldName } ,` ;
489495 lines . push ( line ) ;
490496 } ) ;
497+
498+ if ( needsAlternativeBilling ) {
499+ lines . push ( ' this.isAlternativeBilling,' ) ;
500+ }
501+
491502 lines . push ( ' });' , '' ) ;
492503 fieldInfos . forEach ( ( { field, type, nullable, fieldName } ) => {
493504 addDocComment ( lines , field . description , ' ' ) ;
494505 const fieldType = `${ type } ${ nullable ? '?' : '' } ` ;
495506 lines . push ( ` final ${ fieldType } ${ fieldName } ;` ) ;
496507 } ) ;
508+
509+ if ( needsAlternativeBilling ) {
510+ lines . push ( ' final bool? isAlternativeBilling;' ) ;
511+ }
512+
497513 lines . push ( '' ) ;
498514 lines . push ( ` factory ${ objectType . name } .fromJson(Map<String, dynamic> json) {` ) ;
499515 lines . push ( ` return ${ objectType . name } (` ) ;
500516 fieldInfos . forEach ( ( { field, fieldName, metadata } ) => {
501517 const jsonExpression = buildFromJsonExpression ( metadata , `json['${ field . name } ']` ) ;
502518 lines . push ( ` ${ fieldName } : ${ jsonExpression } ,` ) ;
503519 } ) ;
520+ if ( needsAlternativeBilling ) {
521+ lines . push ( ` isAlternativeBilling: json['isAlternativeBilling'] as bool?,` ) ;
522+ }
504523 lines . push ( ' );' ) ;
505524 lines . push ( ' }' , '' ) ;
506525 if ( baseUnion ) {
@@ -513,6 +532,9 @@ const printObject = (objectType) => {
513532 const toJsonExpression = buildToJsonExpression ( metadata , fieldName ) ;
514533 lines . push ( ` '${ field . name } ': ${ toJsonExpression } ,` ) ;
515534 } ) ;
535+ if ( needsAlternativeBilling ) {
536+ lines . push ( ` 'isAlternativeBilling': isAlternativeBilling,` ) ;
537+ }
516538 lines . push ( ' };' ) ;
517539 lines . push ( ' }' ) ;
518540 lines . push ( '}' , '' ) ;
@@ -525,6 +547,7 @@ const printInput = (inputType) => {
525547 lines . push ( ' RequestPurchaseProps({' ) ;
526548 lines . push ( ' required this.request,' ) ;
527549 lines . push ( ' ProductQueryType? type,' ) ;
550+ lines . push ( ' this.useAlternativeBilling,' ) ;
528551 lines . push ( ' }) : type = type ?? (request is RequestPurchasePropsRequestPurchase' ) ;
529552 lines . push ( ' ? ProductQueryType.InApp' ) ;
530553 lines . push ( ' : ProductQueryType.Subs) {' ) ;
@@ -538,18 +561,20 @@ const printInput = (inputType) => {
538561 lines . push ( '' ) ;
539562 lines . push ( ' final RequestPurchasePropsRequest request;' ) ;
540563 lines . push ( ' final ProductQueryType type;' ) ;
564+ lines . push ( ' final bool? useAlternativeBilling;' ) ;
541565 lines . push ( '' ) ;
542566 lines . push ( ' factory RequestPurchaseProps.fromJson(Map<String, dynamic> json) {' ) ;
543567 lines . push ( " final typeValue = json['type'] as String?;" ) ;
544568 lines . push ( ' final parsedType = typeValue != null ? ProductQueryType.fromJson(typeValue) : null;' ) ;
569+ lines . push ( " final useAlternativeBilling = json['useAlternativeBilling'] as bool?;" ) ;
545570 lines . push ( " final purchaseJson = json['requestPurchase'] as Map<String, dynamic>?;" ) ;
546571 lines . push ( ' if (purchaseJson != null) {' ) ;
547572 lines . push ( ' final request = RequestPurchasePropsRequestPurchase(RequestPurchasePropsByPlatforms.fromJson(purchaseJson));' ) ;
548573 lines . push ( ' final finalType = parsedType ?? ProductQueryType.InApp;' ) ;
549574 lines . push ( ' if (finalType != ProductQueryType.InApp) {' ) ;
550575 lines . push ( " throw ArgumentError('type must be IN_APP when requestPurchase is provided');" ) ;
551576 lines . push ( ' }' ) ;
552- lines . push ( ' return RequestPurchaseProps(request: request, type: finalType);' ) ;
577+ lines . push ( ' return RequestPurchaseProps(request: request, type: finalType, useAlternativeBilling: useAlternativeBilling );' ) ;
553578 lines . push ( ' }' ) ;
554579 lines . push ( " final subscriptionJson = json['requestSubscription'] as Map<String, dynamic>?;" ) ;
555580 lines . push ( ' if (subscriptionJson != null) {' ) ;
@@ -558,7 +583,7 @@ const printInput = (inputType) => {
558583 lines . push ( ' if (finalType != ProductQueryType.Subs) {' ) ;
559584 lines . push ( " throw ArgumentError('type must be SUBS when requestSubscription is provided');" ) ;
560585 lines . push ( ' }' ) ;
561- lines . push ( ' return RequestPurchaseProps(request: request, type: finalType);' ) ;
586+ lines . push ( ' return RequestPurchaseProps(request: request, type: finalType, useAlternativeBilling: useAlternativeBilling );' ) ;
562587 lines . push ( ' }' ) ;
563588 lines . push ( " throw ArgumentError('RequestPurchaseProps requires requestPurchase or requestSubscription');" ) ;
564589 lines . push ( ' }' ) ;
@@ -568,23 +593,25 @@ const printInput = (inputType) => {
568593 lines . push ( ' return {' ) ;
569594 lines . push ( " 'requestPurchase': (request as RequestPurchasePropsRequestPurchase).value.toJson()," ) ;
570595 lines . push ( " 'type': type.toJson()," ) ;
596+ lines . push ( " 'useAlternativeBilling': useAlternativeBilling," ) ;
571597 lines . push ( ' };' ) ;
572598 lines . push ( ' }' ) ;
573599 lines . push ( ' if (request is RequestPurchasePropsRequestSubscription) {' ) ;
574600 lines . push ( ' return {' ) ;
575601 lines . push ( " 'requestSubscription': (request as RequestPurchasePropsRequestSubscription).value.toJson()," ) ;
576602 lines . push ( " 'type': type.toJson()," ) ;
603+ lines . push ( " 'useAlternativeBilling': useAlternativeBilling," ) ;
577604 lines . push ( ' };' ) ;
578605 lines . push ( ' }' ) ;
579606 lines . push ( " throw StateError('Unsupported RequestPurchaseProps request variant');" ) ;
580607 lines . push ( ' }' ) ;
581608 lines . push ( '' ) ;
582- lines . push ( ' static RequestPurchaseProps inApp({required RequestPurchasePropsByPlatforms request}) {' ) ;
583- lines . push ( ' return RequestPurchaseProps(request: RequestPurchasePropsRequestPurchase(request), type: ProductQueryType.InApp);' ) ;
609+ lines . push ( ' static RequestPurchaseProps inApp({required RequestPurchasePropsByPlatforms request, bool? useAlternativeBilling }) {' ) ;
610+ lines . push ( ' return RequestPurchaseProps(request: RequestPurchasePropsRequestPurchase(request), type: ProductQueryType.InApp, useAlternativeBilling: useAlternativeBilling );' ) ;
584611 lines . push ( ' }' ) ;
585612 lines . push ( '' ) ;
586- lines . push ( ' static RequestPurchaseProps subs({required RequestSubscriptionPropsByPlatforms request}) {' ) ;
587- lines . push ( ' return RequestPurchaseProps(request: RequestPurchasePropsRequestSubscription(request), type: ProductQueryType.Subs);' ) ;
613+ lines . push ( ' static RequestPurchaseProps subs({required RequestSubscriptionPropsByPlatforms request, bool? useAlternativeBilling }) {' ) ;
614+ lines . push ( ' return RequestPurchaseProps(request: RequestPurchasePropsRequestSubscription(request), type: ProductQueryType.Subs, useAlternativeBilling: useAlternativeBilling );' ) ;
588615 lines . push ( ' }' ) ;
589616 lines . push ( '}' ) ;
590617 lines . push ( '' ) ;
0 commit comments