Skip to content

refactor(gql): enforce generated contract SSOT - #250

Merged
hyochan merged 9 commits into
mainfrom
docs/clarify-discount-offer
Jul 24, 2026
Merged

hyochan merged 9 commits into
mainfrom
docs/clarify-discount-offer

Conversation

@hyochan

@hyochan hyochan commented Jul 23, 2026 •

Copy link
Copy Markdown
Member

Summary

  • add the corrected OpenIAP Spec 2.4.2 release note (the semantic floor of openiap-apple 2.4.2 and openiap-google 2.5.0) for this backward-compatible docs and generated-contract patch
  • centralize GraphQL schema inventory, deprecation metadata, generator language support, and generated platform paths in canonical SSOT modules
  • remove redundant Handlebars templates, legacy standalone generators, post-processors, and broken package-local workflows
  • make CI and pre-commit fail closed on generated-source, synchronized-platform, and compiled-context drift
  • preserve the [Docs] Typo in DiscountOffer type. #249 one-time discount-offer correction while deriving docs audits, search contracts, and generated comments from canonical sources

Root cause

Generation policy had accumulated in parallel file lists, scripts, templates, post-processors, workflows, docs audits, and platform refreshers. Those copies could disagree while an individual pipeline still appeared green. Git hooks also leaked OpenIAP's Git-local environment into Flutter's own repository lookup, allowing Flutter to misidentify its SDK version.

SSOT and redundancy cleanup

  • one manifest owns generated source files, synchronized targets, producer filenames, and canonical generator inputs
  • one parsed schema inventory owns files, markers, custom input contracts, and deprecation reasons
  • the plugin registry derives supported languages and output names instead of maintaining parallel lists
  • agent context inputs and outputs derive from a shared path contract
  • standalone RN, Expo, Flutter, Godot, KMP, Google, and Apple refresh flows delegate to the canonical generator or manifest-backed materializer
  • redundant templates, abandoned external generators, duplicate updater wrappers, and inert package workflows are removed
  • CI runs parity and generated drift checks unconditionally, including tracked and untracked output
  • the Flutter hook isolates Git-local variables in a subshell; an executable fake-shell harness verifies both inner unset and outer sentinel preservation

Verification

  • GQL: 21 Vitest files / 166 tests; focused manifest/hook harness 12/12
  • docs: typecheck, production build, Prettier, 38 audit regression tests, and audit:docs
  • agent context: TypeScript check, 60 tests, and deterministic compile
  • platform sync: deterministic regenerate/sync plus standalone updater tests 3/3
  • platform coverage: Apple build/tests, Google unit and store-flavor compiles, RN/Expo tests, Flutter analyze/tests, KMP flavor compiles, MAUI builds/tests, and Godot CI-equivalent checks
  • audit:parity, audit:release-state, frozen install, YAML/shell syntax, and git diff --check
  • complete pre-commit gate passed without bypassing hooks
  • independent SSOT, redundancy, CI, and final-diff audits: actionable findings 0

Preview

The actual updated docs introduction was rendered locally and visually verified:

Generated contract SSOT preview

Closes #249

Summary by CodeRabbit

  • Documentation
    • Refreshed DiscountOffer and SubscriptionOffer type docs across platforms to match standardized semantics, updated reference links, and clarified Android formatted-discount wording and platform population behavior.
    • Updated Discounts and Types pages and examples to use the standardized Android one-time discountOffers flow, including offer selection and purchase request fields.
  • API / Schema (Docs)
    • Updated GraphQL offer documentation and compatibility nullability guidance for standardized offer arrays.
  • Tests
    • Strengthened docs-auditing and parsing to reduce false drift.
  • Chores
    • Improved generated doc quality by deduplicating repeated @deprecated tags and expanded CI/pre-commit audit steps.

Align DiscountOffer documentation and generated API comments with the Google Play one-time offer contract. Refresh examples and search entries, and add regression audits for offer semantics and Kotlin purchase calls.

Closes #249
@hyochan hyochan added 📖 documentation Improvements or additions to documentation 🛠 bugfix All kinds of bug fixes 🤖 android Related to android labels Jul 23, 2026
@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 commented Jul 23, 2026 •

Copy link
Copy Markdown
Member Author

Preview

Actual local docs render captured for commit 5fe806a:

Generated contract SSOT preview

Verified from the locally rendered documentation page; the committed JPEG is 71 KB (under the 10 MB fallback limit). The release card has since been consolidated under the correct OpenIAP Spec 2.4.2 floor (min(openiap-apple 2.4.2, openiap-google 2.5.0)). The corrected card and generated contracts passed docs typecheck, production build, formatting, documentation consistency, parity, release-state, and independent SSOT review in commit 0439a22.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR standardizes discount and subscription offer documentation across SDKs, GraphQL, and docs. It migrates discount examples to DiscountOffer, updates canonical enum and search semantics, refreshes deprecation links, and adds documentation audits.

Changes

Canonical offer documentation

Layer / File(s) Summary
Canonical offer contracts and reference pages
packages/docs/src/pages/docs/types/*, packages/docs/src/lib/searchData.ts, packages/gql/src/*
Documentation distinguishes Android one-time DiscountOffer entries from subscription offers, uses lowercase wire values, updates nullable compatibility guidance, and points search entries to canonical paths.
Discount feature examples
packages/docs/src/pages/docs/features/discount.tsx
Fetching, display, validity, quantity, and purchase examples now use discountOffers and offerTokenAndroid.
Documentation audit enforcement
scripts/audit-docs.ts, scripts/audit-docs.test.ts, packages/gql/scripts/*, packages/gql/src/generated-*
Audits validate canonical offer semantics, enum values, search mappings, generated deprecation comments, and Kotlin/KMP purchase-call shapes.
Generated SDK documentation synchronization
libraries/*/types.*, packages/apple/**, packages/google/**
Generated SDK comments update standardized offer descriptions, deprecation guidance, and openiap.dev/docs/types/... references.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

  • hyodotdev/openiap#51 — Introduced the Android one-time discount offer shape used by the migrated documentation.
  • hyodotdev/openiap#63 — Related standardized offer documentation, deprecation, and schema changes.
  • hyodotdev/openiap#69 — Related standardized offer-token support used by the migrated purchase examples.

Suggested labels: ❄️ types

Suggested reviewers: copilot

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 12.50% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The docs and schema now present DiscountOffer as an Android one-time product offer and direct subscription discounts to SubscriptionOffer, matching #249.
Out of Scope Changes check ✅ Passed The added audits, tests, search metadata, and CI/pre-commit updates support the docs clarification work and are not unrelated scope.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately reflects the PR’s main goal of enforcing a single source of truth for generated contracts.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/clarify-discount-offer

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
libraries/expo-iap/src/types.ts (1)

1109-1110: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate @deprecated JSDoc tags emitted by the shared TS codegen. Both libraries/expo-iap/src/types.ts and libraries/react-native-iap/src/types.ts are generated from the same GraphQL schema/TS codegen template, which emits two overlapping @deprecated tags per deprecated field (a new detailed reason plus the old short one), unlike the Kotlin/Swift/Dart/C# outputs which only emit one.

  • libraries/expo-iap/src/types.ts#L1109-L1110: dedupe the @deprecated tags for oneTimePurchaseOfferDetailsAndroid (and the same pattern recurring at lines 1124-1125, 1214-1215, 1265-1266, 1281-1282, 1344-1345) at the codegen/schema level, then regenerate.
  • libraries/react-native-iap/src/types.ts#L1109-L1110: same dedupe, recurring at the identical relative offsets (1124-1125, 1214-1215, 1265-1266, 1281-1282, 1344-1345); fix once upstream and regenerate both packages.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@libraries/expo-iap/src/types.ts` around lines 1109 - 1110, Update the shared
GraphQL/TypeScript codegen template or schema handling to emit only one
`@deprecated` JSDoc tag per deprecated field, preserving the detailed deprecation
reason, then regenerate all affected types. Apply the generated result across
the recurring fields in libraries/expo-iap/src/types.ts at lines 1109-1110,
1124-1125, 1214-1215, 1265-1266, 1281-1282, and 1344-1345, and the corresponding
ranges in libraries/react-native-iap/src/types.ts; both files require
regeneration, with no duplicate tags remaining.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@libraries/godot-iap/addons/godot-iap/types.gd`:
- Line 1059: Update the `@see` reference in the DiscountOffer documentation to use
the canonical https://openiap.dev/docs/types/discount-offer URL, matching the
other bindings and ProductAndroidOneTimePurchaseOfferDetail documentation.

In `@scripts/audit-docs.ts`:
- Around line 205-237: Update findSearchEntriesByTitle to locate the enclosing
object using brace matching from the matched title position, rather than the
indentation-dependent '\n  {' and '\n  },' markers. Use the resulting object
boundaries to extract path and preserve the existing line-number and
null-fallback behavior across spaces, tabs, and other formatting.

---

Nitpick comments:
In `@libraries/expo-iap/src/types.ts`:
- Around line 1109-1110: Update the shared GraphQL/TypeScript codegen template
or schema handling to emit only one `@deprecated` JSDoc tag per deprecated field,
preserving the detailed deprecation reason, then regenerate all affected types.
Apply the generated result across the recurring fields in
libraries/expo-iap/src/types.ts at lines 1109-1110, 1124-1125, 1214-1215,
1265-1266, 1281-1282, and 1344-1345, and the corresponding ranges in
libraries/react-native-iap/src/types.ts; both files require regeneration, with
no duplicate tags remaining.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 1f3ee1d1-0ff9-4129-b716-2dce938216f0

📥 Commits

Reviewing files that changed from the base of the PR and between 1e0d85f and 6600291.

⛔ Files ignored due to path filters (6)
  • 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 (22)
  • libraries/expo-iap/src/types.ts
  • libraries/flutter_inapp_purchase/lib/types.dart
  • libraries/godot-iap/addons/godot-iap/types.gd
  • libraries/kmp-iap/library/src/commonMain/kotlin/io/github/hyochan/kmpiap/openiap/Types.kt
  • libraries/maui-iap/src/OpenIap.Maui/Types.cs
  • libraries/react-native-iap/src/types.ts
  • packages/apple/Sources/Models/Types.swift
  • packages/docs/src/lib/searchData.ts
  • packages/docs/src/pages/docs/features/discount.tsx
  • packages/docs/src/pages/docs/types/android/one-time-purchase-offer-detail-android.tsx
  • packages/docs/src/pages/docs/types/discount-offer.tsx
  • packages/docs/src/pages/docs/types/index.tsx
  • packages/docs/src/pages/docs/types/product.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/google/openiap/src/main/java/dev/hyo/openiap/Types.kt
  • packages/gql/src/type-android.graphql
  • packages/gql/src/type-ios.graphql
  • packages/gql/src/type.graphql
  • scripts/audit-docs.test.ts
  • scripts/audit-docs.ts

Comment thread libraries/godot-iap/addons/godot-iap/types.gd Outdated
Comment thread scripts/audit-docs.ts Outdated
@hyochan
hyochan requested a review from Copilot July 23, 2026 16:25

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/audit-docs.ts`:
- Around line 205-221: Fix the loop in findEnclosingBraceBlock so searching
stops after processing a brace at index 0; avoid calling source.lastIndexOf with
a negative search position, while preserving the existing enclosure checks and
fallback search for earlier braces.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d4e166a9-a86e-45e3-9dbc-76431d8a02ba

📥 Commits

Reviewing files that changed from the base of the PR and between 6600291 and e388d6a.

⛔ Files ignored due to path filters (6)
  • 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 (13)
  • libraries/expo-iap/src/types.ts
  • libraries/flutter_inapp_purchase/lib/types.dart
  • libraries/godot-iap/addons/godot-iap/types.gd
  • libraries/kmp-iap/library/src/commonMain/kotlin/io/github/hyochan/kmpiap/openiap/Types.kt
  • libraries/maui-iap/src/OpenIap.Maui/Types.cs
  • libraries/react-native-iap/src/types.ts
  • packages/apple/Sources/Models/Types.swift
  • packages/google/openiap/src/main/java/dev/hyo/openiap/Types.kt
  • packages/gql/scripts/fix-generated-types.mjs
  • packages/gql/src/generated-compatibility.test.ts
  • packages/gql/src/type.graphql
  • scripts/audit-docs.test.ts
  • scripts/audit-docs.ts
🚧 Files skipped from review as they are similar to previous changes (7)
  • scripts/audit-docs.test.ts
  • packages/gql/src/type.graphql
  • packages/google/openiap/src/main/java/dev/hyo/openiap/Types.kt
  • libraries/godot-iap/addons/godot-iap/types.gd
  • libraries/maui-iap/src/OpenIap.Maui/Types.cs
  • libraries/kmp-iap/library/src/commonMain/kotlin/io/github/hyochan/kmpiap/openiap/Types.kt
  • libraries/flutter_inapp_purchase/lib/types.dart

Comment thread scripts/audit-docs.ts Outdated

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.

Pull request overview

This PR clarifies and hardens the documentation and schema semantics around Google Play one-time product offers vs subscription offers, ensuring DiscountOffer is treated as the standardized one-time-offer shape (Android-only), and SubscriptionOffer remains the cross-platform subscription-discount shape.

Changes:

  • Refines GraphQL SSOT descriptions and propagates consistent offer semantics + canonical doc links into all generated SDK types/comments.
  • Updates the docs pages, examples, and search entries to distinguish one-time vs subscription offers, and removes legacy/incorrect mappings (e.g., WinBack or subscription-offer details on DiscountOffer).
  • Adds/extends deterministic docs audits + tests to prevent regressions in canonical offer pages, search routing, enum wire values, and Kotlin/KMP example shapes.

Reviewed changes

Copilot reviewed 26 out of 32 changed files in this pull request and generated no comments.

Show a summary per file
File Description
scripts/audit-docs.ts Adds canonical offer-page + search-entry audits and improves brace parsing to handle strings/comments safely.
scripts/audit-docs.test.ts Adds focused tests for the new canonical offer audits and Kotlin/KMP example validation.
packages/gql/src/type.graphql Clarifies DiscountOffer and SubscriptionOffer schema descriptions and canonical doc links.
packages/gql/src/type-ios.graphql Updates deprecated iOS offer type @see links to canonical SubscriptionOffer docs route.
packages/gql/src/type-android.graphql Clarifies Android one-time vs subscription offer fields and updates deprecation guidance.
packages/gql/src/generated/types.ts Regenerates TypeScript types/comments to reflect clarified SSOT docs and deprecation wording.
packages/gql/src/generated/Types.swift Regenerates Swift types/comments to reflect clarified SSOT docs and canonical links.
packages/gql/src/generated/Types.kt Regenerates Kotlin types/comments to reflect clarified SSOT docs and canonical links.
packages/gql/src/generated/types.gd Regenerates GDScript types/comments to reflect clarified SSOT docs and canonical links.
packages/gql/src/generated/types.dart Regenerates Dart types/comments to reflect clarified SSOT docs and canonical links.
packages/gql/src/generated/Types.cs Regenerates C# types/comments to reflect clarified SSOT docs and canonical links.
packages/gql/src/generated-doc-comments.test.mjs Adds a Vitest unit test for the TypeScript @deprecated-dedupe helper.
packages/gql/src/generated-compatibility.test.ts Adds regression coverage for canonical @see links and single @deprecated tags in TS output.
packages/gql/scripts/generated-doc-comments.mjs Introduces a helper to dedupe duplicate TypeScript @deprecated JSDoc tags per block.
packages/gql/scripts/fix-generated-types.mjs Integrates the new JSDoc dedupe step into the TS generated-types post-processing.
packages/google/openiap/src/main/java/dev/hyo/openiap/Types.kt Syncs Android package Kotlin types/comments with updated SSOT offer semantics + canonical links.
packages/docs/src/pages/docs/types/subscription-product.tsx Removes misleading discountOffers table entry for subscription products and adds compatibility explanation.
packages/docs/src/pages/docs/types/subscription-offer.tsx Aligns displayed enum wire values/snippets and removes incorrect WinBack mention.
packages/docs/src/pages/docs/types/request-purchase-props.tsx Corrects withOffer description to the iOS-specific promotional-offer input type.
packages/docs/src/pages/docs/types/product.tsx Marks legacy one-time-offer details field as deprecated in docs and points to discountOffers + canonical page.
packages/docs/src/pages/docs/types/index.tsx Updates type listing copy to describe DiscountOffer as Android one-time offer details.
packages/docs/src/pages/docs/types/discount-offer.tsx Rewrites canonical DiscountOffer page to be explicitly Google Play one-time offers and enforces wire-value examples.
packages/docs/src/pages/docs/types/android/one-time-purchase-offer-detail-android.tsx Updates deprecated legacy Android page language to point to standardized DiscountOffer.
packages/docs/src/pages/docs/features/discount.tsx Updates the discount guide to use discountOffers (standardized) rather than legacy Android-native fields.
packages/docs/src/lib/searchData.ts Adds canonical DiscountOffer/SubscriptionOffer search entries and renames legacy entries to avoid collisions.
packages/apple/Sources/Models/Types.swift Syncs Apple package Swift types/comments with updated SSOT offer semantics + canonical links.
libraries/react-native-iap/src/types.ts Syncs RN types/comments with updated SSOT offer semantics + canonical links.
libraries/maui-iap/src/OpenIap.Maui/Types.cs Syncs MAUI types/comments with updated SSOT offer semantics + canonical links.
libraries/kmp-iap/library/src/commonMain/kotlin/io/github/hyochan/kmpiap/openiap/Types.kt Syncs KMP types/comments with updated SSOT offer semantics + canonical links.
libraries/godot-iap/addons/godot-iap/types.gd Syncs Godot types/comments with updated SSOT offer semantics + canonical links.
libraries/flutter_inapp_purchase/lib/types.dart Syncs Flutter types/comments with updated SSOT offer semantics + canonical links.
libraries/expo-iap/src/types.ts Syncs Expo types/comments with updated SSOT offer semantics + canonical links.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

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.

Pull request overview

Copilot reviewed 26 out of 32 changed files in this pull request and generated 1 comment.

Comment thread scripts/audit-docs.ts Outdated
Parse documented TypeScript and search metadata structurally, tighten generated enum and Kotlin example guards, and run the audit fixtures in pre-commit and Docs CI.
@hyochan hyochan added cross-platform Cross-platform (both Android & iOS) ⬡ protocol 💨 ci Cloud integration labels Jul 23, 2026
@hyochan
hyochan requested a review from Copilot July 23, 2026 18:23

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.

Pull request overview

Copilot reviewed 28 out of 34 changed files in this pull request and generated 1 comment.

Comment thread scripts/audit-docs.test.ts
Keep the accepted audit fixture aligned with the Kotlin and KMP requestPurchase contract so invalid named arguments cannot be mistaken for current SDK usage.
@hyochan
hyochan requested a review from Copilot July 23, 2026 18:39

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 was unable to review this pull request because the user who requested the review has reached their quota limit.

Derive schema inventories, deprecation metadata, generated sync paths, language support, and agent context inputs from canonical manifests.

Fail closed on generation drift across CI and platform refreshers, remove redundant generator pipelines, and harden offer documentation audits with focused regression coverage.
@hyochan hyochan changed the title docs: clarify one-time discount offers refactor(gql): enforce generated contract SSOT Jul 24, 2026
@hyochan hyochan added expo-iap expo-iap library flutter-iap godot-iap godot-iap library kmp-iap kmp-iap library maui react-native-iap react-native-iap library ፦ refactor ❄️ types Typing issues 📱 iOS Related to iOS 🧪 test Issue or pr related to testing labels Jul 24, 2026
@hyochan
hyochan requested a review from Copilot July 24, 2026 01:31

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 lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

@hyodotdev hyodotdev deleted a comment from coderabbitai Bot Jul 24, 2026
@hyodotdev hyodotdev deleted a comment from coderabbitai Bot Jul 24, 2026
@hyodotdev hyodotdev deleted a comment from coderabbitai Bot Jul 24, 2026
@hyodotdev hyodotdev deleted a comment from coderabbitai Bot Jul 24, 2026
@hyodotdev hyodotdev deleted a comment from coderabbitai Bot Jul 24, 2026
@hyodotdev hyodotdev deleted a comment from coderabbitai Bot Jul 24, 2026
@hyochan
hyochan merged commit 4d84d97 into main Jul 24, 2026
25 checks passed
@hyochan
hyochan deleted the docs/clarify-discount-offer branch July 24, 2026 02:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🤖 android Related to android 🛠 bugfix All kinds of bug fixes 💨 ci Cloud integration 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 📱 iOS Related to iOS kmp-iap kmp-iap library ⬡ protocol react-native-iap react-native-iap library ፦ refactor 🧪 test Issue or pr related to testing ❄️ types Typing issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Docs] Typo in DiscountOffer type.

2 participants