Thanks to visit codestin.com
Credit goes to github.com

Skip to content

fix(kit): clarify ios subscription identity#214

Merged
hyochan merged 1 commit into
mainfrom
fix/kit-ios-subscription-identity
Jul 8, 2026
Merged

fix(kit): clarify ios subscription identity#214
hyochan merged 1 commit into
mainfrom
fix/kit-ios-subscription-identity

Conversation

@hyochan

@hyochan hyochan commented Jul 8, 2026

Copy link
Copy Markdown
Member

Summary

  • add explicit originalTransactionId on iOS subscription rows while keeping purchaseToken backward-compatible
  • document that subscription state endpoints return stable store identity, not raw StoreKit JWS
  • cover iOS and Android subscription row shaping with tests

Refs #213

Test plan

  • bun audit:docs
  • bun run --filter @hyodotdev/openiap-kit lint
  • bun run --filter @hyodotdev/openiap-kit format:check
  • bun run --filter @hyodotdev/openiap-kit test
  • bun run --filter @hyodotdev/openiap-kit smoke:server

Preview

No separate recording attached: this is a narrow API response/docs clarification. smoke:server built the docs app and browser-probed the mounted page successfully.

Expose originalTransactionId on iOS subscription rows while keeping purchaseToken as the backwards-compatible stable identity. Document that subscription list responses do not return raw StoreKit JWS values.
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@hyochan, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 24 seconds

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ae360f5b-18ce-4e54-9eef-9a5082f08b5d

📥 Commits

Reviewing files that changed from the base of the PR and between f233e76 and aa6abf9.

📒 Files selected for processing (3)
  • packages/kit/convex/subscriptions/query.test.ts
  • packages/kit/convex/subscriptions/query.ts
  • packages/kit/src/pages/docs/sections/api.tsx
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/kit-ios-subscription-identity

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.

@hyochan hyochan added kit IAPKit (receipt-validation SaaS) 📖 documentation Improvements or additions to documentation 📱 iOS Related to iOS 🛠 bugfix All kinds of bug fixes labels Jul 8, 2026

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request introduces changes to expose the originalTransactionId field for iOS subscription rows. Specifically, it updates the subscriptionShape schema and the shapeSubscriptionRow function in packages/kit/convex/subscriptions/query.ts to map the purchaseToken to originalTransactionId when the platform is iOS. It also adds corresponding unit tests in query.test.ts and updates the API documentation in api.tsx to describe subscription identity fields. There are no review comments, so I have no feedback to provide.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

@hyochan hyochan merged commit f628a9b into main Jul 8, 2026
11 checks passed
@hyochan hyochan deleted the fix/kit-ios-subscription-identity branch July 8, 2026 14:37
@hyodotdev hyodotdev deleted a comment from coderabbitai Bot Jul 8, 2026
hyochan added a commit that referenced this pull request Jul 10, 2026
## Summary
- Publish OpenIAP Spec **2.1.0** in this PR and target **openiap-google
2.3.0** for the CI-promoted stable package.
- Upgrade the Google implementation to Play Billing **9.1.0** with
`BILLING_CHOICE`, developer-rendered choice metadata/dialog/reporting,
`originalExternalTransactionId`, and `showInAppMessagesAndroid`.
- Wire the complete Android surface through React Native/Nitro, Expo,
Flutter, Godot, KMP, and MAUI, including hooks, listeners, generated
types, examples, and store-specific unsupported behavior.
- Consolidate the upcoming stable release notes by platform package,
IAPKit, and framework library; update Android/API docs and durable
parity/release workflow rules.
- Clarify IAPKit purchases as verification snapshots and update examples
to verify, finish, then reverify the same token.

## Versioning
- OpenIAP Spec: **2.1.0** (directly bumped here)
- openiap-google stable target: **2.3.0** (source remains `2.3.0-rc.1`
until CI promotion)
- openiap-apple stable target: **2.2.5** (source remains `2.2.5-rc.1`
until CI promotion)
- Framework stable targets in release notes: react-native-iap 15.4.0,
expo-iap 4.4.0, flutter_inapp_purchase 9.4.0, godot-iap 2.4.0, kmp-iap
2.4.0, OpenIap.Maui 1.2.1

## Related
- Closes #221
- Addresses the verification lifecycle concern in #209
- Includes #214 in the consolidated stable release notes
- Applies the package/framework changelog grouping requested in #206

## Verification
- GQL generation and platform sync, including `yarn specs` for Nitro
- `bun audit:parity`, `bun audit:docs`, and staged diff checks, repeated
after a five-minute no-change interval
- Google Play/Horizon/Amazon compile and unit-test matrix
- Apple `swift build` and 104 Swift tests
- React Native 345 tests plus Android example build across Kotlin/C++
ABIs
- Expo 303 library tests plus 76 config-plugin tests
- Flutter analyze plus 281 tests
- KMP Play/Amazon/Horizon compiles and tests
- Godot Android/iOS artifact and example checks
- MAUI shared and Play/Amazon/Horizon builds
- IAPKit lint, 572 tests, production build, compiled-server smoke probes
- Docs typecheck, formatting, audit, and production build

## Connected-device E2E
- **Google Play / Pixel:** exercised Billing Choice availability and
`showInAppMessagesAndroid`; the test account returned
program-unavailable and `no-action-needed`, both handled correctly.
- **Fire OS:** reran app launch/catalog fetch and purchase-state reads;
the earlier branch matrix covered React Native, Expo, Flutter, and MAUI
purchase/fulfill/cancel paths.
- **Vega:** reran React Native and Expo launches; the earlier Expo flow
completed approved purchase and fulfillment.
- **Apple:** physical iPhone on iOS 26.5.2 passes build/install/launch.
Purchase UI automation is still blocked because Maestro hangs after
detecting the physical device.
- **Meta Horizon:** package/framework Horizon builds pass, but connected
purchase E2E is blocked because the Quest remains `adb unauthorized`;
the headset must accept the USB debugging prompt.

## Preview
The visible changes are API/reference documentation and native SDK
examples. Documentation production build and connected example-app
launch checks cover those surfaces.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🛠 bugfix All kinds of bug fixes 📖 documentation Improvements or additions to documentation 📱 iOS Related to iOS kit IAPKit (receipt-validation SaaS)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant