expo-iap 6.1.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { type IapkitConfirmationOptions, type PurchaseConfirmation, type PurchaseFlow, type PurchaseFlowOptions, type PurchaseFlowPurchase } from './purchase-flow';
2
+ import { type SdkPurchaseFlowOptions } from './utils/purchaseFlowBinding';
1
3
  import type { DeveloperProvidedBillingDetailsAndroid, MutationField, Product, ProductQueryType, Purchase, PurchaseUpdatedListenerOptions, QueryField, UserChoiceBillingDetails } from './types';
2
4
  import { type PurchaseError } from './utils/errorMapping';
3
5
  export * from './types';
@@ -406,11 +408,37 @@ export declare const verifyPurchase: MutationField<'verifyPurchase'>;
406
408
  * @see {@link https://openiap.dev/docs/features/validation#verify-purchase-with-provider}
407
409
  */
408
410
  export declare const verifyPurchaseWithProvider: MutationField<'verifyPurchaseWithProvider'>;
411
+ export type { SdkPurchaseFlowOptions } from './utils/purchaseFlowBinding';
412
+ /**
413
+ * Creates the app's purchase flow. It confirms and finishes every purchase the
414
+ * store delivers, and recovers unfinished ones, through this SDK. Create one
415
+ * per signed-in account, dispose it when the account changes, and pass it to
416
+ * `useIAP({purchaseFlow})`.
417
+ * @see {@link https://kit.openiap.dev/docs/purchase-flow}
418
+ */
419
+ export declare function createPurchaseFlow(options: SdkPurchaseFlowOptions): PurchaseFlow<Purchase>;
420
+ export declare function createPurchaseFlow<P extends PurchaseFlowPurchase>(options: PurchaseFlowOptions<P>): PurchaseFlow<P>;
421
+ /**
422
+ * Confirms purchases with IAPKit from the app, for apps without a backend:
423
+ * pass it as `confirmWithBackend` with a publishable key. Credit consumables
424
+ * in `grant`, which runs before the purchase is consumed.
425
+ */
426
+ export declare function confirmWithIapkit(options: IapkitConfirmationOptions<Purchase>): (purchase: Purchase, context: {
427
+ isConsumable: boolean;
428
+ }) => Promise<PurchaseConfirmation>;
429
+ /**
430
+ * Confirms App Store purchases on the device, for apps with neither a backend
431
+ * nor IAPKit: StoreKit must still list the transaction as unfinished and
432
+ * valid. Credit consumables in `grant`.
433
+ */
434
+ export declare function confirmOnDeviceIOS(options?: Pick<IapkitConfirmationOptions<Purchase>, 'grant'>): (purchase: Purchase, context: {
435
+ isConsumable: boolean;
436
+ }) => Promise<PurchaseConfirmation>;
409
437
  export * from './useIAP';
410
438
  export { kitApi, KitApiError, resolveLocalizedPayload } from './kit-api';
411
439
  export type { KitApiOptions, KitClientPayloadCache, KitClientPayloadOptions, KitClientPayloadResponse, KitLocalizedClientPayload, KitLocalizedClientPayloadOptions, KitLocalizedPayloadOptions, KitProduct, KitProductClientPayload, KitProductOffer, KitProductPlatform, KitProductsOptions, KitProductsResponse, KitSubscription, EntitlementsResponse, StatusResponse, } from './kit-api';
412
- export { createPurchaseFlow, describePurchaseFlowStatus, toPurchaseConfirmationRequest, } from './purchase-flow';
413
- export type { PurchaseConfirmation, PurchaseConfirmationRequest, PurchaseFlow, PurchaseFlowGuidance, PurchaseFlowGuidanceKey, PurchaseFlowOptions, PurchaseFlowOutcome, PurchaseFlowPurchase, PurchaseFlowStatus, RecoverPurchasesOptions, } from './purchase-flow';
440
+ export { describePurchaseFlowStatus, toPurchaseConfirmationRequest, } from './purchase-flow';
441
+ export type { IapkitConfirmationOptions, PurchaseConfirmation, PurchaseConfirmationRequest, PurchaseFlow, PurchaseFlowGuidance, PurchaseFlowGuidanceKey, PurchaseFlowOptions, PurchaseFlowOutcome, PurchaseFlowPurchase, PurchaseFlowStatus, RecoverPurchasesOptions, } from './purchase-flow';
414
442
  export { ErrorCodeUtils, ErrorCodeMapping, createPurchaseError, createPurchaseErrorFromPlatform, getUserFriendlyErrorMessage, isUserCancelledError, } from './utils/errorMapping';
415
443
  export type { PurchaseError as ExpoPurchaseError, PurchaseErrorProps, } from './utils/errorMapping';
416
444
  export { ExpoIapConsole } from './utils/debug';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -3,7 +3,9 @@ import { Platform } from 'react-native';
3
3
  // Internal modules
4
4
  import ExpoIapModule, { getNativeModule } from './ExpoIapModule';
5
5
  import { isVegaOS } from './vega';
6
- import { isProductIOS, deepLinkToSubscriptionsIOS } from './modules/ios';
6
+ import { deepLinkToSubscriptionsIOS, getPendingTransactionsIOS, isProductIOS, } from './modules/ios';
7
+ import { createDeviceConfirmationIOS, createIapkitConfirmation, } from './purchase-flow';
8
+ import { clearRequested, createSdkPurchaseFlow, markRequested, } from './utils/purchaseFlowBinding';
7
9
  import { isProductAndroid, deepLinkToSubscriptionsAndroid, } from './modules/android';
8
10
  import { ExpoIapConsole } from './utils/debug';
9
11
  import { showFirstPurchaseNotice } from './utils/firstPurchaseNotice';
@@ -680,6 +682,17 @@ export const verifyAppOwnership = async (options) => {
680
682
  * @see {@link https://openiap.dev/docs/apis/request-purchase}
681
683
  */
682
684
  export const requestPurchase = async (args) => {
685
+ const { request } = args;
686
+ markRequested([request.apple?.sku, ...(request.google?.skus ?? [])]);
687
+ try {
688
+ return await requestPurchaseFromStore(args);
689
+ }
690
+ catch (error) {
691
+ clearRequested();
692
+ throw error;
693
+ }
694
+ };
695
+ const requestPurchaseFromStore = async (args) => {
683
696
  const { request, type } = args;
684
697
  const { canonical, native } = normalizeProductType(type);
685
698
  if (canonical === 'all') {
@@ -979,24 +992,25 @@ export const verifyPurchaseWithProvider = async (options) => {
979
992
  if (resolvedOptions.provider === 'iapkit' &&
980
993
  resolvedOptions.iapkit &&
981
994
  !resolvedOptions.iapkit.apiKey) {
995
+ let configApiKey;
982
996
  try {
983
997
  // Dynamically import expo-constants to avoid hard dependency
984
998
  const { default: Constants } = await import('expo-constants');
985
- const configApiKey = Constants.expoConfig?.extra?.iapkitApiKey;
986
- if (typeof configApiKey === 'string' && configApiKey.length > 0) {
987
- resolvedOptions = {
988
- ...resolvedOptions,
989
- iapkit: {
990
- ...resolvedOptions.iapkit,
991
- apiKey: configApiKey,
992
- },
993
- };
994
- }
999
+ configApiKey = Constants.expoConfig?.extra?.iapkitApiKey;
995
1000
  }
996
- catch {
997
- throw new Error('expo-constants is required for auto-filling iapkitApiKey from config. ' +
998
- 'Please install it: npx expo install expo-constants\n' +
999
- 'Or provide apiKey directly in verifyPurchaseWithProvider options.');
1001
+ catch (error) {
1002
+ throw new Error('Could not read iapkitApiKey from expo-constants. Install it with ' +
1003
+ '`npx expo install expo-constants`, or pass apiKey in ' +
1004
+ 'verifyPurchaseWithProvider options.', { cause: error });
1005
+ }
1006
+ if (typeof configApiKey === 'string' && configApiKey.length > 0) {
1007
+ resolvedOptions = {
1008
+ ...resolvedOptions,
1009
+ iapkit: {
1010
+ ...resolvedOptions.iapkit,
1011
+ apiKey: configApiKey,
1012
+ },
1013
+ };
1000
1014
  }
1001
1015
  }
1002
1016
  const result = await invokeNativeWithPurchaseError(() => ExpoIapModule.verifyPurchaseWithProvider(resolvedOptions), nativePlatform());
@@ -1014,9 +1028,35 @@ export const verifyPurchaseWithProvider = async (options) => {
1014
1028
  },
1015
1029
  };
1016
1030
  };
1031
+ const purchaseFlowSdk = {
1032
+ finishTransaction: (args) => finishTransaction(args),
1033
+ getAvailablePurchases: () => getAvailablePurchases(),
1034
+ getPendingTransactionsIOS: Platform.OS === 'ios' ? () => getPendingTransactionsIOS() : undefined,
1035
+ purchaseUpdatedListener: (listener) => purchaseUpdatedListener(listener, { dedupeTransactionIOS: false }),
1036
+ purchaseErrorListener: (listener) => purchaseErrorListener(listener),
1037
+ };
1038
+ export function createPurchaseFlow(options) {
1039
+ return createSdkPurchaseFlow(purchaseFlowSdk, options);
1040
+ }
1041
+ /**
1042
+ * Confirms purchases with IAPKit from the app, for apps without a backend:
1043
+ * pass it as `confirmWithBackend` with a publishable key. Credit consumables
1044
+ * in `grant`, which runs before the purchase is consumed.
1045
+ */
1046
+ export function confirmWithIapkit(options) {
1047
+ return createIapkitConfirmation(verifyPurchaseWithProvider, options);
1048
+ }
1049
+ /**
1050
+ * Confirms App Store purchases on the device, for apps with neither a backend
1051
+ * nor IAPKit: StoreKit must still list the transaction as unfinished and
1052
+ * valid. Credit consumables in `grant`.
1053
+ */
1054
+ export function confirmOnDeviceIOS(options = {}) {
1055
+ return createDeviceConfirmationIOS(() => getPendingTransactionsIOS(), options);
1056
+ }
1017
1057
  export * from './useIAP';
1018
1058
  export { kitApi, KitApiError, resolveLocalizedPayload } from './kit-api';
1019
- export { createPurchaseFlow, describePurchaseFlowStatus, toPurchaseConfirmationRequest, } from './purchase-flow';
1059
+ export { describePurchaseFlowStatus, toPurchaseConfirmationRequest, } from './purchase-flow';
1020
1060
  export { ErrorCodeUtils, ErrorCodeMapping, createPurchaseError, createPurchaseErrorFromPlatform, getUserFriendlyErrorMessage, isUserCancelledError, } from './utils/errorMapping';
1021
1061
  export { ExpoIapConsole } from './utils/debug';
1022
1062
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// External dependencies\nimport {Platform} from 'react-native';\n\n// Internal modules\nimport ExpoIapModule, {getNativeModule} from './ExpoIapModule';\nimport {isVegaOS} from './vega';\nimport {isProductIOS, deepLinkToSubscriptionsIOS} from './modules/ios';\nimport {\n isProductAndroid,\n deepLinkToSubscriptionsAndroid,\n} from './modules/android';\nimport {ExpoIapConsole} from './utils/debug';\nimport {showFirstPurchaseNotice} from './utils/firstPurchaseNotice';\nimport {restorePurchasesNative} from './utils/restorePurchases';\nimport {\n decodeAndroidPurchases,\n decodeApplePurchases,\n} from './utils/availablePurchases';\n\n// Types\nimport type {\n ActiveSubscription,\n DeepLinkOptions,\n DeveloperProvidedBillingDetailsAndroid,\n IapPlatform,\n MutationField,\n MutationRequestPurchaseArgs,\n Product,\n ProductQueryType,\n ProductSubscription,\n Purchase,\n PurchaseOptions,\n PurchaseUpdatedListenerOptions,\n QueryField,\n RequestPurchasePropsByPlatforms,\n RequestPurchaseAndroidProps,\n RequestPurchaseIosProps,\n RequestSubscriptionPropsByPlatforms,\n RequestSubscriptionAndroidProps,\n RequestSubscriptionIosProps,\n UserChoiceBillingDetails,\n} from './types';\nimport {ErrorCode, resolveStoreId} from './types';\nimport {\n createPurchaseError,\n normalizeErrorCodeFromNative,\n type PurchaseError,\n} from './utils/errorMapping';\nimport {\n createPurchaseErrorFromNativeException,\n invokeNativeWithPurchaseError,\n} from './utils/nativeError';\n\nexport * from './types';\nexport * from './modules/android';\nexport * from './modules/ios';\nexport * from './onside';\nexport * from './vega';\n\nexport enum OpenIapEvent {\n PurchaseUpdated = 'purchase-updated',\n PurchaseError = 'purchase-error',\n PromotedProductIOS = 'promoted-product-ios',\n UserChoiceBillingAndroid = 'user-choice-billing-android',\n /**\n * Fired for External Payments (8.3.0+) and Billing Choice (9.1.0+)\n * developer billing flows. Nullable fields depend on the selected flow.\n */\n DeveloperProvidedBillingAndroid = 'developer-provided-billing-android',\n /** Fired when a subscription enters a billing-issue state; see `subscriptionBillingIssueListener`. */\n SubscriptionBillingIssue = 'subscription-billing-issue',\n}\n\ntype ExpoIapEventPayloads = {\n [OpenIapEvent.PurchaseUpdated]: Purchase;\n [OpenIapEvent.PurchaseError]: PurchaseError;\n [OpenIapEvent.PromotedProductIOS]:\n | Product\n | string\n | {id?: string; productId?: string};\n [OpenIapEvent.UserChoiceBillingAndroid]: UserChoiceBillingDetails;\n [OpenIapEvent.DeveloperProvidedBillingAndroid]: DeveloperProvidedBillingDetailsAndroid;\n [OpenIapEvent.SubscriptionBillingIssue]: Purchase;\n};\n\ntype ExpoIapEventListener<E extends OpenIapEvent> = (\n payload: ExpoIapEventPayloads[E],\n) => void;\n\ntype ExpoIapEmitter = {\n addListener<E extends OpenIapEvent>(\n eventName: E,\n listener: ExpoIapEventListener<E>,\n ): {remove: () => void};\n removeListener<E extends OpenIapEvent>(\n eventName: E,\n listener: ExpoIapEventListener<E>,\n ): void;\n};\n\nconst isStorePlatform = (): boolean =>\n Platform.OS === 'ios' || Platform.OS === 'android';\n\nconst isStoreRuntime = (): boolean =>\n Platform.OS === 'ios' || isAndroidStoreRuntime();\n\nconst unsupportedPlatformError = (): Error =>\n new Error(`Unsupported platform: ${Platform.OS}`);\n\n// Platform tag for PurchaseErrors built from native rejections.\nconst nativePlatform = (): IapPlatform =>\n Platform.OS === 'ios' ? 'ios' : 'android';\n\n// Listener calls go to the raw native module (see getNativeModule), resolved\n// lazily so importing this module doesn't throw on unsupported platforms.\nexport const emitter: ExpoIapEmitter = {\n addListener(eventName, listener) {\n const nativeModule = getNativeModule();\n const nativeSubscription = nativeModule.addListener(eventName, listener);\n let removed = false;\n\n return {\n remove: () => {\n if (removed) {\n return;\n }\n removed = true;\n\n if (typeof nativeSubscription?.remove === 'function') {\n nativeSubscription.remove();\n return;\n }\n\n nativeModule.removeListener?.(eventName, listener);\n },\n };\n },\n removeListener(eventName, listener) {\n return getNativeModule().removeListener?.(eventName, listener);\n },\n};\n\nlet nonDedupingPurchaseUpdatedListenerCountIOS = 0;\nconst purchaseUpdatedDedupeHistoryLimitIOS = 512;\nconst purchaseUpdatedDedupeHistoryIOS = {\n ids: new Set<string>(),\n order: [] as string[],\n start: 0,\n};\nlet purchaseUpdatedDedupeGenerationIOS = 0;\n\ntype PurchaseUpdatedDedupeHistoryIOS = {\n ids: Set<string>;\n order: string[];\n start: number;\n};\n\nconst purchaseUpdatedTransactionIdIOS = (purchase: Purchase) => {\n if (typeof purchase.id === 'string' && purchase.id.length > 0) {\n return purchase.id;\n }\n return null;\n};\n\nconst rememberPurchaseUpdatedTransactionIOS = (\n transactionId: string,\n history: PurchaseUpdatedDedupeHistoryIOS,\n) => {\n if (history.ids.has(transactionId)) {\n return;\n }\n\n history.ids.add(transactionId);\n history.order.push(transactionId);\n if (\n history.order.length - history.start >\n purchaseUpdatedDedupeHistoryLimitIOS\n ) {\n const evicted = history.order[history.start];\n history.start += 1;\n if (evicted != null) {\n history.ids.delete(evicted);\n }\n if (history.start > 128 && history.start * 2 > history.order.length) {\n history.order = history.order.slice(history.start);\n history.start = 0;\n }\n }\n};\n\nconst clearPurchaseUpdatedDedupeHistoryIOS = (\n history: PurchaseUpdatedDedupeHistoryIOS,\n) => {\n history.ids.clear();\n history.order.length = 0;\n history.start = 0;\n};\n\nconst resetPurchaseUpdatedDedupeHistoryIOS = () => {\n clearPurchaseUpdatedDedupeHistoryIOS(purchaseUpdatedDedupeHistoryIOS);\n purchaseUpdatedDedupeGenerationIOS += 1;\n};\n\nconst configurePurchaseUpdatedListenerOptionsIOS = (\n dedupeTransactionIOS: boolean,\n) => {\n if (Platform.OS !== 'ios') return;\n\n const promise = getNativeModule().setPurchaseUpdatedListenerOptions?.({\n dedupeTransactionIOS,\n });\n void promise?.catch((error: unknown) => {\n ExpoIapConsole.warn(\n 'Failed to configure purchase updated listener options:',\n error,\n );\n });\n};\n\nexport type ProductTypeInput = ProductQueryType;\n\nconst normalizeProductType = (type?: ProductTypeInput) => {\n if (!type || type === 'in-app') {\n return {\n canonical: 'in-app' as ProductQueryType,\n native: 'in-app' as const,\n };\n }\n if (type === 'subs') {\n return {\n canonical: 'subs' as ProductQueryType,\n native: 'subs' as const,\n };\n }\n if (type === 'all') {\n return {\n canonical: 'all' as ProductQueryType,\n native: 'all' as const,\n };\n }\n throw new Error(`Unsupported product type: ${type}`);\n};\n\nconst isAndroidStoreRuntime = (): boolean => {\n return Platform.OS === 'android' || isVegaOS();\n};\n\nexport const purchaseUpdatedListener = (\n listener: (event: Purchase) => void,\n options?: PurchaseUpdatedListenerOptions | null,\n) => {\n const receiveDuplicateTransactionUpdatesIOS =\n Platform.OS === 'ios' && options?.dedupeTransactionIOS === false;\n const listenerDedupeHistoryIOS: PurchaseUpdatedDedupeHistoryIOS = {\n ids: new Set(purchaseUpdatedDedupeHistoryIOS.ids),\n order: purchaseUpdatedDedupeHistoryIOS.order.slice(\n purchaseUpdatedDedupeHistoryIOS.start,\n ),\n start: 0,\n };\n let listenerDedupeGenerationIOS = purchaseUpdatedDedupeGenerationIOS;\n\n const wrappedListener = (event: Purchase) => {\n const normalized = event;\n if (Platform.OS === 'ios') {\n if (listenerDedupeGenerationIOS !== purchaseUpdatedDedupeGenerationIOS) {\n clearPurchaseUpdatedDedupeHistoryIOS(listenerDedupeHistoryIOS);\n listenerDedupeGenerationIOS = purchaseUpdatedDedupeGenerationIOS;\n }\n const transactionId = purchaseUpdatedTransactionIdIOS(normalized);\n if (transactionId != null) {\n const isDuplicateForListener =\n listenerDedupeHistoryIOS.ids.has(transactionId);\n rememberPurchaseUpdatedTransactionIOS(\n transactionId,\n listenerDedupeHistoryIOS,\n );\n rememberPurchaseUpdatedTransactionIOS(\n transactionId,\n purchaseUpdatedDedupeHistoryIOS,\n );\n if (!receiveDuplicateTransactionUpdatesIOS && isDuplicateForListener) {\n return;\n }\n }\n }\n listener(normalized);\n };\n const emitterSubscription = emitter.addListener(\n OpenIapEvent.PurchaseUpdated,\n wrappedListener,\n );\n\n if (!receiveDuplicateTransactionUpdatesIOS) {\n return emitterSubscription;\n }\n\n nonDedupingPurchaseUpdatedListenerCountIOS += 1;\n configurePurchaseUpdatedListenerOptionsIOS(false);\n let removed = false;\n\n return {\n remove: () => {\n if (removed) {\n return;\n }\n removed = true;\n try {\n emitterSubscription?.remove?.();\n } finally {\n nonDedupingPurchaseUpdatedListenerCountIOS = Math.max(\n 0,\n nonDedupingPurchaseUpdatedListenerCountIOS - 1,\n );\n configurePurchaseUpdatedListenerOptionsIOS(\n nonDedupingPurchaseUpdatedListenerCountIOS === 0,\n );\n }\n },\n };\n};\n\nexport const purchaseErrorListener = (\n listener: (error: PurchaseError) => void,\n) => {\n // Native events may carry codes outside ErrorCode; deliver canonical codes.\n const wrappedListener = (error: PurchaseError) => {\n listener({...error, code: normalizeErrorCodeFromNative(error.code)});\n };\n const emitterSubscription = emitter.addListener(\n OpenIapEvent.PurchaseError,\n wrappedListener,\n );\n return emitterSubscription;\n};\n\n/**\n * iOS-only listener for App Store promoted product events.\n * This fires when a user taps on a promoted product in the App Store.\n *\n * @param listener - Callback function that receives the promoted product details\n * @returns EventSubscription that can be used to unsubscribe\n *\n * @example\n * ```typescript\n * const subscription = promotedProductListenerIOS((product) => {\n * console.log('Promoted product:', product);\n * // Handle the promoted product\n * });\n *\n * // Later, clean up\n * subscription.remove();\n * ```\n *\n * @platform iOS\n */\nexport const promotedProductListenerIOS = (\n listener: (product: Product) => void,\n) => {\n if (Platform.OS !== 'ios') {\n ExpoIapConsole.warn(\n 'promotedProductListenerIOS: This listener is only available on iOS',\n );\n return {remove: () => {}};\n }\n\n let deliveredProductId: string | undefined;\n const deliver = (product: Product) => {\n const productId =\n product.id ?? (product as Product & {productId?: string}).productId;\n if (productId && productId === deliveredProductId) {\n return;\n }\n deliveredProductId = productId;\n listener(product);\n };\n\n const replayPendingProduct = () => {\n let pendingProduct: Promise<Product | null> | undefined;\n try {\n pendingProduct = ExpoIapModule.getPromotedProductIOS() as\n | Promise<Product | null>\n | undefined;\n } catch {\n return Promise.resolve();\n }\n\n if (!pendingProduct || typeof pendingProduct.then !== 'function') {\n return Promise.resolve();\n }\n\n return pendingProduct\n .then((product: Product | null) => {\n if (product) {\n deliver(product);\n }\n })\n .catch(() => {});\n };\n\n const subscription = emitter.addListener(\n OpenIapEvent.PromotedProductIOS,\n (payload) => {\n if (typeof payload === 'string') {\n void replayPendingProduct();\n return;\n }\n\n deliver(payload as Product);\n },\n );\n\n void replayPendingProduct();\n\n return subscription;\n};\n\n/**\n * Android-only listener for User Choice Billing events.\n * This fires when a user selects alternative billing instead of Google Play billing\n * in the User Choice Billing dialog (only in 'user-choice' mode).\n *\n * @param listener - Callback function that receives the external transaction token and product IDs\n * @returns EventSubscription that can be used to unsubscribe\n *\n * @example\n * ```typescript\n * const subscription = userChoiceBillingListenerAndroid((details) => {\n * console.log('User selected alternative billing');\n * console.log('External transaction token received; send it to your backend without logging it.');\n * console.log('Products:', details.products);\n *\n * // Process payment in your system, then report token to Google\n * await processPaymentAndReportToken(details);\n * });\n *\n * // Later, clean up\n * subscription.remove();\n * ```\n *\n * @platform Android\n */\nexport const userChoiceBillingListenerAndroid = (\n listener: (details: UserChoiceBillingDetails) => void,\n) => {\n if (Platform.OS !== 'android') {\n ExpoIapConsole.warn(\n 'userChoiceBillingListenerAndroid: This listener is only available on Android',\n );\n return {remove: () => {}};\n }\n return emitter.addListener(OpenIapEvent.UserChoiceBillingAndroid, listener);\n};\n\n/**\n * Android-only listener for Developer Provided Billing events.\n * This fires when a user selects the developer's option in an External Payments\n * or Billing Choice purchase flow.\n *\n * @param listener - Callback that receives selected products and flow details\n * @returns EventSubscription that can be used to unsubscribe\n *\n * @example\n * ```typescript\n * const subscription = developerProvidedBillingListenerAndroid(async (details) => {\n * await processPaymentWithYourGateway(details.products, details.linkUri);\n * if (details.externalTransactionToken) {\n * await reportExternalTransactionToGoogle(details.externalTransactionToken);\n * }\n * });\n *\n * // Later, clean up\n * subscription.remove();\n * ```\n *\n * @platform Android (Play Billing Library 8.3.0+; Billing Choice 9.1.0+)\n */\nexport const developerProvidedBillingListenerAndroid = (\n listener: (details: DeveloperProvidedBillingDetailsAndroid) => void,\n) => {\n if (Platform.OS !== 'android') {\n ExpoIapConsole.warn(\n 'developerProvidedBillingListenerAndroid: This listener is only available on Android',\n );\n return {remove: () => {}};\n }\n return emitter.addListener(\n OpenIapEvent.DeveloperProvidedBillingAndroid,\n listener,\n );\n};\n\n/**\n * Listen for subscription billing-issue events (cross-platform).\n *\n * Fires when a user's active subscription enters a state that needs attention\n * for a payment problem. Unifies:\n * - iOS / Mac Catalyst 16.4+ and visionOS 1.0+: StoreKit 2 `Message.Reason.billingIssue`.\n * - Android (Play Billing 8.1+): when `Purchase.isSuspendedAndroid === true`.\n * - Meta Horizon, Amazon, macOS, tvOS, watchOS, and iOS before 16.4: never fires.\n *\n * Recommended UX: call `deepLinkToSubscriptions()` when this fires so the user\n * can update their payment method in the platform subscription center.\n *\n * @example\n * ```typescript\n * const subscription = subscriptionBillingIssueListener((purchase) => {\n * console.warn('Needs attention:', purchase.productId);\n * deepLinkToSubscriptions({\n * skuAndroid: purchase.productId,\n * packageNameAndroid: 'com.example.app',\n * });\n * });\n * ```\n */\nexport const subscriptionBillingIssueListener = (\n listener: (purchase: Purchase) => void,\n) => {\n const wrappedListener = (event: Purchase) => {\n listener(event);\n };\n return emitter.addListener(\n OpenIapEvent.SubscriptionBillingIssue,\n wrappedListener,\n );\n};\n\n/**\n * Initialize the store connection. Must be called before any other IAP API.\n *\n * @param config Optional connection config. Use `enableBillingProgramAndroid` (Android,\n * Play Billing 8.2.0+) to opt into a billing program. For Billing Choice 9.1.0+, set\n * `billingChoiceScreenTypeAndroid` to the renderer configured in Play Console.\n * iOS ignores Android-specific fields.\n * @returns Promise resolving to `true` when the platform billing client is connected.\n * @throws When the platform billing client fails to initialize.\n *\n * @example\n * ```ts\n * await initConnection();\n * await initConnection({ enableBillingProgramAndroid: 'external-offer' });\n * await initConnection({\n * enableBillingProgramAndroid: 'billing-choice',\n * billingChoiceScreenTypeAndroid: 'developer-rendered',\n * });\n * ```\n *\n * @remarks When using `useIAP()`, connection is auto-managed on mount/unmount —\n * pass options to the hook instead of calling this directly.\n *\n * @see {@link https://openiap.dev/docs/apis/init-connection}\n */\nexport const initConnection: MutationField<'initConnection'> = async (\n config,\n) => {\n const result = await invokeNativeWithPurchaseError(\n () => ExpoIapModule.initConnection(config ?? null),\n nativePlatform(),\n );\n if (\n result === true &&\n Platform.OS === 'ios' &&\n nonDedupingPurchaseUpdatedListenerCountIOS > 0\n ) {\n configurePurchaseUpdatedListenerOptionsIOS(false);\n }\n return result;\n};\n\n/**\n * Close the store connection and release resources.\n *\n * @see {@link https://openiap.dev/docs/apis/end-connection}\n */\nexport const endConnection: MutationField<'endConnection'> = async () => {\n const result = await invokeNativeWithPurchaseError(\n () => ExpoIapModule.endConnection(),\n nativePlatform(),\n );\n if (result === true && Platform.OS === 'ios') {\n resetPurchaseUpdatedDedupeHistoryIOS();\n }\n return result;\n};\n\n/**\n * Retrieve products or subscriptions from the store by SKU.\n *\n * @param request `ProductRequest` — `skus` (string[]) and optional `type`\n * (`'in-app' | 'subs' | 'all'`, defaults to `'in-app'`).\n * @returns Promise resolving to a `FetchProductsResult` union — `Product[]` for `'in-app'`,\n * `ProductSubscription[]` for `'subs'`, or a mixed array for `'all'`.\n * @throws When the store rejects the request (empty `skus`, not connected,\n * network/store error). Unknown SKUs are omitted from the result, not thrown.\n *\n * @example\n * ```ts\n * const products = await fetchProducts({\n * skus: ['com.app.coins_100', 'com.app.premium'],\n * type: 'in-app',\n * });\n * ```\n *\n * @remarks Promise-based, unlike the event-based `request*` APIs such as `requestPurchase`.\n *\n * @see {@link https://openiap.dev/docs/apis/fetch-products}\n */\nexport const fetchProducts: QueryField<'fetchProducts'> = async (request) => {\n ExpoIapConsole.debug('fetchProducts called with:', request);\n const {skus, type} = request ?? {};\n\n if (!Array.isArray(skus) || skus.length === 0) {\n throw createPurchaseError({\n message: 'No SKUs provided',\n code: ErrorCode.EmptySkuList,\n });\n }\n\n const {canonical, native} = normalizeProductType(\n type as ProductTypeInput | undefined,\n );\n const skuSet = new Set(skus);\n\n const filterIosItems = (\n items: unknown[],\n ): (Product | ProductSubscription)[] =>\n items.filter((item): item is Product | ProductSubscription => {\n if (!isProductIOS(item)) {\n return false;\n }\n const candidate = item as Product | ProductSubscription;\n return typeof candidate.id === 'string' && skuSet.has(candidate.id);\n });\n\n const filterAndroidItems = (\n items: unknown[],\n ): (Product | ProductSubscription)[] =>\n items.filter((item): item is Product | ProductSubscription => {\n if (!isProductAndroid(item)) {\n return false;\n }\n const candidate = item as Product | ProductSubscription;\n return typeof candidate.id === 'string' && skuSet.has(candidate.id);\n });\n\n const castResult = (\n items: (Product | ProductSubscription)[],\n ):\n | (Product | ProductSubscription)[]\n | Product[]\n | ProductSubscription[]\n | null => {\n if (canonical === 'in-app') {\n return items as Product[];\n }\n if (canonical === 'subs') {\n return items as ProductSubscription[];\n }\n // 'all' mixes products and subscriptions; returned as-is to keep the discriminated union.\n return items;\n };\n\n if (Platform.OS === 'ios') {\n const rawItems = await invokeNativeWithPurchaseError<unknown[]>(\n () => ExpoIapModule.fetchProducts({skus, type: native}),\n 'ios',\n {\n code: ErrorCode.QueryProduct,\n message: 'Failed to query products',\n productIds: skus,\n productType: canonical,\n },\n );\n return castResult(filterIosItems(rawItems));\n }\n\n if (isAndroidStoreRuntime()) {\n const rawItems = await invokeNativeWithPurchaseError<unknown[]>(\n () => ExpoIapModule.fetchProducts(native, skus),\n 'android',\n {\n code: ErrorCode.QueryProduct,\n message: 'Failed to query products',\n productIds: skus,\n productType: canonical,\n },\n );\n return castResult(filterAndroidItems(rawItems));\n }\n\n throw unsupportedPlatformError();\n};\n\n/**\n * List the user's unfinished purchases: non-consumables, active subscriptions,\n * and pending transactions.\n *\n * @param options Optional `PurchaseOptions`. iOS-only flags:\n * `alsoPublishToEventListenerIOS`, `onlyIncludeActiveItemsIOS`.\n * @returns Promise resolving to an array of `Purchase` currently held by the store.\n * @throws When the platform query fails.\n *\n * @example\n * ```ts\n * const purchases = await getAvailablePurchases();\n * for (const p of purchases) {\n * if (await verifyOnServer(p)) await finishTransaction({ purchase: p, isConsumable: false });\n * }\n * ```\n *\n * @see {@link https://openiap.dev/docs/apis/get-available-purchases}\n */\nexport const getAvailablePurchases: QueryField<\n 'getAvailablePurchases'\n> = async (options) => {\n const normalizedOptions = {\n alsoPublishToEventListenerIOS:\n options?.alsoPublishToEventListenerIOS ?? false,\n onlyIncludeActiveItemsIOS: options?.onlyIncludeActiveItemsIOS ?? true,\n includeSuspendedAndroid: options?.includeSuspendedAndroid ?? false,\n } satisfies PurchaseOptions;\n\n if (isVegaOS()) {\n const purchases = await ExpoIapModule.getAvailableItems(normalizedOptions);\n return decodeAndroidPurchases(purchases);\n }\n\n let purchases: Purchase[];\n\n if (Platform.OS === 'ios') {\n purchases = (await invokeNativeWithPurchaseError(\n () =>\n ExpoIapModule.getAvailableItems(\n normalizedOptions.alsoPublishToEventListenerIOS,\n normalizedOptions.onlyIncludeActiveItemsIOS,\n ),\n 'ios',\n )) as Purchase[];\n } else if (Platform.OS === 'android') {\n purchases = (await invokeNativeWithPurchaseError(\n () => ExpoIapModule.getAvailableItems(normalizedOptions),\n 'android',\n )) as Purchase[];\n } else {\n throw unsupportedPlatformError();\n }\n\n return Platform.OS === 'ios'\n ? decodeApplePurchases(purchases)\n : decodeAndroidPurchases(purchases);\n};\n\n/**\n * Get all active subscriptions. On iOS each entry carries `renewalInfoIOS`\n * (e.g. pendingUpgradeProductId, willAutoRenew, autoRenewPreference); on\n * Android they are filtered from the available purchases.\n *\n * @param subscriptionIds - Optional array of subscription product IDs to filter. If not provided, returns all active subscriptions.\n * @returns Promise resolving to array of active subscriptions with details\n *\n * @example\n * ```typescript\n * // Get all active subscriptions\n * const subs = await getActiveSubscriptions();\n *\n * // Get specific subscriptions\n * const premiumSubs = await getActiveSubscriptions(['premium', 'premium_year']);\n *\n * // Check for pending upgrades (iOS)\n * subs.forEach(sub => {\n * if (sub.renewalInfoIOS?.pendingUpgradeProductId) {\n * console.log(`Upgrade pending to: ${sub.renewalInfoIOS.pendingUpgradeProductId}`);\n * }\n * });\n * ```\n *\n * @see {@link https://openiap.dev/docs/apis/get-active-subscriptions}\n */\nexport const getActiveSubscriptions: QueryField<\n 'getActiveSubscriptions'\n> = async (subscriptionIds) => {\n if (!isStoreRuntime()) {\n throw unsupportedPlatformError();\n }\n\n const result = await invokeNativeWithPurchaseError(\n () => ExpoIapModule.getActiveSubscriptions(subscriptionIds ?? null),\n nativePlatform(),\n );\n return (result ?? []) as ActiveSubscription[];\n};\n\n/**\n * Check if user has any active subscriptions.\n *\n * @param subscriptionIds - Optional array of subscription product IDs to check. If not provided, checks all subscriptions.\n * @returns Promise resolving to true if user has at least one active subscription\n *\n * @example\n * ```typescript\n * // Check any active subscription\n * const hasAny = await hasActiveSubscriptions();\n *\n * // Check specific subscriptions\n * const hasPremium = await hasActiveSubscriptions(['premium', 'premium_year']);\n * ```\n *\n * @see {@link https://openiap.dev/docs/apis/has-active-subscriptions}\n */\nexport const hasActiveSubscriptions: QueryField<\n 'hasActiveSubscriptions'\n> = async (subscriptionIds) => {\n if (!isStoreRuntime()) {\n throw unsupportedPlatformError();\n }\n\n return !!(await invokeNativeWithPurchaseError(\n () => ExpoIapModule.hasActiveSubscriptions(subscriptionIds ?? null),\n nativePlatform(),\n ));\n};\n\n/**\n * Return the user's storefront country code.\n *\n * @see {@link https://openiap.dev/docs/apis/get-storefront}\n */\nexport const getStorefront: QueryField<'getStorefront'> = async () => {\n if (Platform.OS !== 'ios' && !isAndroidStoreRuntime()) {\n throw createPurchaseError({\n code: ErrorCode.FeatureNotSupported,\n message: `Storefront lookup is not supported on ${Platform.OS}.`,\n });\n }\n\n const platform = nativePlatform();\n if (typeof ExpoIapModule.getStorefront !== 'function') {\n throw createPurchaseError({\n code: ErrorCode.FeatureNotSupported,\n message: 'Native getStorefront is not available on this build.',\n platform,\n });\n }\n\n let storefront: unknown;\n try {\n storefront = await ExpoIapModule.getStorefront();\n } catch (error) {\n throw createPurchaseErrorFromNativeException(error, platform, {\n code: ErrorCode.ServiceError,\n message: 'Failed to get storefront.',\n debugMessage: error instanceof Error ? error.message : String(error),\n });\n }\n\n if (typeof storefront !== 'string' || storefront.trim().length === 0) {\n throw createPurchaseError({\n code: ErrorCode.ServiceError,\n message: 'Storefront lookup returned no country code.',\n platform,\n });\n }\n return storefront;\n};\n\nfunction normalizeRequestProps(\n request: RequestPurchasePropsByPlatforms,\n platform: 'ios',\n): RequestPurchaseIosProps | null | undefined;\nfunction normalizeRequestProps(\n request: RequestPurchasePropsByPlatforms,\n platform: 'android',\n): RequestPurchaseAndroidProps | null | undefined;\nfunction normalizeRequestProps(\n request: RequestSubscriptionPropsByPlatforms,\n platform: 'ios',\n): RequestSubscriptionIosProps | null | undefined;\nfunction normalizeRequestProps(\n request: RequestSubscriptionPropsByPlatforms,\n platform: 'android',\n): RequestSubscriptionAndroidProps | null | undefined;\nfunction normalizeRequestProps(\n request:\n | RequestPurchasePropsByPlatforms\n | RequestSubscriptionPropsByPlatforms,\n platform: 'ios' | 'android',\n) {\n if (platform === 'ios') {\n return request.apple;\n }\n return request.google;\n}\n\nfunction validateAndroidPurchaseBranchOptions(\n request: unknown,\n type: ProductQueryType,\n): void {\n if (request == null || typeof request !== 'object') return;\n const fields = request as Record<string, unknown>;\n const subscriptionOnlyFields = [\n 'subscriptionOffers',\n 'subscriptionProductReplacementParams',\n 'purchaseToken',\n 'originalExternalTransactionId',\n ];\n if (\n (type === 'in-app' &&\n subscriptionOnlyFields.some((field) => fields[field] != null)) ||\n (type === 'subs' && fields.offerToken != null)\n ) {\n throw createPurchaseError({\n code: ErrorCode.DeveloperError,\n message:\n 'Invalid request for Android. Purchase options must match the selected product type.',\n });\n }\n}\n\n/** Verify app acquisition; send Android integrity tokens to your backend. */\nexport const verifyAppOwnership: QueryField<'verifyAppOwnership'> = async (\n options,\n) => {\n if (\n isVegaOS() ||\n ExpoIapModule.USING_ONSIDE_SDK ||\n (Platform.OS !== 'ios' && Platform.OS !== 'android')\n ) {\n return {\n status: 'unknown',\n reason: 'unsupported',\n storeId: isVegaOS()\n ? 'amazon'\n : ExpoIapModule.USING_ONSIDE_SDK\n ? 'onside'\n : 'unknown',\n };\n }\n return invokeNativeWithPurchaseError(\n () => ExpoIapModule.verifyAppOwnership(options ?? {}),\n nativePlatform(),\n {\n code: ErrorCode.ServiceError,\n },\n );\n};\n\n/**\n * Initiate a purchase or subscription flow. The result arrives through\n * `purchaseUpdatedListener` / `purchaseErrorListener` (or `useIAP`'s\n * `onPurchaseSuccess` / `onPurchaseError`), not the return value.\n *\n * @param args `RequestPurchaseProps`, discriminated by `type`:\n * - `type: 'in-app'` — pass `request.apple.sku` (iOS) and/or `request.google.skus` (Android).\n * - `type: 'subs'` — same shape, plus `request.google.subscriptionOffers: [{ sku, offerToken }]`.\n * @returns The dispatched purchase payload; do not rely on it for the outcome.\n * @throws Synchronous rejection from the store (e.g. `ErrorCode.NotPrepared`, validation failure).\n *\n * @example\n * ```ts\n * await requestPurchase({\n * request: {\n * apple: { sku: 'com.app.premium' },\n * google: { skus: ['com.app.premium'] },\n * },\n * type: 'in-app',\n * });\n * ```\n *\n * @see {@link https://openiap.dev/docs/apis/request-purchase}\n */\nexport const requestPurchase: MutationField<'requestPurchase'> = async (\n args,\n) => {\n const {request, type} = args;\n const {canonical, native} = normalizeProductType(type as ProductTypeInput);\n if (canonical === 'all') {\n throw createPurchaseError({\n code: ErrorCode.DeveloperError,\n message: 'Product type all is only supported for product queries.',\n });\n }\n const isInAppPurchase = canonical === 'in-app';\n\n if (Platform.OS === 'ios') {\n const normalizedRequest = normalizeRequestProps(request, 'ios');\n\n if (!normalizedRequest?.sku) {\n throw createPurchaseError({\n message:\n 'Invalid request for Apple. The `sku` property is required and must be a string.\\n\\n' +\n 'Expected format:\\n' +\n ' requestPurchase({\\n' +\n ' request: {\\n' +\n ' apple: { sku: \"product_id\" },\\n' +\n ' google: { skus: [\"product_id\"] }\\n' +\n ' },\\n' +\n ' type: \"in-app\"\\n' +\n ' })\\n\\n' +\n 'See: https://openiap.dev/docs/apis/request-purchase',\n code: ErrorCode.EmptySkuList,\n });\n }\n\n if (canonical !== 'in-app' && canonical !== 'subs') {\n throw new Error(`Unsupported product type: ${canonical}`);\n }\n\n const payload: MutationRequestPurchaseArgs = {\n type: canonical === 'in-app' ? 'in-app' : 'subs',\n request: {apple: normalizedRequest},\n };\n\n const purchase = (await invokeNativeWithPurchaseError(\n () => ExpoIapModule.requestPurchase(payload),\n 'ios',\n {\n code: ErrorCode.PurchaseError,\n message: 'Failed to request purchase',\n productId: normalizedRequest.sku,\n productIds: [normalizedRequest.sku],\n productType: canonical,\n },\n )) as Purchase | Purchase[] | null;\n\n if (Array.isArray(purchase)) {\n return purchase;\n }\n\n if (purchase) {\n return purchase;\n }\n\n return canonical === 'subs' ? [] : null;\n }\n\n if (isAndroidStoreRuntime()) {\n validateAndroidPurchaseBranchOptions(\n (\n request as\n | RequestPurchasePropsByPlatforms\n | RequestSubscriptionPropsByPlatforms\n )?.google,\n canonical,\n );\n if (isInAppPurchase) {\n const normalizedRequest = normalizeRequestProps(\n request as RequestPurchasePropsByPlatforms,\n 'android',\n ) as RequestPurchaseAndroidProps | null | undefined;\n\n if (!normalizedRequest?.skus?.length) {\n throw createPurchaseError({\n message:\n 'Invalid request for Google. The `skus` property is required and must be a non-empty array.\\n\\n' +\n 'Expected format:\\n' +\n ' requestPurchase({\\n' +\n ' request: {\\n' +\n ' apple: { sku: \"product_id\" },\\n' +\n ' google: { skus: [\"product_id\"] }\\n' +\n ' },\\n' +\n ' type: \"in-app\"\\n' +\n ' })\\n\\n' +\n 'See: https://openiap.dev/docs/apis/request-purchase',\n code: ErrorCode.EmptySkuList,\n });\n }\n\n const {\n skus,\n obfuscatedAccountId,\n obfuscatedProfileId,\n isOfferPersonalized,\n offerToken,\n developerBillingOption,\n } = normalizedRequest;\n\n const result = (await invokeNativeWithPurchaseError(\n () =>\n ExpoIapModule.requestPurchase({\n type: native,\n skus,\n purchaseToken: undefined,\n obfuscatedAccountId: obfuscatedAccountId,\n obfuscatedProfileId: obfuscatedProfileId,\n offerToken: offerToken,\n developerBillingOption: developerBillingOption ?? undefined,\n isOfferPersonalized: isOfferPersonalized ?? false,\n }),\n 'android',\n {\n code: ErrorCode.PurchaseError,\n message: 'Failed to request purchase',\n productId: skus[0],\n productIds: skus,\n productType: canonical,\n },\n )) as Purchase[];\n\n return result;\n }\n\n if (canonical === 'subs') {\n const normalizedRequest = normalizeRequestProps(\n request as RequestSubscriptionPropsByPlatforms,\n 'android',\n ) as RequestSubscriptionAndroidProps | null | undefined;\n\n if (!normalizedRequest?.skus?.length) {\n throw createPurchaseError({\n message:\n 'Invalid request for Google. The `skus` property is required and must be a non-empty array.\\n\\n' +\n 'Expected format:\\n' +\n ' requestPurchase({\\n' +\n ' request: {\\n' +\n ' apple: { sku: \"subscription_id\" },\\n' +\n ' google: { skus: [\"subscription_id\"] }\\n' +\n ' },\\n' +\n ' type: \"subs\"\\n' +\n ' })\\n\\n' +\n 'See: https://openiap.dev/docs/apis/request-purchase',\n code: ErrorCode.EmptySkuList,\n });\n }\n\n const {\n skus,\n obfuscatedAccountId,\n obfuscatedProfileId,\n isOfferPersonalized,\n subscriptionOffers,\n purchaseToken: purchaseTokenInput,\n originalExternalTransactionId,\n developerBillingOption,\n subscriptionProductReplacementParams,\n } = normalizedRequest;\n\n const normalizedOffers = subscriptionOffers ?? [];\n const purchaseToken = purchaseTokenInput ?? undefined;\n\n const result = (await invokeNativeWithPurchaseError(\n () =>\n ExpoIapModule.requestPurchase({\n type: native,\n skus,\n purchaseToken,\n originalExternalTransactionId:\n originalExternalTransactionId ?? undefined,\n obfuscatedAccountId: obfuscatedAccountId,\n obfuscatedProfileId: obfuscatedProfileId,\n subscriptionOffers: normalizedOffers,\n isOfferPersonalized: isOfferPersonalized ?? false,\n developerBillingOption: developerBillingOption ?? undefined,\n subscriptionProductReplacementParams:\n subscriptionProductReplacementParams ?? undefined,\n }),\n 'android',\n {\n code: ErrorCode.PurchaseError,\n message: 'Failed to request purchase',\n productId: skus[0],\n productIds: skus,\n productType: canonical,\n },\n )) as Purchase[];\n\n return result;\n }\n\n throw new Error(\n \"Invalid request for Android: Expected a valid request object with 'skus' array.\",\n );\n }\n\n throw unsupportedPlatformError();\n};\n\n/**\n * Complete a purchase transaction. Call after server-side verification to remove it\n * from the queue.\n *\n * @param args.purchase The `Purchase` to finalize.\n * @param args.isConsumable `true` for consumables (consumes the token so the SKU can be\n * re-bought, e.g. coins); `false` (default) for non-consumables and subscriptions.\n * @returns Promise that resolves once the platform finalizes the transaction.\n * @throws When the platform finalize call fails.\n *\n * @example\n * ```ts\n * // Inside purchaseUpdatedListener:\n * if (await verifyOnServer(purchase)) {\n * await finishTransaction({ purchase, isConsumable: false });\n * }\n * ```\n *\n * @remarks Android purchases must be finalized within 3 days or Google\n * auto-refunds. iOS unfinished transactions replay on every app launch.\n *\n * @see {@link https://openiap.dev/docs/apis/finish-transaction}\n */\nexport const finishTransaction: MutationField<'finishTransaction'> = async ({\n purchase,\n isConsumable,\n}) => {\n // The schema allows explicit null; the native boolean cannot take it.\n const consumable = isConsumable ?? false;\n const platform = nativePlatform();\n if (\n Platform.OS === 'ios' ||\n (isAndroidStoreRuntime() && purchase.store === 'unknown')\n ) {\n await invokeNativeWithPurchaseError(\n () => ExpoIapModule.finishTransaction(purchase, consumable),\n platform,\n {productId: purchase.productId},\n );\n } else if (isAndroidStoreRuntime()) {\n const token = purchase.purchaseToken ?? undefined;\n\n if (!token) {\n throw createPurchaseError({\n message: 'Purchase token is required to finish transaction',\n code: ErrorCode.DeveloperError,\n productId: purchase.productId,\n platform: 'android',\n });\n }\n\n // Native rejects when the store refuses the token, so a failure cannot pass as finished.\n await invokeNativeWithPurchaseError(\n () =>\n consumable\n ? ExpoIapModule.consumePurchaseAndroid(token)\n : ExpoIapModule.acknowledgePurchaseAndroid(token),\n 'android',\n {productId: purchase.productId},\n );\n } else {\n throw unsupportedPlatformError();\n }\n\n showFirstPurchaseNotice(purchase);\n};\n\n/**\n * Restore completed transactions. Returns nothing; read the restored items with\n * `getAvailablePurchases` or from hook state.\n *\n * - iOS: sync (or Onside restore when OnsideKit is active), then fetch available purchases.\n * - Android: run the provider's restore, then fetch available purchases.\n *\n * @see {@link https://openiap.dev/docs/apis/restore-purchases}\n */\nexport const restorePurchases: MutationField<'restorePurchases'> = async () => {\n await restorePurchasesNative();\n\n await getAvailablePurchases({\n alsoPublishToEventListenerIOS: false,\n onlyIncludeActiveItemsIOS: true,\n });\n};\n\n/**\n * Deeplinks to native interface that allows users to manage their subscriptions\n * @param options.skuAndroid - Required for Android to locate specific subscription (ignored on iOS)\n * @param options.packageNameAndroid - Required for Android to identify your app (ignored on iOS)\n *\n * @returns Promise that resolves when the deep link is successfully opened\n *\n * @throws {Error} When called on unsupported platform or when required Android parameters are missing\n *\n * @example\n * import { deepLinkToSubscriptions } from 'expo-iap';\n *\n * // Works on both iOS and Android\n * await deepLinkToSubscriptions({\n * skuAndroid: 'your_subscription_sku',\n * packageNameAndroid: 'com.example.app'\n * });\n *\n * @see {@link https://openiap.dev/docs/apis/deep-link-to-subscriptions}\n */\nexport const deepLinkToSubscriptions: MutationField<\n 'deepLinkToSubscriptions'\n> = async (options) => {\n if (Platform.OS === 'ios') {\n await deepLinkToSubscriptionsIOS();\n return;\n }\n\n if (Platform.OS === 'android') {\n await deepLinkToSubscriptionsAndroid((options as DeepLinkOptions) ?? null);\n return;\n }\n\n throw unsupportedPlatformError();\n};\n\n/**\n * Open the platform's offer/promo code redemption flow.\n *\n * Resolves the redeemed purchase only when the store reports it synchronously;\n * every other path resolves null, so reconcile with `getAvailablePurchases`\n * when the app resumes.\n *\n * @returns Promise resolving to the redeemed purchase, or null\n * @throws Error when a redemption flow exists but cannot be opened\n *\n * @see {@link https://openiap.dev/docs/apis/open-redeem-offer-code}\n */\nexport const openRedeemOfferCode: MutationField<\n 'openRedeemOfferCode'\n> = async () => {\n if (isVegaOS()) return null;\n if (Platform.OS !== 'ios' && !isAndroidStoreRuntime()) {\n throw unsupportedPlatformError();\n }\n return invokeNativeWithPurchaseError(\n () => ExpoIapModule.openRedeemOfferCode(),\n nativePlatform(),\n {code: ErrorCode.PurchaseError, message: 'Failed to redeem offer code.'},\n );\n};\n\n/**\n * Verify purchase with the configured providers.\n *\n * @param options - Receipt validation options containing the SKU\n * @returns Promise resolving to receipt validation result\n *\n * @see {@link https://openiap.dev/docs/features/validation#verify-purchase}\n */\nexport const verifyPurchase: MutationField<'verifyPurchase'> = async (\n options,\n) => {\n if (!isStorePlatform()) {\n throw unsupportedPlatformError();\n }\n\n // The native result is already the flat union member, with `__typename`.\n return invokeNativeWithPurchaseError(\n () => ExpoIapModule.verifyPurchase(options),\n nativePlatform(),\n );\n};\n\n/**\n * Verify purchase with a specific provider (e.g., IAPKit).\n *\n * @param options - Verification options including provider and credentials\n * @returns Promise resolving to provider-specific verification result\n *\n * @example\n * ```typescript\n * const result = await verifyPurchaseWithProvider({\n * provider: 'iapkit',\n * iapkit: {\n * apiKey: 'your-api-key',\n * // Choose exactly one store payload.\n * // apple: { jws: purchase.purchaseToken },\n * // google: { purchaseToken: purchase.purchaseToken },\n * amazon: {\n * expectedProductId: purchase.productId,\n * userId: amazonUserId,\n * receiptId: purchase.purchaseToken,\n * // Enable only for App Tester after the IAPKit project opt-in.\n * sandbox: amazonSandboxEnabled,\n * }\n * }\n * });\n * ```\n *\n * @see {@link https://openiap.dev/docs/features/validation#verify-purchase-with-provider}\n */\nexport const verifyPurchaseWithProvider: MutationField<\n 'verifyPurchaseWithProvider'\n> = async (options) => {\n if (!isStoreRuntime()) {\n throw unsupportedPlatformError();\n }\n\n let resolvedOptions = options;\n\n if (\n resolvedOptions.provider === 'iapkit' &&\n resolvedOptions.iapkit &&\n !resolvedOptions.iapkit.apiKey\n ) {\n try {\n // Dynamically import expo-constants to avoid hard dependency\n const {default: Constants} = await import('expo-constants');\n const configApiKey = Constants.expoConfig?.extra?.iapkitApiKey;\n if (typeof configApiKey === 'string' && configApiKey.length > 0) {\n resolvedOptions = {\n ...resolvedOptions,\n iapkit: {\n ...resolvedOptions.iapkit,\n apiKey: configApiKey,\n },\n };\n }\n } catch {\n throw new Error(\n 'expo-constants is required for auto-filling iapkitApiKey from config. ' +\n 'Please install it: npx expo install expo-constants\\n' +\n 'Or provide apiKey directly in verifyPurchaseWithProvider options.',\n );\n }\n }\n\n const result = await invokeNativeWithPurchaseError(\n () => ExpoIapModule.verifyPurchaseWithProvider(resolvedOptions),\n nativePlatform(),\n );\n if (result.iapkit == null) {\n return result;\n }\n\n const {clientPayload, productId, ...iapkit} = result.iapkit;\n return {\n ...result,\n iapkit: {\n ...iapkit,\n storeId: resolveStoreId(iapkit.storeId, iapkit.store),\n ...(clientPayload == null ? {} : {clientPayload}),\n ...(productId == null ? {} : {productId}),\n },\n };\n};\n\nexport * from './useIAP';\nexport {kitApi, KitApiError, resolveLocalizedPayload} from './kit-api';\nexport type {\n KitApiOptions,\n KitClientPayloadCache,\n KitClientPayloadOptions,\n KitClientPayloadResponse,\n KitLocalizedClientPayload,\n KitLocalizedClientPayloadOptions,\n KitLocalizedPayloadOptions,\n KitProduct,\n KitProductClientPayload,\n KitProductOffer,\n KitProductPlatform,\n KitProductsOptions,\n KitProductsResponse,\n KitSubscription,\n EntitlementsResponse,\n StatusResponse,\n} from './kit-api';\nexport {\n createPurchaseFlow,\n describePurchaseFlowStatus,\n toPurchaseConfirmationRequest,\n} from './purchase-flow';\nexport type {\n PurchaseConfirmation,\n PurchaseConfirmationRequest,\n PurchaseFlow,\n PurchaseFlowGuidance,\n PurchaseFlowGuidanceKey,\n PurchaseFlowOptions,\n PurchaseFlowOutcome,\n PurchaseFlowPurchase,\n PurchaseFlowStatus,\n RecoverPurchasesOptions,\n} from './purchase-flow';\nexport {\n ErrorCodeUtils,\n ErrorCodeMapping,\n createPurchaseError,\n createPurchaseErrorFromPlatform,\n getUserFriendlyErrorMessage,\n isUserCancelledError,\n} from './utils/errorMapping';\nexport type {\n PurchaseError as ExpoPurchaseError,\n PurchaseErrorProps,\n} from './utils/errorMapping';\nexport {ExpoIapConsole} from './utils/debug';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// External dependencies\nimport {Platform} from 'react-native';\n\n// Internal modules\nimport ExpoIapModule, {getNativeModule} from './ExpoIapModule';\nimport {isVegaOS} from './vega';\nimport {\n deepLinkToSubscriptionsIOS,\n getPendingTransactionsIOS,\n isProductIOS,\n} from './modules/ios';\nimport {\n createDeviceConfirmationIOS,\n createIapkitConfirmation,\n type IapkitConfirmationOptions,\n type PurchaseConfirmation,\n type PurchaseFlow,\n type PurchaseFlowOptions,\n type PurchaseFlowPurchase,\n} from './purchase-flow';\nimport {\n clearRequested,\n createSdkPurchaseFlow,\n markRequested,\n type PurchaseFlowSdk,\n type SdkPurchaseFlowOptions,\n} from './utils/purchaseFlowBinding';\nimport {\n isProductAndroid,\n deepLinkToSubscriptionsAndroid,\n} from './modules/android';\nimport {ExpoIapConsole} from './utils/debug';\nimport {showFirstPurchaseNotice} from './utils/firstPurchaseNotice';\nimport {restorePurchasesNative} from './utils/restorePurchases';\nimport {\n decodeAndroidPurchases,\n decodeApplePurchases,\n} from './utils/availablePurchases';\n\n// Types\nimport type {\n ActiveSubscription,\n DeepLinkOptions,\n DeveloperProvidedBillingDetailsAndroid,\n IapPlatform,\n MutationField,\n MutationRequestPurchaseArgs,\n Product,\n ProductQueryType,\n ProductSubscription,\n Purchase,\n PurchaseOptions,\n PurchaseUpdatedListenerOptions,\n QueryField,\n RequestPurchasePropsByPlatforms,\n RequestPurchaseAndroidProps,\n RequestPurchaseIosProps,\n RequestSubscriptionPropsByPlatforms,\n RequestSubscriptionAndroidProps,\n RequestSubscriptionIosProps,\n UserChoiceBillingDetails,\n} from './types';\nimport {ErrorCode, resolveStoreId} from './types';\nimport {\n createPurchaseError,\n normalizeErrorCodeFromNative,\n type PurchaseError,\n} from './utils/errorMapping';\nimport {\n createPurchaseErrorFromNativeException,\n invokeNativeWithPurchaseError,\n} from './utils/nativeError';\n\nexport * from './types';\nexport * from './modules/android';\nexport * from './modules/ios';\nexport * from './onside';\nexport * from './vega';\n\nexport enum OpenIapEvent {\n PurchaseUpdated = 'purchase-updated',\n PurchaseError = 'purchase-error',\n PromotedProductIOS = 'promoted-product-ios',\n UserChoiceBillingAndroid = 'user-choice-billing-android',\n /**\n * Fired for External Payments (8.3.0+) and Billing Choice (9.1.0+)\n * developer billing flows. Nullable fields depend on the selected flow.\n */\n DeveloperProvidedBillingAndroid = 'developer-provided-billing-android',\n /** Fired when a subscription enters a billing-issue state; see `subscriptionBillingIssueListener`. */\n SubscriptionBillingIssue = 'subscription-billing-issue',\n}\n\ntype ExpoIapEventPayloads = {\n [OpenIapEvent.PurchaseUpdated]: Purchase;\n [OpenIapEvent.PurchaseError]: PurchaseError;\n [OpenIapEvent.PromotedProductIOS]:\n | Product\n | string\n | {id?: string; productId?: string};\n [OpenIapEvent.UserChoiceBillingAndroid]: UserChoiceBillingDetails;\n [OpenIapEvent.DeveloperProvidedBillingAndroid]: DeveloperProvidedBillingDetailsAndroid;\n [OpenIapEvent.SubscriptionBillingIssue]: Purchase;\n};\n\ntype ExpoIapEventListener<E extends OpenIapEvent> = (\n payload: ExpoIapEventPayloads[E],\n) => void;\n\ntype ExpoIapEmitter = {\n addListener<E extends OpenIapEvent>(\n eventName: E,\n listener: ExpoIapEventListener<E>,\n ): {remove: () => void};\n removeListener<E extends OpenIapEvent>(\n eventName: E,\n listener: ExpoIapEventListener<E>,\n ): void;\n};\n\nconst isStorePlatform = (): boolean =>\n Platform.OS === 'ios' || Platform.OS === 'android';\n\nconst isStoreRuntime = (): boolean =>\n Platform.OS === 'ios' || isAndroidStoreRuntime();\n\nconst unsupportedPlatformError = (): Error =>\n new Error(`Unsupported platform: ${Platform.OS}`);\n\n// Platform tag for PurchaseErrors built from native rejections.\nconst nativePlatform = (): IapPlatform =>\n Platform.OS === 'ios' ? 'ios' : 'android';\n\n// Listener calls go to the raw native module (see getNativeModule), resolved\n// lazily so importing this module doesn't throw on unsupported platforms.\nexport const emitter: ExpoIapEmitter = {\n addListener(eventName, listener) {\n const nativeModule = getNativeModule();\n const nativeSubscription = nativeModule.addListener(eventName, listener);\n let removed = false;\n\n return {\n remove: () => {\n if (removed) {\n return;\n }\n removed = true;\n\n if (typeof nativeSubscription?.remove === 'function') {\n nativeSubscription.remove();\n return;\n }\n\n nativeModule.removeListener?.(eventName, listener);\n },\n };\n },\n removeListener(eventName, listener) {\n return getNativeModule().removeListener?.(eventName, listener);\n },\n};\n\nlet nonDedupingPurchaseUpdatedListenerCountIOS = 0;\nconst purchaseUpdatedDedupeHistoryLimitIOS = 512;\nconst purchaseUpdatedDedupeHistoryIOS = {\n ids: new Set<string>(),\n order: [] as string[],\n start: 0,\n};\nlet purchaseUpdatedDedupeGenerationIOS = 0;\n\ntype PurchaseUpdatedDedupeHistoryIOS = {\n ids: Set<string>;\n order: string[];\n start: number;\n};\n\nconst purchaseUpdatedTransactionIdIOS = (purchase: Purchase) => {\n if (typeof purchase.id === 'string' && purchase.id.length > 0) {\n return purchase.id;\n }\n return null;\n};\n\nconst rememberPurchaseUpdatedTransactionIOS = (\n transactionId: string,\n history: PurchaseUpdatedDedupeHistoryIOS,\n) => {\n if (history.ids.has(transactionId)) {\n return;\n }\n\n history.ids.add(transactionId);\n history.order.push(transactionId);\n if (\n history.order.length - history.start >\n purchaseUpdatedDedupeHistoryLimitIOS\n ) {\n const evicted = history.order[history.start];\n history.start += 1;\n if (evicted != null) {\n history.ids.delete(evicted);\n }\n if (history.start > 128 && history.start * 2 > history.order.length) {\n history.order = history.order.slice(history.start);\n history.start = 0;\n }\n }\n};\n\nconst clearPurchaseUpdatedDedupeHistoryIOS = (\n history: PurchaseUpdatedDedupeHistoryIOS,\n) => {\n history.ids.clear();\n history.order.length = 0;\n history.start = 0;\n};\n\nconst resetPurchaseUpdatedDedupeHistoryIOS = () => {\n clearPurchaseUpdatedDedupeHistoryIOS(purchaseUpdatedDedupeHistoryIOS);\n purchaseUpdatedDedupeGenerationIOS += 1;\n};\n\nconst configurePurchaseUpdatedListenerOptionsIOS = (\n dedupeTransactionIOS: boolean,\n) => {\n if (Platform.OS !== 'ios') return;\n\n const promise = getNativeModule().setPurchaseUpdatedListenerOptions?.({\n dedupeTransactionIOS,\n });\n void promise?.catch((error: unknown) => {\n ExpoIapConsole.warn(\n 'Failed to configure purchase updated listener options:',\n error,\n );\n });\n};\n\nexport type ProductTypeInput = ProductQueryType;\n\nconst normalizeProductType = (type?: ProductTypeInput) => {\n if (!type || type === 'in-app') {\n return {\n canonical: 'in-app' as ProductQueryType,\n native: 'in-app' as const,\n };\n }\n if (type === 'subs') {\n return {\n canonical: 'subs' as ProductQueryType,\n native: 'subs' as const,\n };\n }\n if (type === 'all') {\n return {\n canonical: 'all' as ProductQueryType,\n native: 'all' as const,\n };\n }\n throw new Error(`Unsupported product type: ${type}`);\n};\n\nconst isAndroidStoreRuntime = (): boolean => {\n return Platform.OS === 'android' || isVegaOS();\n};\n\nexport const purchaseUpdatedListener = (\n listener: (event: Purchase) => void,\n options?: PurchaseUpdatedListenerOptions | null,\n) => {\n const receiveDuplicateTransactionUpdatesIOS =\n Platform.OS === 'ios' && options?.dedupeTransactionIOS === false;\n const listenerDedupeHistoryIOS: PurchaseUpdatedDedupeHistoryIOS = {\n ids: new Set(purchaseUpdatedDedupeHistoryIOS.ids),\n order: purchaseUpdatedDedupeHistoryIOS.order.slice(\n purchaseUpdatedDedupeHistoryIOS.start,\n ),\n start: 0,\n };\n let listenerDedupeGenerationIOS = purchaseUpdatedDedupeGenerationIOS;\n\n const wrappedListener = (event: Purchase) => {\n const normalized = event;\n if (Platform.OS === 'ios') {\n if (listenerDedupeGenerationIOS !== purchaseUpdatedDedupeGenerationIOS) {\n clearPurchaseUpdatedDedupeHistoryIOS(listenerDedupeHistoryIOS);\n listenerDedupeGenerationIOS = purchaseUpdatedDedupeGenerationIOS;\n }\n const transactionId = purchaseUpdatedTransactionIdIOS(normalized);\n if (transactionId != null) {\n const isDuplicateForListener =\n listenerDedupeHistoryIOS.ids.has(transactionId);\n rememberPurchaseUpdatedTransactionIOS(\n transactionId,\n listenerDedupeHistoryIOS,\n );\n rememberPurchaseUpdatedTransactionIOS(\n transactionId,\n purchaseUpdatedDedupeHistoryIOS,\n );\n if (!receiveDuplicateTransactionUpdatesIOS && isDuplicateForListener) {\n return;\n }\n }\n }\n listener(normalized);\n };\n const emitterSubscription = emitter.addListener(\n OpenIapEvent.PurchaseUpdated,\n wrappedListener,\n );\n\n if (!receiveDuplicateTransactionUpdatesIOS) {\n return emitterSubscription;\n }\n\n nonDedupingPurchaseUpdatedListenerCountIOS += 1;\n configurePurchaseUpdatedListenerOptionsIOS(false);\n let removed = false;\n\n return {\n remove: () => {\n if (removed) {\n return;\n }\n removed = true;\n try {\n emitterSubscription?.remove?.();\n } finally {\n nonDedupingPurchaseUpdatedListenerCountIOS = Math.max(\n 0,\n nonDedupingPurchaseUpdatedListenerCountIOS - 1,\n );\n configurePurchaseUpdatedListenerOptionsIOS(\n nonDedupingPurchaseUpdatedListenerCountIOS === 0,\n );\n }\n },\n };\n};\n\nexport const purchaseErrorListener = (\n listener: (error: PurchaseError) => void,\n) => {\n // Native events may carry codes outside ErrorCode; deliver canonical codes.\n const wrappedListener = (error: PurchaseError) => {\n listener({...error, code: normalizeErrorCodeFromNative(error.code)});\n };\n const emitterSubscription = emitter.addListener(\n OpenIapEvent.PurchaseError,\n wrappedListener,\n );\n return emitterSubscription;\n};\n\n/**\n * iOS-only listener for App Store promoted product events.\n * This fires when a user taps on a promoted product in the App Store.\n *\n * @param listener - Callback function that receives the promoted product details\n * @returns EventSubscription that can be used to unsubscribe\n *\n * @example\n * ```typescript\n * const subscription = promotedProductListenerIOS((product) => {\n * console.log('Promoted product:', product);\n * // Handle the promoted product\n * });\n *\n * // Later, clean up\n * subscription.remove();\n * ```\n *\n * @platform iOS\n */\nexport const promotedProductListenerIOS = (\n listener: (product: Product) => void,\n) => {\n if (Platform.OS !== 'ios') {\n ExpoIapConsole.warn(\n 'promotedProductListenerIOS: This listener is only available on iOS',\n );\n return {remove: () => {}};\n }\n\n let deliveredProductId: string | undefined;\n const deliver = (product: Product) => {\n const productId =\n product.id ?? (product as Product & {productId?: string}).productId;\n if (productId && productId === deliveredProductId) {\n return;\n }\n deliveredProductId = productId;\n listener(product);\n };\n\n const replayPendingProduct = () => {\n let pendingProduct: Promise<Product | null> | undefined;\n try {\n pendingProduct = ExpoIapModule.getPromotedProductIOS() as\n | Promise<Product | null>\n | undefined;\n } catch {\n return Promise.resolve();\n }\n\n if (!pendingProduct || typeof pendingProduct.then !== 'function') {\n return Promise.resolve();\n }\n\n return pendingProduct\n .then((product: Product | null) => {\n if (product) {\n deliver(product);\n }\n })\n .catch(() => {});\n };\n\n const subscription = emitter.addListener(\n OpenIapEvent.PromotedProductIOS,\n (payload) => {\n if (typeof payload === 'string') {\n void replayPendingProduct();\n return;\n }\n\n deliver(payload as Product);\n },\n );\n\n void replayPendingProduct();\n\n return subscription;\n};\n\n/**\n * Android-only listener for User Choice Billing events.\n * This fires when a user selects alternative billing instead of Google Play billing\n * in the User Choice Billing dialog (only in 'user-choice' mode).\n *\n * @param listener - Callback function that receives the external transaction token and product IDs\n * @returns EventSubscription that can be used to unsubscribe\n *\n * @example\n * ```typescript\n * const subscription = userChoiceBillingListenerAndroid((details) => {\n * console.log('User selected alternative billing');\n * console.log('External transaction token received; send it to your backend without logging it.');\n * console.log('Products:', details.products);\n *\n * // Process payment in your system, then report token to Google\n * await processPaymentAndReportToken(details);\n * });\n *\n * // Later, clean up\n * subscription.remove();\n * ```\n *\n * @platform Android\n */\nexport const userChoiceBillingListenerAndroid = (\n listener: (details: UserChoiceBillingDetails) => void,\n) => {\n if (Platform.OS !== 'android') {\n ExpoIapConsole.warn(\n 'userChoiceBillingListenerAndroid: This listener is only available on Android',\n );\n return {remove: () => {}};\n }\n return emitter.addListener(OpenIapEvent.UserChoiceBillingAndroid, listener);\n};\n\n/**\n * Android-only listener for Developer Provided Billing events.\n * This fires when a user selects the developer's option in an External Payments\n * or Billing Choice purchase flow.\n *\n * @param listener - Callback that receives selected products and flow details\n * @returns EventSubscription that can be used to unsubscribe\n *\n * @example\n * ```typescript\n * const subscription = developerProvidedBillingListenerAndroid(async (details) => {\n * await processPaymentWithYourGateway(details.products, details.linkUri);\n * if (details.externalTransactionToken) {\n * await reportExternalTransactionToGoogle(details.externalTransactionToken);\n * }\n * });\n *\n * // Later, clean up\n * subscription.remove();\n * ```\n *\n * @platform Android (Play Billing Library 8.3.0+; Billing Choice 9.1.0+)\n */\nexport const developerProvidedBillingListenerAndroid = (\n listener: (details: DeveloperProvidedBillingDetailsAndroid) => void,\n) => {\n if (Platform.OS !== 'android') {\n ExpoIapConsole.warn(\n 'developerProvidedBillingListenerAndroid: This listener is only available on Android',\n );\n return {remove: () => {}};\n }\n return emitter.addListener(\n OpenIapEvent.DeveloperProvidedBillingAndroid,\n listener,\n );\n};\n\n/**\n * Listen for subscription billing-issue events (cross-platform).\n *\n * Fires when a user's active subscription enters a state that needs attention\n * for a payment problem. Unifies:\n * - iOS / Mac Catalyst 16.4+ and visionOS 1.0+: StoreKit 2 `Message.Reason.billingIssue`.\n * - Android (Play Billing 8.1+): when `Purchase.isSuspendedAndroid === true`.\n * - Meta Horizon, Amazon, macOS, tvOS, watchOS, and iOS before 16.4: never fires.\n *\n * Recommended UX: call `deepLinkToSubscriptions()` when this fires so the user\n * can update their payment method in the platform subscription center.\n *\n * @example\n * ```typescript\n * const subscription = subscriptionBillingIssueListener((purchase) => {\n * console.warn('Needs attention:', purchase.productId);\n * deepLinkToSubscriptions({\n * skuAndroid: purchase.productId,\n * packageNameAndroid: 'com.example.app',\n * });\n * });\n * ```\n */\nexport const subscriptionBillingIssueListener = (\n listener: (purchase: Purchase) => void,\n) => {\n const wrappedListener = (event: Purchase) => {\n listener(event);\n };\n return emitter.addListener(\n OpenIapEvent.SubscriptionBillingIssue,\n wrappedListener,\n );\n};\n\n/**\n * Initialize the store connection. Must be called before any other IAP API.\n *\n * @param config Optional connection config. Use `enableBillingProgramAndroid` (Android,\n * Play Billing 8.2.0+) to opt into a billing program. For Billing Choice 9.1.0+, set\n * `billingChoiceScreenTypeAndroid` to the renderer configured in Play Console.\n * iOS ignores Android-specific fields.\n * @returns Promise resolving to `true` when the platform billing client is connected.\n * @throws When the platform billing client fails to initialize.\n *\n * @example\n * ```ts\n * await initConnection();\n * await initConnection({ enableBillingProgramAndroid: 'external-offer' });\n * await initConnection({\n * enableBillingProgramAndroid: 'billing-choice',\n * billingChoiceScreenTypeAndroid: 'developer-rendered',\n * });\n * ```\n *\n * @remarks When using `useIAP()`, connection is auto-managed on mount/unmount —\n * pass options to the hook instead of calling this directly.\n *\n * @see {@link https://openiap.dev/docs/apis/init-connection}\n */\nexport const initConnection: MutationField<'initConnection'> = async (\n config,\n) => {\n const result = await invokeNativeWithPurchaseError(\n () => ExpoIapModule.initConnection(config ?? null),\n nativePlatform(),\n );\n if (\n result === true &&\n Platform.OS === 'ios' &&\n nonDedupingPurchaseUpdatedListenerCountIOS > 0\n ) {\n configurePurchaseUpdatedListenerOptionsIOS(false);\n }\n return result;\n};\n\n/**\n * Close the store connection and release resources.\n *\n * @see {@link https://openiap.dev/docs/apis/end-connection}\n */\nexport const endConnection: MutationField<'endConnection'> = async () => {\n const result = await invokeNativeWithPurchaseError(\n () => ExpoIapModule.endConnection(),\n nativePlatform(),\n );\n if (result === true && Platform.OS === 'ios') {\n resetPurchaseUpdatedDedupeHistoryIOS();\n }\n return result;\n};\n\n/**\n * Retrieve products or subscriptions from the store by SKU.\n *\n * @param request `ProductRequest` — `skus` (string[]) and optional `type`\n * (`'in-app' | 'subs' | 'all'`, defaults to `'in-app'`).\n * @returns Promise resolving to a `FetchProductsResult` union — `Product[]` for `'in-app'`,\n * `ProductSubscription[]` for `'subs'`, or a mixed array for `'all'`.\n * @throws When the store rejects the request (empty `skus`, not connected,\n * network/store error). Unknown SKUs are omitted from the result, not thrown.\n *\n * @example\n * ```ts\n * const products = await fetchProducts({\n * skus: ['com.app.coins_100', 'com.app.premium'],\n * type: 'in-app',\n * });\n * ```\n *\n * @remarks Promise-based, unlike the event-based `request*` APIs such as `requestPurchase`.\n *\n * @see {@link https://openiap.dev/docs/apis/fetch-products}\n */\nexport const fetchProducts: QueryField<'fetchProducts'> = async (request) => {\n ExpoIapConsole.debug('fetchProducts called with:', request);\n const {skus, type} = request ?? {};\n\n if (!Array.isArray(skus) || skus.length === 0) {\n throw createPurchaseError({\n message: 'No SKUs provided',\n code: ErrorCode.EmptySkuList,\n });\n }\n\n const {canonical, native} = normalizeProductType(\n type as ProductTypeInput | undefined,\n );\n const skuSet = new Set(skus);\n\n const filterIosItems = (\n items: unknown[],\n ): (Product | ProductSubscription)[] =>\n items.filter((item): item is Product | ProductSubscription => {\n if (!isProductIOS(item)) {\n return false;\n }\n const candidate = item as Product | ProductSubscription;\n return typeof candidate.id === 'string' && skuSet.has(candidate.id);\n });\n\n const filterAndroidItems = (\n items: unknown[],\n ): (Product | ProductSubscription)[] =>\n items.filter((item): item is Product | ProductSubscription => {\n if (!isProductAndroid(item)) {\n return false;\n }\n const candidate = item as Product | ProductSubscription;\n return typeof candidate.id === 'string' && skuSet.has(candidate.id);\n });\n\n const castResult = (\n items: (Product | ProductSubscription)[],\n ):\n | (Product | ProductSubscription)[]\n | Product[]\n | ProductSubscription[]\n | null => {\n if (canonical === 'in-app') {\n return items as Product[];\n }\n if (canonical === 'subs') {\n return items as ProductSubscription[];\n }\n // 'all' mixes products and subscriptions; returned as-is to keep the discriminated union.\n return items;\n };\n\n if (Platform.OS === 'ios') {\n const rawItems = await invokeNativeWithPurchaseError<unknown[]>(\n () => ExpoIapModule.fetchProducts({skus, type: native}),\n 'ios',\n {\n code: ErrorCode.QueryProduct,\n message: 'Failed to query products',\n productIds: skus,\n productType: canonical,\n },\n );\n return castResult(filterIosItems(rawItems));\n }\n\n if (isAndroidStoreRuntime()) {\n const rawItems = await invokeNativeWithPurchaseError<unknown[]>(\n () => ExpoIapModule.fetchProducts(native, skus),\n 'android',\n {\n code: ErrorCode.QueryProduct,\n message: 'Failed to query products',\n productIds: skus,\n productType: canonical,\n },\n );\n return castResult(filterAndroidItems(rawItems));\n }\n\n throw unsupportedPlatformError();\n};\n\n/**\n * List the user's unfinished purchases: non-consumables, active subscriptions,\n * and pending transactions.\n *\n * @param options Optional `PurchaseOptions`. iOS-only flags:\n * `alsoPublishToEventListenerIOS`, `onlyIncludeActiveItemsIOS`.\n * @returns Promise resolving to an array of `Purchase` currently held by the store.\n * @throws When the platform query fails.\n *\n * @example\n * ```ts\n * const purchases = await getAvailablePurchases();\n * for (const p of purchases) {\n * if (await verifyOnServer(p)) await finishTransaction({ purchase: p, isConsumable: false });\n * }\n * ```\n *\n * @see {@link https://openiap.dev/docs/apis/get-available-purchases}\n */\nexport const getAvailablePurchases: QueryField<\n 'getAvailablePurchases'\n> = async (options) => {\n const normalizedOptions = {\n alsoPublishToEventListenerIOS:\n options?.alsoPublishToEventListenerIOS ?? false,\n onlyIncludeActiveItemsIOS: options?.onlyIncludeActiveItemsIOS ?? true,\n includeSuspendedAndroid: options?.includeSuspendedAndroid ?? false,\n } satisfies PurchaseOptions;\n\n if (isVegaOS()) {\n const purchases = await ExpoIapModule.getAvailableItems(normalizedOptions);\n return decodeAndroidPurchases(purchases);\n }\n\n let purchases: Purchase[];\n\n if (Platform.OS === 'ios') {\n purchases = (await invokeNativeWithPurchaseError(\n () =>\n ExpoIapModule.getAvailableItems(\n normalizedOptions.alsoPublishToEventListenerIOS,\n normalizedOptions.onlyIncludeActiveItemsIOS,\n ),\n 'ios',\n )) as Purchase[];\n } else if (Platform.OS === 'android') {\n purchases = (await invokeNativeWithPurchaseError(\n () => ExpoIapModule.getAvailableItems(normalizedOptions),\n 'android',\n )) as Purchase[];\n } else {\n throw unsupportedPlatformError();\n }\n\n return Platform.OS === 'ios'\n ? decodeApplePurchases(purchases)\n : decodeAndroidPurchases(purchases);\n};\n\n/**\n * Get all active subscriptions. On iOS each entry carries `renewalInfoIOS`\n * (e.g. pendingUpgradeProductId, willAutoRenew, autoRenewPreference); on\n * Android they are filtered from the available purchases.\n *\n * @param subscriptionIds - Optional array of subscription product IDs to filter. If not provided, returns all active subscriptions.\n * @returns Promise resolving to array of active subscriptions with details\n *\n * @example\n * ```typescript\n * // Get all active subscriptions\n * const subs = await getActiveSubscriptions();\n *\n * // Get specific subscriptions\n * const premiumSubs = await getActiveSubscriptions(['premium', 'premium_year']);\n *\n * // Check for pending upgrades (iOS)\n * subs.forEach(sub => {\n * if (sub.renewalInfoIOS?.pendingUpgradeProductId) {\n * console.log(`Upgrade pending to: ${sub.renewalInfoIOS.pendingUpgradeProductId}`);\n * }\n * });\n * ```\n *\n * @see {@link https://openiap.dev/docs/apis/get-active-subscriptions}\n */\nexport const getActiveSubscriptions: QueryField<\n 'getActiveSubscriptions'\n> = async (subscriptionIds) => {\n if (!isStoreRuntime()) {\n throw unsupportedPlatformError();\n }\n\n const result = await invokeNativeWithPurchaseError(\n () => ExpoIapModule.getActiveSubscriptions(subscriptionIds ?? null),\n nativePlatform(),\n );\n return (result ?? []) as ActiveSubscription[];\n};\n\n/**\n * Check if user has any active subscriptions.\n *\n * @param subscriptionIds - Optional array of subscription product IDs to check. If not provided, checks all subscriptions.\n * @returns Promise resolving to true if user has at least one active subscription\n *\n * @example\n * ```typescript\n * // Check any active subscription\n * const hasAny = await hasActiveSubscriptions();\n *\n * // Check specific subscriptions\n * const hasPremium = await hasActiveSubscriptions(['premium', 'premium_year']);\n * ```\n *\n * @see {@link https://openiap.dev/docs/apis/has-active-subscriptions}\n */\nexport const hasActiveSubscriptions: QueryField<\n 'hasActiveSubscriptions'\n> = async (subscriptionIds) => {\n if (!isStoreRuntime()) {\n throw unsupportedPlatformError();\n }\n\n return !!(await invokeNativeWithPurchaseError(\n () => ExpoIapModule.hasActiveSubscriptions(subscriptionIds ?? null),\n nativePlatform(),\n ));\n};\n\n/**\n * Return the user's storefront country code.\n *\n * @see {@link https://openiap.dev/docs/apis/get-storefront}\n */\nexport const getStorefront: QueryField<'getStorefront'> = async () => {\n if (Platform.OS !== 'ios' && !isAndroidStoreRuntime()) {\n throw createPurchaseError({\n code: ErrorCode.FeatureNotSupported,\n message: `Storefront lookup is not supported on ${Platform.OS}.`,\n });\n }\n\n const platform = nativePlatform();\n if (typeof ExpoIapModule.getStorefront !== 'function') {\n throw createPurchaseError({\n code: ErrorCode.FeatureNotSupported,\n message: 'Native getStorefront is not available on this build.',\n platform,\n });\n }\n\n let storefront: unknown;\n try {\n storefront = await ExpoIapModule.getStorefront();\n } catch (error) {\n throw createPurchaseErrorFromNativeException(error, platform, {\n code: ErrorCode.ServiceError,\n message: 'Failed to get storefront.',\n debugMessage: error instanceof Error ? error.message : String(error),\n });\n }\n\n if (typeof storefront !== 'string' || storefront.trim().length === 0) {\n throw createPurchaseError({\n code: ErrorCode.ServiceError,\n message: 'Storefront lookup returned no country code.',\n platform,\n });\n }\n return storefront;\n};\n\nfunction normalizeRequestProps(\n request: RequestPurchasePropsByPlatforms,\n platform: 'ios',\n): RequestPurchaseIosProps | null | undefined;\nfunction normalizeRequestProps(\n request: RequestPurchasePropsByPlatforms,\n platform: 'android',\n): RequestPurchaseAndroidProps | null | undefined;\nfunction normalizeRequestProps(\n request: RequestSubscriptionPropsByPlatforms,\n platform: 'ios',\n): RequestSubscriptionIosProps | null | undefined;\nfunction normalizeRequestProps(\n request: RequestSubscriptionPropsByPlatforms,\n platform: 'android',\n): RequestSubscriptionAndroidProps | null | undefined;\nfunction normalizeRequestProps(\n request:\n | RequestPurchasePropsByPlatforms\n | RequestSubscriptionPropsByPlatforms,\n platform: 'ios' | 'android',\n) {\n if (platform === 'ios') {\n return request.apple;\n }\n return request.google;\n}\n\nfunction validateAndroidPurchaseBranchOptions(\n request: unknown,\n type: ProductQueryType,\n): void {\n if (request == null || typeof request !== 'object') return;\n const fields = request as Record<string, unknown>;\n const subscriptionOnlyFields = [\n 'subscriptionOffers',\n 'subscriptionProductReplacementParams',\n 'purchaseToken',\n 'originalExternalTransactionId',\n ];\n if (\n (type === 'in-app' &&\n subscriptionOnlyFields.some((field) => fields[field] != null)) ||\n (type === 'subs' && fields.offerToken != null)\n ) {\n throw createPurchaseError({\n code: ErrorCode.DeveloperError,\n message:\n 'Invalid request for Android. Purchase options must match the selected product type.',\n });\n }\n}\n\n/** Verify app acquisition; send Android integrity tokens to your backend. */\nexport const verifyAppOwnership: QueryField<'verifyAppOwnership'> = async (\n options,\n) => {\n if (\n isVegaOS() ||\n ExpoIapModule.USING_ONSIDE_SDK ||\n (Platform.OS !== 'ios' && Platform.OS !== 'android')\n ) {\n return {\n status: 'unknown',\n reason: 'unsupported',\n storeId: isVegaOS()\n ? 'amazon'\n : ExpoIapModule.USING_ONSIDE_SDK\n ? 'onside'\n : 'unknown',\n };\n }\n return invokeNativeWithPurchaseError(\n () => ExpoIapModule.verifyAppOwnership(options ?? {}),\n nativePlatform(),\n {\n code: ErrorCode.ServiceError,\n },\n );\n};\n\n/**\n * Initiate a purchase or subscription flow. The result arrives through\n * `purchaseUpdatedListener` / `purchaseErrorListener` (or `useIAP`'s\n * `onPurchaseSuccess` / `onPurchaseError`), not the return value.\n *\n * @param args `RequestPurchaseProps`, discriminated by `type`:\n * - `type: 'in-app'` — pass `request.apple.sku` (iOS) and/or `request.google.skus` (Android).\n * - `type: 'subs'` — same shape, plus `request.google.subscriptionOffers: [{ sku, offerToken }]`.\n * @returns The dispatched purchase payload; do not rely on it for the outcome.\n * @throws Synchronous rejection from the store (e.g. `ErrorCode.NotPrepared`, validation failure).\n *\n * @example\n * ```ts\n * await requestPurchase({\n * request: {\n * apple: { sku: 'com.app.premium' },\n * google: { skus: ['com.app.premium'] },\n * },\n * type: 'in-app',\n * });\n * ```\n *\n * @see {@link https://openiap.dev/docs/apis/request-purchase}\n */\nexport const requestPurchase: MutationField<'requestPurchase'> = async (\n args,\n) => {\n const {request} = args;\n markRequested([request.apple?.sku, ...(request.google?.skus ?? [])]);\n try {\n return await requestPurchaseFromStore(args);\n } catch (error) {\n clearRequested();\n throw error;\n }\n};\n\nconst requestPurchaseFromStore: MutationField<'requestPurchase'> = async (\n args,\n) => {\n const {request, type} = args;\n const {canonical, native} = normalizeProductType(type as ProductTypeInput);\n if (canonical === 'all') {\n throw createPurchaseError({\n code: ErrorCode.DeveloperError,\n message: 'Product type all is only supported for product queries.',\n });\n }\n const isInAppPurchase = canonical === 'in-app';\n\n if (Platform.OS === 'ios') {\n const normalizedRequest = normalizeRequestProps(request, 'ios');\n\n if (!normalizedRequest?.sku) {\n throw createPurchaseError({\n message:\n 'Invalid request for Apple. The `sku` property is required and must be a string.\\n\\n' +\n 'Expected format:\\n' +\n ' requestPurchase({\\n' +\n ' request: {\\n' +\n ' apple: { sku: \"product_id\" },\\n' +\n ' google: { skus: [\"product_id\"] }\\n' +\n ' },\\n' +\n ' type: \"in-app\"\\n' +\n ' })\\n\\n' +\n 'See: https://openiap.dev/docs/apis/request-purchase',\n code: ErrorCode.EmptySkuList,\n });\n }\n\n if (canonical !== 'in-app' && canonical !== 'subs') {\n throw new Error(`Unsupported product type: ${canonical}`);\n }\n\n const payload: MutationRequestPurchaseArgs = {\n type: canonical === 'in-app' ? 'in-app' : 'subs',\n request: {apple: normalizedRequest},\n };\n\n const purchase = (await invokeNativeWithPurchaseError(\n () => ExpoIapModule.requestPurchase(payload),\n 'ios',\n {\n code: ErrorCode.PurchaseError,\n message: 'Failed to request purchase',\n productId: normalizedRequest.sku,\n productIds: [normalizedRequest.sku],\n productType: canonical,\n },\n )) as Purchase | Purchase[] | null;\n\n if (Array.isArray(purchase)) {\n return purchase;\n }\n\n if (purchase) {\n return purchase;\n }\n\n return canonical === 'subs' ? [] : null;\n }\n\n if (isAndroidStoreRuntime()) {\n validateAndroidPurchaseBranchOptions(\n (\n request as\n | RequestPurchasePropsByPlatforms\n | RequestSubscriptionPropsByPlatforms\n )?.google,\n canonical,\n );\n if (isInAppPurchase) {\n const normalizedRequest = normalizeRequestProps(\n request as RequestPurchasePropsByPlatforms,\n 'android',\n ) as RequestPurchaseAndroidProps | null | undefined;\n\n if (!normalizedRequest?.skus?.length) {\n throw createPurchaseError({\n message:\n 'Invalid request for Google. The `skus` property is required and must be a non-empty array.\\n\\n' +\n 'Expected format:\\n' +\n ' requestPurchase({\\n' +\n ' request: {\\n' +\n ' apple: { sku: \"product_id\" },\\n' +\n ' google: { skus: [\"product_id\"] }\\n' +\n ' },\\n' +\n ' type: \"in-app\"\\n' +\n ' })\\n\\n' +\n 'See: https://openiap.dev/docs/apis/request-purchase',\n code: ErrorCode.EmptySkuList,\n });\n }\n\n const {\n skus,\n obfuscatedAccountId,\n obfuscatedProfileId,\n isOfferPersonalized,\n offerToken,\n developerBillingOption,\n } = normalizedRequest;\n\n const result = (await invokeNativeWithPurchaseError(\n () =>\n ExpoIapModule.requestPurchase({\n type: native,\n skus,\n purchaseToken: undefined,\n obfuscatedAccountId: obfuscatedAccountId,\n obfuscatedProfileId: obfuscatedProfileId,\n offerToken: offerToken,\n developerBillingOption: developerBillingOption ?? undefined,\n isOfferPersonalized: isOfferPersonalized ?? false,\n }),\n 'android',\n {\n code: ErrorCode.PurchaseError,\n message: 'Failed to request purchase',\n productId: skus[0],\n productIds: skus,\n productType: canonical,\n },\n )) as Purchase[];\n\n return result;\n }\n\n if (canonical === 'subs') {\n const normalizedRequest = normalizeRequestProps(\n request as RequestSubscriptionPropsByPlatforms,\n 'android',\n ) as RequestSubscriptionAndroidProps | null | undefined;\n\n if (!normalizedRequest?.skus?.length) {\n throw createPurchaseError({\n message:\n 'Invalid request for Google. The `skus` property is required and must be a non-empty array.\\n\\n' +\n 'Expected format:\\n' +\n ' requestPurchase({\\n' +\n ' request: {\\n' +\n ' apple: { sku: \"subscription_id\" },\\n' +\n ' google: { skus: [\"subscription_id\"] }\\n' +\n ' },\\n' +\n ' type: \"subs\"\\n' +\n ' })\\n\\n' +\n 'See: https://openiap.dev/docs/apis/request-purchase',\n code: ErrorCode.EmptySkuList,\n });\n }\n\n const {\n skus,\n obfuscatedAccountId,\n obfuscatedProfileId,\n isOfferPersonalized,\n subscriptionOffers,\n purchaseToken: purchaseTokenInput,\n originalExternalTransactionId,\n developerBillingOption,\n subscriptionProductReplacementParams,\n } = normalizedRequest;\n\n const normalizedOffers = subscriptionOffers ?? [];\n const purchaseToken = purchaseTokenInput ?? undefined;\n\n const result = (await invokeNativeWithPurchaseError(\n () =>\n ExpoIapModule.requestPurchase({\n type: native,\n skus,\n purchaseToken,\n originalExternalTransactionId:\n originalExternalTransactionId ?? undefined,\n obfuscatedAccountId: obfuscatedAccountId,\n obfuscatedProfileId: obfuscatedProfileId,\n subscriptionOffers: normalizedOffers,\n isOfferPersonalized: isOfferPersonalized ?? false,\n developerBillingOption: developerBillingOption ?? undefined,\n subscriptionProductReplacementParams:\n subscriptionProductReplacementParams ?? undefined,\n }),\n 'android',\n {\n code: ErrorCode.PurchaseError,\n message: 'Failed to request purchase',\n productId: skus[0],\n productIds: skus,\n productType: canonical,\n },\n )) as Purchase[];\n\n return result;\n }\n\n throw new Error(\n \"Invalid request for Android: Expected a valid request object with 'skus' array.\",\n );\n }\n\n throw unsupportedPlatformError();\n};\n\n/**\n * Complete a purchase transaction. Call after server-side verification to remove it\n * from the queue.\n *\n * @param args.purchase The `Purchase` to finalize.\n * @param args.isConsumable `true` for consumables (consumes the token so the SKU can be\n * re-bought, e.g. coins); `false` (default) for non-consumables and subscriptions.\n * @returns Promise that resolves once the platform finalizes the transaction.\n * @throws When the platform finalize call fails.\n *\n * @example\n * ```ts\n * // Inside purchaseUpdatedListener:\n * if (await verifyOnServer(purchase)) {\n * await finishTransaction({ purchase, isConsumable: false });\n * }\n * ```\n *\n * @remarks Android purchases must be finalized within 3 days or Google\n * auto-refunds. iOS unfinished transactions replay on every app launch.\n *\n * @see {@link https://openiap.dev/docs/apis/finish-transaction}\n */\nexport const finishTransaction: MutationField<'finishTransaction'> = async ({\n purchase,\n isConsumable,\n}) => {\n // The schema allows explicit null; the native boolean cannot take it.\n const consumable = isConsumable ?? false;\n const platform = nativePlatform();\n if (\n Platform.OS === 'ios' ||\n (isAndroidStoreRuntime() && purchase.store === 'unknown')\n ) {\n await invokeNativeWithPurchaseError(\n () => ExpoIapModule.finishTransaction(purchase, consumable),\n platform,\n {productId: purchase.productId},\n );\n } else if (isAndroidStoreRuntime()) {\n const token = purchase.purchaseToken ?? undefined;\n\n if (!token) {\n throw createPurchaseError({\n message: 'Purchase token is required to finish transaction',\n code: ErrorCode.DeveloperError,\n productId: purchase.productId,\n platform: 'android',\n });\n }\n\n // Native rejects when the store refuses the token, so a failure cannot pass as finished.\n await invokeNativeWithPurchaseError(\n () =>\n consumable\n ? ExpoIapModule.consumePurchaseAndroid(token)\n : ExpoIapModule.acknowledgePurchaseAndroid(token),\n 'android',\n {productId: purchase.productId},\n );\n } else {\n throw unsupportedPlatformError();\n }\n\n showFirstPurchaseNotice(purchase);\n};\n\n/**\n * Restore completed transactions. Returns nothing; read the restored items with\n * `getAvailablePurchases` or from hook state.\n *\n * - iOS: sync (or Onside restore when OnsideKit is active), then fetch available purchases.\n * - Android: run the provider's restore, then fetch available purchases.\n *\n * @see {@link https://openiap.dev/docs/apis/restore-purchases}\n */\nexport const restorePurchases: MutationField<'restorePurchases'> = async () => {\n await restorePurchasesNative();\n\n await getAvailablePurchases({\n alsoPublishToEventListenerIOS: false,\n onlyIncludeActiveItemsIOS: true,\n });\n};\n\n/**\n * Deeplinks to native interface that allows users to manage their subscriptions\n * @param options.skuAndroid - Required for Android to locate specific subscription (ignored on iOS)\n * @param options.packageNameAndroid - Required for Android to identify your app (ignored on iOS)\n *\n * @returns Promise that resolves when the deep link is successfully opened\n *\n * @throws {Error} When called on unsupported platform or when required Android parameters are missing\n *\n * @example\n * import { deepLinkToSubscriptions } from 'expo-iap';\n *\n * // Works on both iOS and Android\n * await deepLinkToSubscriptions({\n * skuAndroid: 'your_subscription_sku',\n * packageNameAndroid: 'com.example.app'\n * });\n *\n * @see {@link https://openiap.dev/docs/apis/deep-link-to-subscriptions}\n */\nexport const deepLinkToSubscriptions: MutationField<\n 'deepLinkToSubscriptions'\n> = async (options) => {\n if (Platform.OS === 'ios') {\n await deepLinkToSubscriptionsIOS();\n return;\n }\n\n if (Platform.OS === 'android') {\n await deepLinkToSubscriptionsAndroid((options as DeepLinkOptions) ?? null);\n return;\n }\n\n throw unsupportedPlatformError();\n};\n\n/**\n * Open the platform's offer/promo code redemption flow.\n *\n * Resolves the redeemed purchase only when the store reports it synchronously;\n * every other path resolves null, so reconcile with `getAvailablePurchases`\n * when the app resumes.\n *\n * @returns Promise resolving to the redeemed purchase, or null\n * @throws Error when a redemption flow exists but cannot be opened\n *\n * @see {@link https://openiap.dev/docs/apis/open-redeem-offer-code}\n */\nexport const openRedeemOfferCode: MutationField<\n 'openRedeemOfferCode'\n> = async () => {\n if (isVegaOS()) return null;\n if (Platform.OS !== 'ios' && !isAndroidStoreRuntime()) {\n throw unsupportedPlatformError();\n }\n return invokeNativeWithPurchaseError(\n () => ExpoIapModule.openRedeemOfferCode(),\n nativePlatform(),\n {code: ErrorCode.PurchaseError, message: 'Failed to redeem offer code.'},\n );\n};\n\n/**\n * Verify purchase with the configured providers.\n *\n * @param options - Receipt validation options containing the SKU\n * @returns Promise resolving to receipt validation result\n *\n * @see {@link https://openiap.dev/docs/features/validation#verify-purchase}\n */\nexport const verifyPurchase: MutationField<'verifyPurchase'> = async (\n options,\n) => {\n if (!isStorePlatform()) {\n throw unsupportedPlatformError();\n }\n\n // The native result is already the flat union member, with `__typename`.\n return invokeNativeWithPurchaseError(\n () => ExpoIapModule.verifyPurchase(options),\n nativePlatform(),\n );\n};\n\n/**\n * Verify purchase with a specific provider (e.g., IAPKit).\n *\n * @param options - Verification options including provider and credentials\n * @returns Promise resolving to provider-specific verification result\n *\n * @example\n * ```typescript\n * const result = await verifyPurchaseWithProvider({\n * provider: 'iapkit',\n * iapkit: {\n * apiKey: 'your-api-key',\n * // Choose exactly one store payload.\n * // apple: { jws: purchase.purchaseToken },\n * // google: { purchaseToken: purchase.purchaseToken },\n * amazon: {\n * expectedProductId: purchase.productId,\n * userId: amazonUserId,\n * receiptId: purchase.purchaseToken,\n * // Enable only for App Tester after the IAPKit project opt-in.\n * sandbox: amazonSandboxEnabled,\n * }\n * }\n * });\n * ```\n *\n * @see {@link https://openiap.dev/docs/features/validation#verify-purchase-with-provider}\n */\nexport const verifyPurchaseWithProvider: MutationField<\n 'verifyPurchaseWithProvider'\n> = async (options) => {\n if (!isStoreRuntime()) {\n throw unsupportedPlatformError();\n }\n\n let resolvedOptions = options;\n\n if (\n resolvedOptions.provider === 'iapkit' &&\n resolvedOptions.iapkit &&\n !resolvedOptions.iapkit.apiKey\n ) {\n let configApiKey: unknown;\n try {\n // Dynamically import expo-constants to avoid hard dependency\n const {default: Constants} = await import('expo-constants');\n configApiKey = Constants.expoConfig?.extra?.iapkitApiKey;\n } catch (error) {\n throw new Error(\n 'Could not read iapkitApiKey from expo-constants. Install it with ' +\n '`npx expo install expo-constants`, or pass apiKey in ' +\n 'verifyPurchaseWithProvider options.',\n {cause: error},\n );\n }\n if (typeof configApiKey === 'string' && configApiKey.length > 0) {\n resolvedOptions = {\n ...resolvedOptions,\n iapkit: {\n ...resolvedOptions.iapkit,\n apiKey: configApiKey,\n },\n };\n }\n }\n\n const result = await invokeNativeWithPurchaseError(\n () => ExpoIapModule.verifyPurchaseWithProvider(resolvedOptions),\n nativePlatform(),\n );\n if (result.iapkit == null) {\n return result;\n }\n\n const {clientPayload, productId, ...iapkit} = result.iapkit;\n return {\n ...result,\n iapkit: {\n ...iapkit,\n storeId: resolveStoreId(iapkit.storeId, iapkit.store),\n ...(clientPayload == null ? {} : {clientPayload}),\n ...(productId == null ? {} : {productId}),\n },\n };\n};\n\nexport type {SdkPurchaseFlowOptions} from './utils/purchaseFlowBinding';\n\nconst purchaseFlowSdk: PurchaseFlowSdk = {\n finishTransaction: (args) => finishTransaction(args),\n getAvailablePurchases: () => getAvailablePurchases(),\n getPendingTransactionsIOS:\n Platform.OS === 'ios' ? () => getPendingTransactionsIOS() : undefined,\n purchaseUpdatedListener: (listener) =>\n purchaseUpdatedListener(listener, {dedupeTransactionIOS: false}),\n purchaseErrorListener: (listener) => purchaseErrorListener(listener),\n};\n\n/**\n * Creates the app's purchase flow. It confirms and finishes every purchase the\n * store delivers, and recovers unfinished ones, through this SDK. Create one\n * per signed-in account, dispose it when the account changes, and pass it to\n * `useIAP({purchaseFlow})`.\n * @see {@link https://kit.openiap.dev/docs/purchase-flow}\n */\nexport function createPurchaseFlow(\n options: SdkPurchaseFlowOptions,\n): PurchaseFlow<Purchase>;\nexport function createPurchaseFlow<P extends PurchaseFlowPurchase>(\n options: PurchaseFlowOptions<P>,\n): PurchaseFlow<P>;\nexport function createPurchaseFlow(\n options: SdkPurchaseFlowOptions,\n): PurchaseFlow<Purchase> {\n return createSdkPurchaseFlow(purchaseFlowSdk, options);\n}\n\n/**\n * Confirms purchases with IAPKit from the app, for apps without a backend:\n * pass it as `confirmWithBackend` with a publishable key. Credit consumables\n * in `grant`, which runs before the purchase is consumed.\n */\nexport function confirmWithIapkit(\n options: IapkitConfirmationOptions<Purchase>,\n): (\n purchase: Purchase,\n context: {isConsumable: boolean},\n) => Promise<PurchaseConfirmation> {\n return createIapkitConfirmation(verifyPurchaseWithProvider, options);\n}\n\n/**\n * Confirms App Store purchases on the device, for apps with neither a backend\n * nor IAPKit: StoreKit must still list the transaction as unfinished and\n * valid. Credit consumables in `grant`.\n */\nexport function confirmOnDeviceIOS(\n options: Pick<IapkitConfirmationOptions<Purchase>, 'grant'> = {},\n): (\n purchase: Purchase,\n context: {isConsumable: boolean},\n) => Promise<PurchaseConfirmation> {\n return createDeviceConfirmationIOS<Purchase>(\n () => getPendingTransactionsIOS(),\n options,\n );\n}\n\nexport * from './useIAP';\nexport {kitApi, KitApiError, resolveLocalizedPayload} from './kit-api';\nexport type {\n KitApiOptions,\n KitClientPayloadCache,\n KitClientPayloadOptions,\n KitClientPayloadResponse,\n KitLocalizedClientPayload,\n KitLocalizedClientPayloadOptions,\n KitLocalizedPayloadOptions,\n KitProduct,\n KitProductClientPayload,\n KitProductOffer,\n KitProductPlatform,\n KitProductsOptions,\n KitProductsResponse,\n KitSubscription,\n EntitlementsResponse,\n StatusResponse,\n} from './kit-api';\nexport {\n describePurchaseFlowStatus,\n toPurchaseConfirmationRequest,\n} from './purchase-flow';\nexport type {\n IapkitConfirmationOptions,\n PurchaseConfirmation,\n PurchaseConfirmationRequest,\n PurchaseFlow,\n PurchaseFlowGuidance,\n PurchaseFlowGuidanceKey,\n PurchaseFlowOptions,\n PurchaseFlowOutcome,\n PurchaseFlowPurchase,\n PurchaseFlowStatus,\n RecoverPurchasesOptions,\n} from './purchase-flow';\nexport {\n ErrorCodeUtils,\n ErrorCodeMapping,\n createPurchaseError,\n createPurchaseErrorFromPlatform,\n getUserFriendlyErrorMessage,\n isUserCancelledError,\n} from './utils/errorMapping';\nexport type {\n PurchaseError as ExpoPurchaseError,\n PurchaseErrorProps,\n} from './utils/errorMapping';\nexport {ExpoIapConsole} from './utils/debug';\n"]}
@@ -1,9 +1,14 @@
1
+ import { type IapkitConfirmationOptions, type PurchaseConfirmation, type PurchaseFlow, type PurchaseFlowOptions, type PurchaseFlowPurchase } from './purchase-flow';
2
+ import { type SdkPurchaseFlowOptions } from './utils/purchaseFlowBinding';
1
3
  import type { MutationField, ProductQueryType, ProductRequest, Purchase, PurchaseError, PurchaseUpdatedListenerOptions, QueryField } from './types';
2
4
  export * from './types';
3
5
  export * from './vega';
4
6
  export * from './useIAP';
5
7
  export { kitApi, KitApiError, resolveLocalizedPayload } from './kit-api';
6
8
  export type { EntitlementsResponse, KitApiOptions, KitClientPayloadCache, KitClientPayloadOptions, KitClientPayloadResponse, KitLocalizedClientPayload, KitLocalizedClientPayloadOptions, KitLocalizedPayloadOptions, KitProduct, KitProductClientPayload, KitProductOffer, KitProductPlatform, KitProductsOptions, KitProductsResponse, KitSubscription, StatusResponse, } from './kit-api';
9
+ export { describePurchaseFlowStatus, toPurchaseConfirmationRequest, } from './purchase-flow';
10
+ export type { IapkitConfirmationOptions, PurchaseConfirmation, PurchaseConfirmationRequest, PurchaseFlow, PurchaseFlowGuidance, PurchaseFlowGuidanceKey, PurchaseFlowOptions, PurchaseFlowOutcome, PurchaseFlowPurchase, PurchaseFlowStatus, RecoverPurchasesOptions, } from './purchase-flow';
11
+ export type { SdkPurchaseFlowOptions } from './utils/purchaseFlowBinding';
7
12
  export declare enum OpenIapEvent {
8
13
  PurchaseUpdated = "purchase-updated",
9
14
  PurchaseError = "purchase-error",
@@ -56,4 +61,20 @@ export declare const launchExternalLinkAndroid: MutationField<'launchExternalLin
56
61
  export declare const createBillingProgramReportingDetailsAndroid: MutationField<'createBillingProgramReportingDetailsAndroid'>;
57
62
  export declare const showBillingProgramInformationDialogAndroid: MutationField<'showBillingProgramInformationDialogAndroid'>;
58
63
  export declare const showInAppMessagesAndroid: MutationField<'showInAppMessagesAndroid'>;
64
+ /**
65
+ * Creates the app's purchase flow on Amazon Vega. Create one per signed-in
66
+ * account, dispose it when the account changes, and pass it to
67
+ * `useIAP({purchaseFlow})`.
68
+ * @see {@link https://kit.openiap.dev/docs/purchase-flow}
69
+ */
70
+ export declare function createPurchaseFlow(options: SdkPurchaseFlowOptions): PurchaseFlow<Purchase>;
71
+ export declare function createPurchaseFlow<P extends PurchaseFlowPurchase>(options: PurchaseFlowOptions<P>): PurchaseFlow<P>;
72
+ /**
73
+ * Confirms purchases with IAPKit from the app, for apps without a backend:
74
+ * pass it as `confirmWithBackend` with a publishable key. Credit consumables
75
+ * in `grant`, which runs before the purchase is consumed.
76
+ */
77
+ export declare function confirmWithIapkit(options: IapkitConfirmationOptions<Purchase>): (purchase: Purchase, context: {
78
+ isConsumable: boolean;
79
+ }) => Promise<PurchaseConfirmation>;
59
80
  //# sourceMappingURL=index.kepler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.kepler.d.ts","sourceRoot":"","sources":["../src/index.kepler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.kepler.d.ts","sourceRoot":"","sources":["../src/index.kepler.ts"],"names":[],"mappings":"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"}