Skip to content

refactor(api)!: remove legacy compatibility - #256

Merged
hyochan merged 30 commits into
mainfrom
refactor/openiap-major-api-removal
Jul 30, 2026
Merged

refactor(api)!: remove legacy compatibility#256
hyochan merged 30 commits into
mainfrom
refactor/openiap-major-api-removal

Conversation

@hyochan

@hyochan hyochan commented Jul 27, 2026

Copy link
Copy Markdown
Member

Summary

  • remove the scheduled deprecated OpenIAP schema, native-package, and framework compatibility surface
  • regenerate every language projection and align Apple, Google Play/Horizon/Amazon, React Native, Expo, Flutter, Godot, KMP, and MAUI with the canonical API
  • replace legacy documentation with explicit migration guidance and permanent outbound-stream guardrails

Breaking changes

This PR removes APIs and wire fallbacks that were retained through the 2.x/15.x/4.x/9.x/1.x compatibility trains. Consumers must migrate before adopting the coordinated major releases.

Package Expected major
OpenIAP Spec 3.0.0
openiap-apple 3.0.0
openiap-google 3.0.0
react-native-iap 16.0.0
expo-iap 5.0.0
flutter_inapp_purchase 10.0.0
godot-iap 3.0.0
kmp-iap 3.0.0
maui-iap 2.0.0

Package metadata is intentionally not bumped in this feature PR; stable release workflows own those version changes after merge.

Webhook boundary

  • Apple and Google store-to-IAPKit inbound webhooks remain supported.
  • IAPKit-to-SDK/mobile outbound webhook streaming remains removed and prohibited.
  • Apps should refresh from purchase-verification results, cold start/explicit entitlement queries, or a developer-owned backend push channel.

Migration

The updated deprecation page maps every removed API to its canonical replacement. Release notes group the common contract changes and package-specific migration requirements under the existing unreleased major train.

Verification

  • GQL schema/generator suite: 19 files, 161 tests
  • canonical generation and synchronized language projections
  • Apple Swift 6.4 build and 128 tests with Xcode 27 beta 4
  • Google Play, Horizon, and Amazon compiles/tests
  • React Native 407 library tests, typecheck, lint, native AppTransaction bridge coverage, and Nitro generation
  • Expo library/plugin/example tests, typecheck, lint, and build
  • Flutter analyze and 282 tests
  • KMP full build/test and all Android store-flavor compiles
  • MAUI shared/platform builds, Xcode 27 iOS and Mac Catalyst sidecar/binding builds, xUnit, and contract tests
  • Godot Android/iOS/macOS artifacts and GDScript/native tests, including Xcode 27 provenance checks for tracked iOS frameworks
  • docs production build and active-doc audit
  • parity, deprecation-schedule, release-state, and diff audits
  • compiled IAPKit stream routes return 404, including legacy key-in-path variants
  • full post-review connected-device E2E matrix (runs after review completion)

Preview

Open the compressed documentation preview. It shows the rendered July 29 release entry, Package Releases, and the aligned three-column removal tables. No credentials or customer data are included.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@hyochan hyochan added cross-platform Cross-platform (both Android & iOS) expo-iap expo-iap library flutter-iap godot-iap godot-iap library kmp-iap kmp-iap library maui maui library react-native-iap react-native-iap library ፦ refactor ⚡️ breaking ⬡ gql 📖 documentation Improvements or additions to documentation 📱 iOS Related to iOS 🤖 android Related to android 🧞‍♂️ major update labels Jul 27, 2026
@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 403 files, which is 303 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ee693435-8d89-4386-b972-a0babcd668fb

📥 Commits

Reviewing files that changed from the base of the PR and between 530e113 and 31846fc.

⛔ Files ignored due to path filters (8)
  • .github/pr-previews/pr-256-major-api-removal.mp4 is excluded by !**/*.mp4
  • libraries/expo-iap/example/bun.lock is excluded by !**/*.lock
  • packages/gql/src/generated/Types.cs is excluded by !**/generated/**
  • packages/gql/src/generated/Types.kt is excluded by !**/generated/**
  • packages/gql/src/generated/Types.swift is excluded by !**/generated/**
  • packages/gql/src/generated/types.dart is excluded by !**/generated/**
  • packages/gql/src/generated/types.gd is excluded by !**/generated/**
  • packages/gql/src/generated/types.ts is excluded by !**/generated/**
📒 Files selected for processing (436)
  • .claude/commands/audit-code.md
  • .claude/commands/e2e-tests.md
  • .claude/commands/verify-all.md
  • .claude/skills/rebase-main/SKILL.md
  • .codex/skills/rebase-main/SKILL.md
  • .codex/skills/rebase-main/agents/openai.yaml
  • .github/workflows/ci-expo-iap.yml
  • .github/workflows/ci-flutter-inapp-purchase.yml
  • .github/workflows/ci-godot-iap.yml
  • .github/workflows/ci-maui-iap.yml
  • .github/workflows/ci-react-native-iap.yml
  • .github/workflows/deploy-kit.yml
  • .github/workflows/release-godot.yml
  • .github/workflows/release-maui.yml
  • AGENTS.md
  • knowledge/_claude-context/context.md
  • knowledge/external/storekit2-api.md
  • knowledge/internal/01-naming-conventions.md
  • knowledge/internal/04-platform-packages.md
  • knowledge/internal/07-docs-consistency.md
  • libraries/expo-iap/.claude/commands/review-pr.md
  • libraries/expo-iap/CLAUDE.md
  • libraries/expo-iap/android/src/main/java/expo/modules/iap/ExpoIapHelper.kt
  • libraries/expo-iap/android/src/main/java/expo/modules/iap/ExpoIapLog.kt
  • libraries/expo-iap/android/src/main/java/expo/modules/iap/ExpoIapModule.kt
  • libraries/expo-iap/android/src/test/java/expo/modules/iap/ExpoIapHelperTest.kt
  • libraries/expo-iap/example/__tests__/core-functions.test.tsx
  • libraries/expo-iap/example/__tests__/ios-functions.test.tsx
  • libraries/expo-iap/example/__tests__/ios27-scene-lifecycle.test.ts
  • libraries/expo-iap/example/__tests__/offer-code.test.tsx
  • libraries/expo-iap/example/__tests__/request-purchase-ios-payload.test.tsx
  • libraries/expo-iap/example/__tests__/subscription-flow.test.tsx
  • libraries/expo-iap/example/__tests__/validate-receipt.test.tsx
  • libraries/expo-iap/example/app.config.ts
  • libraries/expo-iap/example/app/all-products.tsx
  • libraries/expo-iap/example/app/alternative-billing.tsx
  • libraries/expo-iap/example/app/available-purchases.tsx
  • libraries/expo-iap/example/app/offer-code.tsx
  • libraries/expo-iap/example/app/purchase-flow.tsx
  • libraries/expo-iap/example/app/subscription-flow.tsx
  • libraries/expo-iap/example/jest.setup.js
  • libraries/expo-iap/example/package.json
  • libraries/expo-iap/example/plugins/withIos27SceneLifecycle.d.ts
  • libraries/expo-iap/example/plugins/withIos27SceneLifecycle.js
  • libraries/expo-iap/example/src/components/PurchaseSummaryRow.tsx
  • libraries/expo-iap/example/src/utils/buildPurchaseRows.ts
  • libraries/expo-iap/ios/ExpoIapHelper.swift
  • libraries/expo-iap/ios/ExpoIapLog.swift
  • libraries/expo-iap/ios/ExpoIapModule.swift
  • libraries/expo-iap/ios/onside/OnsideIapModule.swift
  • libraries/expo-iap/plugin/__tests__/withIAP.test.ts
  • libraries/expo-iap/plugin/src/expoConfig.augmentation.d.ts
  • libraries/expo-iap/plugin/src/withIAP.ts
  • libraries/expo-iap/src/__mocks__/expo-modules-core.js
  • libraries/expo-iap/src/__tests__/canonical-key-presence.test.js
  • libraries/expo-iap/src/__tests__/error.test.ts
  • libraries/expo-iap/src/__tests__/index.kepler.test.ts
  • libraries/expo-iap/src/__tests__/index.test.ts
  • libraries/expo-iap/src/__tests__/native-log-redaction.test.js
  • libraries/expo-iap/src/__tests__/standardized-offer-types.test.ts
  • libraries/expo-iap/src/__tests__/vega-adapter.test.ts
  • libraries/expo-iap/src/index.kepler.ts
  • libraries/expo-iap/src/index.ts
  • libraries/expo-iap/src/modules/__tests__/android.test.ts
  • libraries/expo-iap/src/modules/__tests__/ios.test.ts
  • libraries/expo-iap/src/modules/android.ts
  • libraries/expo-iap/src/modules/ios.ts
  • libraries/expo-iap/src/types.ts
  • libraries/expo-iap/src/useIAP.ts
  • libraries/expo-iap/src/utils/deprecation.ts
  • libraries/expo-iap/src/utils/errorMapping.ts
  • libraries/expo-iap/src/vega-adapter.ts
  • libraries/flutter_inapp_purchase/.claude/commands/commit.md
  • libraries/flutter_inapp_purchase/.claude/commands/review-pr.md
  • libraries/flutter_inapp_purchase/CLAUDE.md
  • libraries/flutter_inapp_purchase/android/src/main/kotlin/io/github/hyochan/flutter_inapp_purchase/AndroidInappPurchasePlugin.kt
  • libraries/flutter_inapp_purchase/example/ios/.gitignore
  • libraries/flutter_inapp_purchase/example/ios/Podfile
  • libraries/flutter_inapp_purchase/example/ios/Runner.xcodeproj/project.pbxproj
  • libraries/flutter_inapp_purchase/example/ios/Runner/Info.plist
  • libraries/flutter_inapp_purchase/example/lib/src/app.dart
  • libraries/flutter_inapp_purchase/example/lib/src/screens/all_products_screen.dart
  • libraries/flutter_inapp_purchase/example/lib/src/screens/alternative_billing_screen.dart
  • libraries/flutter_inapp_purchase/example/lib/src/screens/available_purchases_screen.dart
  • libraries/flutter_inapp_purchase/example/lib/src/screens/builder_demo_screen.dart
  • libraries/flutter_inapp_purchase/example/lib/src/screens/debug_purchases_screen.dart
  • libraries/flutter_inapp_purchase/example/lib/src/screens/error_handling_example.dart
  • libraries/flutter_inapp_purchase/example/lib/src/screens/home_screen.dart
  • libraries/flutter_inapp_purchase/example/lib/src/screens/offer_code_screen.dart
  • libraries/flutter_inapp_purchase/example/lib/src/screens/purchase_flow_screen.dart
  • libraries/flutter_inapp_purchase/example/lib/src/screens/subscription_flow_screen.dart
  • libraries/flutter_inapp_purchase/example/lib/src/widgets/product_detail_modal.dart
  • libraries/flutter_inapp_purchase/example/lib/src/widgets/purchase_detail_view.dart
  • libraries/flutter_inapp_purchase/example/lib/test_storekit.dart
  • libraries/flutter_inapp_purchase/example/macos/Podfile
  • libraries/flutter_inapp_purchase/example/pubspec.yaml
  • libraries/flutter_inapp_purchase/example/test/available_purchases_screen_test.dart
  • libraries/flutter_inapp_purchase/example/test/purchase_flow_screen_test.dart
  • libraries/flutter_inapp_purchase/example/test/subscription_flow_screen_test.dart
  • libraries/flutter_inapp_purchase/example/test/widget_test.dart
  • libraries/flutter_inapp_purchase/ios/flutter_inapp_purchase/Package.swift
  • libraries/flutter_inapp_purchase/ios/flutter_inapp_purchase/Sources/flutter_inapp_purchase/FlutterIapHelper.swift
  • libraries/flutter_inapp_purchase/ios/flutter_inapp_purchase/Sources/flutter_inapp_purchase/FlutterIapLog.swift
  • libraries/flutter_inapp_purchase/ios/flutter_inapp_purchase/Sources/flutter_inapp_purchase/FlutterInappPurchasePlugin.swift
  • libraries/flutter_inapp_purchase/lib/builders.dart
  • libraries/flutter_inapp_purchase/lib/deprecation.dart
  • libraries/flutter_inapp_purchase/lib/enums.dart
  • libraries/flutter_inapp_purchase/lib/errors.dart
  • libraries/flutter_inapp_purchase/lib/extensions/purchase_helpers.dart
  • libraries/flutter_inapp_purchase/lib/flutter_inapp_purchase.dart
  • libraries/flutter_inapp_purchase/lib/helpers.dart
  • libraries/flutter_inapp_purchase/lib/types.dart
  • libraries/flutter_inapp_purchase/macos/flutter_inapp_purchase/Package.swift
  • libraries/flutter_inapp_purchase/macos/flutter_inapp_purchase/Sources/flutter_inapp_purchase/FlutterIapHelper.swift
  • libraries/flutter_inapp_purchase/macos/flutter_inapp_purchase/Sources/flutter_inapp_purchase/FlutterIapLog.swift
  • libraries/flutter_inapp_purchase/macos/flutter_inapp_purchase/Sources/flutter_inapp_purchase/FlutterInappPurchasePlugin.swift
  • libraries/flutter_inapp_purchase/scripts/verify-apple-swiftpm-consumer-build.sh
  • libraries/flutter_inapp_purchase/test/builders_unit_test.dart
  • libraries/flutter_inapp_purchase/test/deprecation_schedule_test.dart
  • libraries/flutter_inapp_purchase/test/enums_unit_test.dart
  • libraries/flutter_inapp_purchase/test/errors_unit_test.dart
  • libraries/flutter_inapp_purchase/test/flutter_inapp_purchase_channel_test.dart
  • libraries/flutter_inapp_purchase/test/helpers_unit_test.dart
  • libraries/flutter_inapp_purchase/test/ios_methods_test.dart
  • libraries/flutter_inapp_purchase/test/native_legacy_precedence_test.dart
  • libraries/flutter_inapp_purchase/test/native_log_redaction_test.dart
  • libraries/flutter_inapp_purchase/test/native_wire_contract_test.dart
  • libraries/flutter_inapp_purchase/test/openiap_type_alignment_test.dart
  • libraries/flutter_inapp_purchase/test/purchase_helpers_test.dart
  • libraries/flutter_inapp_purchase/test/refactored_types_test.dart
  • libraries/flutter_inapp_purchase/test/standardized_offer_types_test.dart
  • libraries/flutter_inapp_purchase/test/subscription_info_parse_test.dart
  • libraries/flutter_inapp_purchase/test/types_additions_test.dart
  • libraries/flutter_inapp_purchase/test/types_platform_test.dart
  • libraries/godot-iap/.gitignore
  • libraries/godot-iap/CLAUDE.md
  • libraries/godot-iap/Example/iap_manager.gd
  • libraries/godot-iap/Example/tests/test_api_surface.gd
  • libraries/godot-iap/Example/tests/test_envelope_parsing.gd
  • libraries/godot-iap/Example/tests/test_godot_iap.gd
  • libraries/godot-iap/Example/tests/test_types_only.gd
  • libraries/godot-iap/README.md
  • libraries/godot-iap/addons/godot-iap/android/GodotIap.release.aar
  • libraries/godot-iap/addons/godot-iap/bin/ios/GodotIap.framework/GodotIap
  • libraries/godot-iap/addons/godot-iap/bin/ios/SwiftGodotRuntime.framework/SwiftGodotRuntime
  • libraries/godot-iap/addons/godot-iap/bin/macos/GodotIap.framework/GodotIap
  • libraries/godot-iap/addons/godot-iap/bin/macos/SwiftGodotRuntime.framework/SwiftGodotRuntime
  • libraries/godot-iap/addons/godot-iap/godot_iap.gd
  • libraries/godot-iap/addons/godot-iap/types.gd
  • libraries/godot-iap/android/src/main/java/dev/hyo/godotiap/GodotIap.kt
  • libraries/godot-iap/android/src/main/java/dev/hyo/godotiap/GodotIapHelper.kt
  • libraries/godot-iap/android/src/main/java/dev/hyo/godotiap/GodotIapLog.kt
  • libraries/godot-iap/android/src/test/java/dev/hyo/godotiap/GodotIapHelperTest.kt
  • libraries/godot-iap/android/src/test/java/dev/hyo/godotiap/GodotIapVerificationBridgeTest.kt
  • libraries/godot-iap/ios-gdextension/Sources/GodotIap/GodotIap.swift
  • libraries/godot-iap/ios-gdextension/Sources/GodotIap/GodotIapHelper.swift
  • libraries/godot-iap/ios-gdextension/Sources/GodotIap/GodotIapLog.swift
  • libraries/godot-iap/ios-gdextension/Tests/GodotIapTests/GodotIapHelperTests.swift
  • libraries/godot-iap/scripts/verify-ios-toolchain.sh
  • libraries/kmp-iap/CLAUDE.md
  • libraries/kmp-iap/README.md
  • libraries/kmp-iap/example/composeApp/src/commonMain/kotlin/dev/hyo/martie/screens/AlternativeBillingScreen.kt
  • libraries/kmp-iap/example/composeApp/src/commonMain/kotlin/dev/hyo/martie/screens/OfferCodeScreen.kt
  • libraries/kmp-iap/example/composeApp/src/commonMain/kotlin/dev/hyo/martie/screens/PurchaseFlowScreen.kt
  • libraries/kmp-iap/example/composeApp/src/commonMain/kotlin/dev/hyo/martie/screens/SubscriptionFlowScreen.kt
  • libraries/kmp-iap/library/src/androidMain/kotlin/io/github/hyochan/kmpiap/AmazonInAppPurchaseAndroid.kt
  • libraries/kmp-iap/library/src/androidMain/kotlin/io/github/hyochan/kmpiap/Helper.kt
  • libraries/kmp-iap/library/src/androidMain/kotlin/io/github/hyochan/kmpiap/InAppPurchaseAndroid.kt
  • libraries/kmp-iap/library/src/androidUnitTest/kotlin/io/github/hyochan/kmpiap/BillingQueryLifecycleTest.kt
  • libraries/kmp-iap/library/src/androidUnitTest/kotlin/io/github/hyochan/kmpiap/PendingPurchaseOwnershipRaceTest.kt
  • libraries/kmp-iap/library/src/androidUnitTest/kotlin/io/github/hyochan/kmpiap/ProductStatusAndroidTest.kt
  • libraries/kmp-iap/library/src/androidUnitTest/kotlin/io/github/hyochan/kmpiap/PurchaseFallbackMatchingTest.kt
  • libraries/kmp-iap/library/src/androidUnitTest/kotlin/io/github/hyochan/kmpiap/SubscriptionReplacementResolutionTest.kt
  • libraries/kmp-iap/library/src/commonMain/kotlin/io/github/hyochan/kmpiap/DslExtensions.kt
  • libraries/kmp-iap/library/src/commonMain/kotlin/io/github/hyochan/kmpiap/KmpIap.kt
  • libraries/kmp-iap/library/src/commonMain/kotlin/io/github/hyochan/kmpiap/dsl/PurchaseDsl.kt
  • libraries/kmp-iap/library/src/commonMain/kotlin/io/github/hyochan/kmpiap/openiap/Types.kt
  • libraries/kmp-iap/library/src/commonMain/kotlin/io/github/hyochan/kmpiap/utils/ErrorMapping.kt
  • libraries/kmp-iap/library/src/commonTest/kotlin/io/github/hyochan/kmpiap/ErrorMappingTest.kt
  • libraries/kmp-iap/library/src/commonTest/kotlin/io/github/hyochan/kmpiap/InAppPurchaseTest.kt
  • libraries/kmp-iap/library/src/commonTest/kotlin/io/github/hyochan/kmpiap/PurchaseDslTest.kt
  • libraries/kmp-iap/library/src/commonTest/kotlin/io/github/hyochan/kmpiap/VerificationTest.kt
  • libraries/kmp-iap/library/src/iosMain/kotlin/io/github/hyochan/kmpiap/InAppPurchaseIOS.kt
  • libraries/kmp-iap/library/src/iosMain/kotlin/io/github/hyochan/kmpiap/ProductPayloadNormalizerIOS.kt
  • libraries/kmp-iap/library/src/iosTest/kotlin/io/github/hyochan/kmpiap/ProductPayloadNormalizerTestIOS.kt
  • libraries/maui-iap/.vscode/launch.json
  • libraries/maui-iap/.vscode/run_android.sh
  • libraries/maui-iap/.vscode/run_ios_device.sh
  • libraries/maui-iap/.vscode/run_ios_simulator.sh
  • libraries/maui-iap/CLAUDE.md
  • libraries/maui-iap/CONVENTION.md
  • libraries/maui-iap/README.md
  • libraries/maui-iap/android/openiap/src/main/java/dev/hyo/openiap/maui/OpenIapMauiModule.kt
  • libraries/maui-iap/example/OpenIap.Maui.Example/Components/PurchaseSummaryRow.xaml.cs
  • libraries/maui-iap/example/OpenIap.Maui.Example/OpenIap.Maui.Example.csproj
  • libraries/maui-iap/example/OpenIap.Maui.Example/Pages/AllProductsPage.xaml.cs
  • libraries/maui-iap/example/OpenIap.Maui.Example/Pages/AlternativeBillingPage.xaml.cs
  • libraries/maui-iap/example/OpenIap.Maui.Example/Pages/AvailablePurchasesPage.xaml.cs
  • libraries/maui-iap/example/OpenIap.Maui.Example/Pages/OfferCodePage.xaml.cs
  • libraries/maui-iap/example/OpenIap.Maui.Example/Pages/SubscriptionFlowPage.xaml.cs
  • libraries/maui-iap/example/OpenIap.Maui.Example/Utils/BuildPurchaseRows.cs
  • libraries/maui-iap/example/README.md
  • libraries/maui-iap/src/OpenIap.Maui.Bindings.Android/OpenIap.Maui.Bindings.Android.csproj
  • libraries/maui-iap/src/OpenIap.Maui.Bindings.iOS/ApiDefinition.cs
  • libraries/maui-iap/src/OpenIap.Maui.Bindings.iOS/OpenIap.Maui.Bindings.iOS.csproj
  • libraries/maui-iap/src/OpenIap.Maui/OpenIap.Maui.csproj
  • libraries/maui-iap/src/OpenIap.Maui/OpenIap.cs
  • libraries/maui-iap/src/OpenIap.Maui/Platforms/Android/OpenIapAndroid.Resolvers.cs
  • libraries/maui-iap/src/OpenIap.Maui/Platforms/iOS/OpenIapIOS.cs
  • libraries/maui-iap/src/OpenIap.Maui/Types.cs
  • libraries/maui-iap/tests/OpenIap.Maui.ContractTests/OpenIap.Maui.ContractTests.csproj
  • libraries/maui-iap/tests/OpenIap.Maui.Tests/KitApiClientTests.cs
  • libraries/maui-iap/tests/OpenIap.Maui.Tests/OpenIap.Maui.Tests.csproj
  • libraries/maui-iap/tests/OpenIap.Maui.Tests/OpenIapClientFacadeTests.cs
  • libraries/maui-iap/tests/OpenIap.Maui.Tests/RecordJsonTests.cs
  • libraries/react-native-iap/.claude/commands/review-pr.md
  • libraries/react-native-iap/CLAUDE.md
  • libraries/react-native-iap/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt
  • libraries/react-native-iap/android/src/main/java/com/margelo/nitro/iap/ProductSerialization.kt
  • libraries/react-native-iap/android/src/main/java/com/margelo/nitro/iap/RnIapLog.kt
  • libraries/react-native-iap/android/src/test/java/com/margelo/nitro/iap/ProductSerializationTest.kt
  • libraries/react-native-iap/example/Gemfile
  • libraries/react-native-iap/example/__tests__/RnIap.test.tsx
  • libraries/react-native-iap/example/__tests__/screens/PurchaseFlow.test.tsx
  • libraries/react-native-iap/example/__tests__/screens/SubscriptionFlow.test.tsx
  • libraries/react-native-iap/example/ios/example.xcodeproj/project.pbxproj
  • libraries/react-native-iap/example/ios/example/AppDelegate.swift
  • libraries/react-native-iap/example/ios/example/Info.plist
  • libraries/react-native-iap/example/ios/example/SceneDelegate.swift
  • libraries/react-native-iap/example/jest.setup.js
  • libraries/react-native-iap/example/screens/AllProducts.tsx
  • libraries/react-native-iap/example/screens/AlternativeBilling.tsx
  • libraries/react-native-iap/example/screens/AvailablePurchases.tsx
  • libraries/react-native-iap/example/screens/OfferCode.tsx
  • libraries/react-native-iap/example/screens/PurchaseFlow.tsx
  • libraries/react-native-iap/example/screens/SubscriptionFlow.tsx
  • libraries/react-native-iap/example/src/components/AndroidOneTimeOfferDetails.tsx
  • libraries/react-native-iap/example/src/components/PurchaseSummaryRow.tsx
  • libraries/react-native-iap/example/src/utils/buildPurchaseRows.ts
  • libraries/react-native-iap/ios/HybridRnIap.swift
  • libraries/react-native-iap/ios/RnIapHelper.swift
  • libraries/react-native-iap/ios/RnIapLog.swift
  • libraries/react-native-iap/src/__tests__/hooks/useIAP.android.test.ts
  • libraries/react-native-iap/src/__tests__/hooks/useIAP.test.ts
  • libraries/react-native-iap/src/__tests__/index.kepler.test.ts
  • libraries/react-native-iap/src/__tests__/index.test.ts
  • libraries/react-native-iap/src/__tests__/native-app-transaction.test.js
  • libraries/react-native-iap/src/__tests__/native-legacy-contract.test.js
  • libraries/react-native-iap/src/__tests__/native-log-redaction.test.js
  • libraries/react-native-iap/src/__tests__/native-request-envelope.test.js
  • libraries/react-native-iap/src/__tests__/standardized-offer-types.test.ts
  • libraries/react-native-iap/src/__tests__/utils/app-transaction.test.ts
  • libraries/react-native-iap/src/__tests__/utils/errorMapping.test.ts
  • libraries/react-native-iap/src/__tests__/utils/type-bridge.test.ts
  • libraries/react-native-iap/src/__tests__/vega-adapter.test.ts
  • libraries/react-native-iap/src/hooks/useIAP.ts
  • libraries/react-native-iap/src/index.kepler.ts
  • libraries/react-native-iap/src/index.ts
  • libraries/react-native-iap/src/specs/RnIap.nitro.ts
  • libraries/react-native-iap/src/types.ts
  • libraries/react-native-iap/src/utils.ts
  • libraries/react-native-iap/src/utils/deprecation.ts
  • libraries/react-native-iap/src/utils/errorMapping.ts
  • libraries/react-native-iap/src/utils/platform-request.ts
  • libraries/react-native-iap/src/utils/type-bridge.ts
  • libraries/react-native-iap/src/vega-adapter.ts
  • packages/apple/Example/OpenIapExample/Screens/OfferCodeScreen.swift
  • packages/apple/Example/OpenIapExample/Screens/SubscriptionFlowScreen.swift
  • packages/apple/Sources/Helpers/StoreKitTypesBridge.swift
  • packages/apple/Sources/Models/OpenIapError.swift
  • packages/apple/Sources/Models/OpenIapSerialization.swift
  • packages/apple/Sources/Models/ReceiptValidationCompat.swift
  • packages/apple/Sources/Models/TypeAliases.swift
  • packages/apple/Sources/Models/Types.swift
  • packages/apple/Sources/OpenIapLog.swift
  • packages/apple/Sources/OpenIapModule+ObjC.swift
  • packages/apple/Sources/OpenIapModule.swift
  • packages/apple/Sources/OpenIapProtocol.swift
  • packages/apple/Sources/OpenIapStore.swift
  • packages/apple/Sources/OpenIapVersion.swift
  • packages/apple/Tests/OpenIapTests.swift
  • packages/apple/Tests/OpenIapTests/OpenIapProviderTests.swift
  • packages/apple/Tests/OpenIapTests/RenewalInfoTests.swift
  • packages/apple/Tests/OpenIapTests/VerifyPurchaseTests.swift
  • packages/apple/Tests/OpenIapTests/VerifyPurchaseWithProviderTests.swift
  • packages/docs/public/announcements/openiap-3.webp
  • packages/docs/public/llms-full.txt
  • packages/docs/public/llms.txt
  • packages/docs/src/components/CodeBlock.tsx
  • packages/docs/src/lib/searchData.ts
  • packages/docs/src/pages/docs/apis/android/check-alternative-billing-availability-android.tsx
  • packages/docs/src/pages/docs/apis/android/create-alternative-billing-token-android.tsx
  • packages/docs/src/pages/docs/apis/android/enable-billing-program-android.tsx
  • packages/docs/src/pages/docs/apis/android/show-alternative-billing-dialog-android.tsx
  • packages/docs/src/pages/docs/apis/fetch-products.tsx
  • packages/docs/src/pages/docs/apis/finish-transaction.tsx
  • packages/docs/src/pages/docs/apis/get-active-subscriptions.tsx
  • packages/docs/src/pages/docs/apis/index.tsx
  • packages/docs/src/pages/docs/apis/init-connection.tsx
  • packages/docs/src/pages/docs/apis/ios/get-storefront-ios.tsx
  • packages/docs/src/pages/docs/apis/ios/is-eligible-for-intro-offer-ios.tsx
  • packages/docs/src/pages/docs/apis/ios/present-code-redemption-sheet-ios.tsx
  • packages/docs/src/pages/docs/apis/ios/request-purchase-on-promoted-product-ios.tsx
  • packages/docs/src/pages/docs/apis/ios/validate-receipt-ios.tsx
  • packages/docs/src/pages/docs/apis/request-purchase.tsx
  • packages/docs/src/pages/docs/apis/validate-receipt.tsx
  • packages/docs/src/pages/docs/errors.tsx
  • packages/docs/src/pages/docs/events/android/developer-provided-billing-listener-android.tsx
  • packages/docs/src/pages/docs/events/ios/promoted-product-listener-ios.tsx
  • packages/docs/src/pages/docs/events/purchase-error-listener.tsx
  • packages/docs/src/pages/docs/events/purchase-updated-listener.tsx
  • packages/docs/src/pages/docs/features/debugging.tsx
  • packages/docs/src/pages/docs/features/discount.tsx
  • packages/docs/src/pages/docs/features/external-purchase.tsx
  • packages/docs/src/pages/docs/features/offer-code-redemption.tsx
  • packages/docs/src/pages/docs/features/purchase.tsx
  • packages/docs/src/pages/docs/features/subscription/index.tsx
  • packages/docs/src/pages/docs/features/subscription/upgrade-downgrade.tsx
  • packages/docs/src/pages/docs/getting-started.tsx
  • packages/docs/src/pages/docs/index.tsx
  • packages/docs/src/pages/docs/ios-setup.tsx
  • packages/docs/src/pages/docs/setup/expo.tsx
  • packages/docs/src/pages/docs/setup/flutter.tsx
  • packages/docs/src/pages/docs/setup/godot.tsx
  • packages/docs/src/pages/docs/setup/maui.tsx
  • packages/docs/src/pages/docs/setup/react-native.tsx
  • packages/docs/src/pages/docs/setup/store/amazon.tsx
  • packages/docs/src/pages/docs/setup/store/horizon.tsx
  • packages/docs/src/pages/docs/types/active-subscription.tsx
  • packages/docs/src/pages/docs/types/alternative-billing-types.tsx
  • packages/docs/src/pages/docs/types/android/one-time-purchase-offer-detail-android.tsx
  • packages/docs/src/pages/docs/types/android/subscription-offer-android.tsx
  • packages/docs/src/pages/docs/types/billing-programs.tsx
  • packages/docs/src/pages/docs/types/discount-offer.tsx
  • packages/docs/src/pages/docs/types/external-purchase-link.tsx
  • packages/docs/src/pages/docs/types/index.tsx
  • packages/docs/src/pages/docs/types/ios/app-transaction-ios.tsx
  • packages/docs/src/pages/docs/types/ios/discount-ios.tsx
  • packages/docs/src/pages/docs/types/ios/discount-offer-ios.tsx
  • packages/docs/src/pages/docs/types/ios/renewal-info-ios.tsx
  • packages/docs/src/pages/docs/types/ios/subscription-billing-plan-ios.tsx
  • packages/docs/src/pages/docs/types/product.tsx
  • packages/docs/src/pages/docs/types/purchase.tsx
  • packages/docs/src/pages/docs/types/request-purchase-props.tsx
  • packages/docs/src/pages/docs/types/subscription-offer.tsx
  • packages/docs/src/pages/docs/types/subscription-product.tsx
  • packages/docs/src/pages/docs/updates/announcements.tsx
  • packages/docs/src/pages/docs/updates/deprecations.tsx
  • packages/docs/src/pages/docs/updates/releases.tsx
  • packages/docs/src/pages/introduction.tsx
  • packages/google/ALTERNATIVE_BILLING.md
  • packages/google/CONVENTION.md
  • packages/google/Example/src/main/java/dev/hyo/martie/screens/AllProductsScreen.kt
  • packages/google/Example/src/main/java/dev/hyo/martie/screens/AlternativeBillingScreen.kt
  • packages/google/Example/src/main/java/dev/hyo/martie/screens/AvailablePurchasesScreen.kt
  • packages/google/Example/src/main/java/dev/hyo/martie/screens/PurchaseFlowScreen.kt
  • packages/google/Example/src/main/java/dev/hyo/martie/screens/SubscriptionFlowScreen.kt
  • packages/google/Example/src/main/java/dev/hyo/martie/screens/uis/Modals.kt
  • packages/google/Example/src/main/java/dev/hyo/martie/screens/uis/ProductCard.kt
  • packages/google/openiap/src/amazon/java/dev/hyo/openiap/OpenIapModule.kt
  • packages/google/openiap/src/amazon/java/dev/hyo/openiap/store/OpenIapStoreExtensions.kt
  • packages/google/openiap/src/horizon/java/dev/hyo/openiap/OpenIapModule.kt
  • packages/google/openiap/src/horizon/java/dev/hyo/openiap/store/OpenIapStoreExtensions.kt
  • packages/google/openiap/src/horizon/java/dev/hyo/openiap/utils/BillingConverters.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/AlternativeBillingMode.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/OpenIapError.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/OpenIapLog.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/OpenIapProtocol.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/OpenIapViewModel.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/Types.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/compat/ReceiptValidationCompat.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/helpers/CommonHelpers.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/listener/DeveloperProvidedBillingListener.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/listener/UserChoiceBillingListener.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/store/OpenIapStore.kt
  • packages/google/openiap/src/main/java/dev/hyo/openiap/utils/ProductExtensions.kt
  • packages/google/openiap/src/play/java/dev/hyo/openiap/OpenIapModule.kt
  • packages/google/openiap/src/play/java/dev/hyo/openiap/store/OpenIapStoreExtensions.kt
  • packages/google/openiap/src/play/java/dev/hyo/openiap/utils/BillingConverters.kt
  • packages/google/openiap/src/test/java/dev/hyo/openiap/AlternativeBillingModeAndroidTest.kt
  • packages/google/openiap/src/test/java/dev/hyo/openiap/BillingChoiceAndroidTypesTest.kt
  • packages/google/openiap/src/test/java/dev/hyo/openiap/BillingConvertersTest.kt
  • packages/google/openiap/src/test/java/dev/hyo/openiap/OpenIapErrorTest.kt
  • packages/google/openiap/src/test/java/dev/hyo/openiap/OpenIapLogCompatibilityTest.kt
  • packages/google/openiap/src/test/java/dev/hyo/openiap/StandardizedOfferTypesTest.kt
  • packages/google/openiap/src/test/java/dev/hyo/openiap/store/OpenIapStorePurchaseRequestResolverTest.kt
  • packages/google/openiap/src/testAmazon/java/dev/hyo/openiap/AmazonPendingPurchasesTest.kt
  • packages/google/openiap/src/testAmazon/java/dev/hyo/openiap/SubscriptionBillingIssueAmazonTest.kt
  • packages/google/openiap/src/testHorizon/java/dev/hyo/openiap/HorizonAppIdMetadataTest.kt
  • packages/google/openiap/src/testHorizon/java/dev/hyo/openiap/HorizonPurchaseSafetyTest.kt
  • packages/google/openiap/src/testHorizon/java/dev/hyo/openiap/HorizonStandardizedOfferTest.kt
  • packages/google/openiap/src/testHorizon/java/dev/hyo/openiap/SubscriptionGroupMappingHorizonTest.kt
  • packages/google/openiap/src/testHorizon/java/dev/hyo/openiap/SubscriptionHandlersBillingIssueHorizonTest.kt
  • packages/google/openiap/src/testPlay/java/dev/hyo/openiap/AlternativeOnlyRequestPurchaseTest.kt
  • packages/google/openiap/src/testPlay/java/dev/hyo/openiap/ProductStatusAndroidTest.kt
  • packages/google/openiap/src/testPlay/java/dev/hyo/openiap/SubscriptionGroupMappingPlayTest.kt
  • packages/google/openiap/src/testPlay/java/dev/hyo/openiap/SubscriptionHandlersBillingIssueTest.kt
  • packages/gql/codegen/core/transformer.ts
  • packages/gql/codegen/core/utils.ts
  • packages/gql/codegen/plugins/csharp.ts
  • packages/gql/codegen/plugins/dart.ts
  • packages/gql/codegen/plugins/gdscript.ts
  • packages/gql/codegen/plugins/kotlin.ts
  • packages/gql/codegen/plugins/swift.ts
  • packages/gql/custom-input-contracts.ts
  • packages/gql/schema-deprecations.mjs
  • packages/gql/scripts/custom-generated-guards.mjs
  • packages/gql/src/api-android.graphql
  • packages/gql/src/api-ios.graphql
  • packages/gql/src/api.graphql
  • packages/gql/src/custom-generated-guards.test.mjs
  • packages/gql/src/deprecation-transformer.test.ts
  • packages/gql/src/error.graphql
  • packages/gql/src/generated-compatibility.test.ts
  • packages/gql/src/schema-contract.test.ts
  • packages/gql/src/schema-deprecations.test.mjs
  • packages/gql/src/type-android.graphql
  • packages/gql/src/type-ios.graphql
  • packages/gql/src/type.graphql
  • packages/kit/Dockerfile
  • packages/kit/README.md
  • packages/kit/public/llms-full.txt
  • packages/kit/public/llms.txt
  • packages/kit/scripts/deploy-prod.sh
  • packages/kit/scripts/smoke-server.sh
  • packages/kit/server/health.test.ts
  • packages/kit/server/health.ts
  • packages/kit/server/server.ts
  • packages/kit/src/pages/docs/sections/operations.tsx
  • scripts/agent/compile-context.ts
  • scripts/agent/tests/compile-context.test.ts
  • scripts/audit-deprecation-schedule.mjs
  • scripts/audit-deprecation-schedule.test.mjs
  • scripts/audit-non-godot-parity.mjs
  • scripts/audit-purchase-payload-parity.mjs
  • scripts/audit-purchase-payload-parity.test.mjs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/openiap-major-api-removal

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@hyochan
hyochan force-pushed the refactor/openiap-major-api-removal branch 2 times, most recently from 52dba9e to 1530a42 Compare July 28, 2026 00:11
@hyodotdev hyodotdev deleted a comment from coderabbitai Bot Jul 29, 2026
@hyochan
hyochan requested a review from Copilot July 29, 2026 07:52

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

hyochan added 8 commits July 30, 2026 18:07
Remove scheduled legacy operations, aliases, compatibility fields, and generator shims from the canonical schema. Regenerate and synchronize every language projection from the new contract.\n\nBREAKING CHANGE: deprecated schema APIs and generated compatibility members are no longer exposed.
Remove deprecated Apple and Android entry points, compatibility listeners, receipt aliases, and legacy offer mappings. Keep the canonical StoreKit and Play, Horizon, and Amazon implementations aligned with the regenerated OpenIAP contract.\n\nBREAKING CHANGE: deprecated native package APIs are no longer available.
Remove deprecated aliases, bridges, fallbacks, helpers, and example usage from React Native, Expo, Flutter, Godot, KMP, and MAUI. Keep native payloads and canonical OpenIAP APIs aligned across every framework, including rebuilt Godot runtime artifacts.\n\nBREAKING CHANGE: deprecated framework APIs and legacy wire fallbacks are no longer available.
Replace removed legacy API pages and examples with canonical OpenIAP guidance. Document the coordinated future major versions, migration paths, and the permanent prohibition on outbound IAPKit-to-SDK webhook streams while preserving inbound store webhooks.\n\nBREAKING CHANGE: documentation now targets only the post-compatibility major API surface.
Update repository guidance, generated agent context, and parity audits so removed compatibility APIs cannot return unnoticed. Keep inbound store webhooks documented while rejecting any outbound IAPKit-to-SDK stream.
@hyochan
hyochan force-pushed the refactor/openiap-major-api-removal branch from 563c725 to 90d3cdb Compare July 30, 2026 13:58
@hyochan
hyochan merged commit 1216281 into main Jul 30, 2026
29 checks passed
@hyochan
hyochan deleted the refactor/openiap-major-api-removal branch July 30, 2026 16:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🤖 android Related to android ⚡️ breaking cross-platform Cross-platform (both Android & iOS) 📖 documentation Improvements or additions to documentation expo-iap expo-iap library flutter-iap godot-iap godot-iap library ⬡ gql 📱 iOS Related to iOS kmp-iap kmp-iap library 🧞‍♂️ major update maui maui library react-native-iap react-native-iap library ፦ refactor

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants