expo-iap 6.3.0 → 6.4.1
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 +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/index.kepler.d.ts +1 -0
- package/build/index.kepler.d.ts.map +1 -1
- package/build/index.kepler.js +1 -0
- package/build/index.kepler.js.map +1 -1
- package/build/purchase-flow-confirmers.d.ts +2 -0
- package/build/purchase-flow-confirmers.d.ts.map +1 -1
- package/build/purchase-flow-confirmers.js +12 -3
- package/build/purchase-flow-confirmers.js.map +1 -1
- package/bun.lock +2 -1
- package/openiap-versions.json +3 -3
- package/osv-scanner.toml +13 -3
- package/package.json +3 -2
- package/src/index.kepler.ts +1 -0
- package/src/index.ts +1 -0
- package/src/purchase-flow-confirmers.ts +20 -3
package/build/index.d.ts
CHANGED
|
@@ -442,7 +442,7 @@ export type { KitApiOptions, KitClientPayloadCache, KitClientPayloadOptions, Kit
|
|
|
442
442
|
export { describePurchaseFlowStatus, toPurchaseConfirmationRequest, } from './purchase-flow-core';
|
|
443
443
|
export type { PurchaseConfirmation, PurchaseConfirmationRequest, PurchaseFlow, PurchaseFlowGuidance, PurchaseFlowGuidanceKey, PurchaseFlowOptions, PurchaseFlowOutcome, PurchaseFlowPurchase, PurchaseFlowStatus, RecoverPurchasesOptions, } from './purchase-flow-core';
|
|
444
444
|
export type { IapkitConfirmationOptions } from './purchase-flow-confirmers';
|
|
445
|
-
export { ErrorCodeUtils, ErrorCodeMapping, createPurchaseError, createPurchaseErrorFromPlatform, getUserFriendlyErrorMessage, isUserCancelledError, } from './utils/errorMapping';
|
|
445
|
+
export { ErrorCodeUtils, ErrorCodeMapping, createPurchaseError, createPurchaseErrorFromPlatform, getUserFriendlyErrorMessage, isRecoverableError, isUserCancelledError, } from './utils/errorMapping';
|
|
446
446
|
export type { PurchaseError as ExpoPurchaseError, PurchaseErrorProps, } from './utils/errorMapping';
|
|
447
447
|
export { ExpoIapConsole } from './utils/debug';
|
|
448
448
|
//# sourceMappingURL=index.d.ts.map
|
package/build/index.d.ts.map
CHANGED
|
@@ -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
|
@@ -1058,6 +1058,6 @@ export function confirmOnDeviceIOS(options = {}) {
|
|
|
1058
1058
|
export * from './useIAP';
|
|
1059
1059
|
export { kitApi, KitApiError, resolveLocalizedPayload } from './kit-api';
|
|
1060
1060
|
export { describePurchaseFlowStatus, toPurchaseConfirmationRequest, } from './purchase-flow-core';
|
|
1061
|
-
export { ErrorCodeUtils, ErrorCodeMapping, createPurchaseError, createPurchaseErrorFromPlatform, getUserFriendlyErrorMessage, isUserCancelledError, } from './utils/errorMapping';
|
|
1061
|
+
export { ErrorCodeUtils, ErrorCodeMapping, createPurchaseError, createPurchaseErrorFromPlatform, getUserFriendlyErrorMessage, isRecoverableError, isUserCancelledError, } from './utils/errorMapping';
|
|
1062
1062
|
export { ExpoIapConsole } from './utils/debug';
|
|
1063
1063
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -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 {\n deepLinkToSubscriptionsIOS,\n getPendingTransactionsIOS,\n isProductIOS,\n} from './modules/ios';\nimport {\n type PurchaseFlow,\n type PurchaseFlowOptions,\n type PurchaseFlowPurchase,\n} from './purchase-flow-core';\nimport {\n createDeviceConfirmationIOS,\n createIapkitConfirmation,\n type IapkitConfirmationOptions,\n} from './purchase-flow-confirmers';\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): PurchaseFlowOptions<Purchase>['confirmWithBackend'] {\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: {\n /** Required for consumables; credit each purchase.id only once. */\n grant?: (\n purchase: Purchase,\n context: {isConsumable: boolean},\n ) => Promise<void>;\n } = {},\n): PurchaseFlowOptions<Purchase>['confirmWithBackend'] {\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-core';\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-core';\nexport type {IapkitConfirmationOptions} from './purchase-flow-confirmers';\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 type PurchaseFlow,\n type PurchaseFlowOptions,\n type PurchaseFlowPurchase,\n} from './purchase-flow-core';\nimport {\n createDeviceConfirmationIOS,\n createIapkitConfirmation,\n type IapkitConfirmationOptions,\n} from './purchase-flow-confirmers';\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): PurchaseFlowOptions<Purchase>['confirmWithBackend'] {\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: {\n /** Required for consumables; credit each purchase.id only once. */\n grant?: (\n purchase: Purchase,\n context: {isConsumable: boolean},\n ) => Promise<void>;\n } = {},\n): PurchaseFlowOptions<Purchase>['confirmWithBackend'] {\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-core';\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-core';\nexport type {IapkitConfirmationOptions} from './purchase-flow-confirmers';\nexport {\n ErrorCodeUtils,\n ErrorCodeMapping,\n createPurchaseError,\n createPurchaseErrorFromPlatform,\n getUserFriendlyErrorMessage,\n isRecoverableError,\n isUserCancelledError,\n} from './utils/errorMapping';\nexport type {\n PurchaseError as ExpoPurchaseError,\n PurchaseErrorProps,\n} from './utils/errorMapping';\nexport {ExpoIapConsole} from './utils/debug';\n"]}
|
package/build/index.kepler.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { type IapkitConfirmationOptions } from './purchase-flow-confirmers';
|
|
|
3
3
|
import { type SdkPurchaseFlowOptions } from './utils/purchaseFlowBinding';
|
|
4
4
|
import type { MutationField, ProductQueryType, ProductRequest, Purchase, PurchaseError, PurchaseUpdatedListenerOptions, QueryField } from './types';
|
|
5
5
|
export * from './types';
|
|
6
|
+
export { isRecoverableError } from './utils/errorMapping';
|
|
6
7
|
export * from './vega';
|
|
7
8
|
export * from './useIAP';
|
|
8
9
|
export { kitApi, KitApiError, resolveLocalizedPayload } from './kit-api';
|
|
@@ -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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"}
|
package/build/index.kepler.js
CHANGED
|
@@ -6,6 +6,7 @@ import { clearRequested, createSdkPurchaseFlow, markRequested, } from './utils/p
|
|
|
6
6
|
import { decodeAndroidPurchases } from './utils/availablePurchases';
|
|
7
7
|
import { createPurchaseError } from './utils/errorMapping';
|
|
8
8
|
export * from './types';
|
|
9
|
+
export { isRecoverableError } from './utils/errorMapping';
|
|
9
10
|
export * from './vega';
|
|
10
11
|
export * from './useIAP';
|
|
11
12
|
export { kitApi, KitApiError, resolveLocalizedPayload } from './kit-api';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.kepler.js","sourceRoot":"","sources":["../src/index.kepler.ts"],"names":[],"mappings":"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","sourcesContent":["import {getVegaIapModule} from './vega';\nimport {ErrorCode} from './types';\nimport {\n type PurchaseFlow,\n type PurchaseFlowOptions,\n type PurchaseFlowPurchase,\n} from './purchase-flow-core';\nimport {\n createIapkitConfirmation,\n type IapkitConfirmationOptions,\n} from './purchase-flow-confirmers';\nimport {\n clearRequested,\n createSdkPurchaseFlow,\n markRequested,\n type PurchaseFlowSdk,\n type SdkPurchaseFlowOptions,\n} from './utils/purchaseFlowBinding';\nimport type {\n MutationField,\n ProductQueryType,\n ProductRequest,\n Purchase,\n PurchaseError,\n PurchaseOptions,\n PurchaseUpdatedListenerOptions,\n QueryField,\n RequestPurchasePropsByPlatforms,\n RequestSubscriptionPropsByPlatforms,\n} from './types';\nimport {decodeAndroidPurchases} from './utils/availablePurchases';\nimport {createPurchaseError} from './utils/errorMapping';\n\nexport * from './types';\nexport * from './vega';\nexport * from './useIAP';\nexport {kitApi, KitApiError, resolveLocalizedPayload} from './kit-api';\nexport type {\n EntitlementsResponse,\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 StatusResponse,\n} from './kit-api';\nexport {\n describePurchaseFlowStatus,\n toPurchaseConfirmationRequest,\n} from './purchase-flow-core';\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-core';\nexport type {IapkitConfirmationOptions} from './purchase-flow-confirmers';\nexport type {SdkPurchaseFlowOptions} from './utils/purchaseFlowBinding';\n\nexport enum OpenIapEvent {\n PurchaseUpdated = 'purchase-updated',\n PurchaseError = 'purchase-error',\n PromotedProductIOS = 'promoted-product-ios',\n UserChoiceBillingAndroid = 'user-choice-billing-android',\n DeveloperProvidedBillingAndroid = 'developer-provided-billing-android',\n SubscriptionBillingIssue = 'subscription-billing-issue',\n}\n\nexport type ProductTypeInput = ProductQueryType;\n\nexport interface EventSubscription {\n remove(): void;\n}\n\nconst getModule = () => {\n const module = getVegaIapModule();\n if (!module) {\n throw new Error(\n 'Amazon Vega IAP module is unavailable. Install @amazon-devices/keplerscript-appstore-iap-lib in the Vega app target and build with the React Native for Vega kepler platform.',\n );\n }\n return module;\n};\n\nconst unsupported = (feature: string): never => {\n throw new Error(`${feature} is not supported on Amazon Vega.`);\n};\n\nconst normalizeProductType = (\n type?: ProductTypeInput | null,\n): ProductQueryType => {\n if (type == null || type === 'in-app') return 'in-app';\n if (type === 'subs' || type === 'all') return type;\n throw new Error(\n `Unsupported product type: ${String(type)}. Use in-app, subs, or all.`,\n );\n};\n\nconst normalizePurchaseArray = (purchases: Purchase[]): Purchase[] =>\n decodeAndroidPurchases(purchases);\n\nconst getAndroidRequest = (\n request?:\n | RequestPurchasePropsByPlatforms\n | RequestSubscriptionPropsByPlatforms\n | null,\n) => {\n return request?.google;\n};\n\nconst createPurchaseTokenError = (purchase: Purchase): Error => {\n const error = new Error(\n 'Purchase token is required to finish Amazon Vega transaction',\n ) as Error & PurchaseError;\n error.code = ErrorCode.DeveloperError;\n error.productId = purchase.productId;\n return error;\n};\n\nexport const emitter = {\n addListener(\n eventName: OpenIapEvent,\n listener: (payload: Purchase | PurchaseError) => void,\n ): EventSubscription {\n return getModule().addListener(eventName, listener);\n },\n removeListener(\n eventName: OpenIapEvent,\n listener: (payload: Purchase | PurchaseError) => void,\n ): void {\n return getModule().removeListener(eventName, listener);\n },\n};\n\nexport const purchaseUpdatedListener = (\n listener: (event: Purchase) => void,\n options?: PurchaseUpdatedListenerOptions | null,\n): EventSubscription => {\n return getModule().addListener(OpenIapEvent.PurchaseUpdated, (purchase) => {\n listener(purchase as Purchase);\n });\n};\n\nexport const purchaseErrorListener = (\n listener: (error: PurchaseError) => void,\n): EventSubscription => {\n return getModule().addListener(OpenIapEvent.PurchaseError, (error) => {\n listener(error as PurchaseError);\n });\n};\n\nexport const initConnection: MutationField<'initConnection'> = async (\n config,\n) => {\n return getModule().initConnection(config ?? null);\n};\n\nexport const endConnection: MutationField<'endConnection'> = async () => {\n return getModule().endConnection();\n};\n\nexport const fetchProducts = async (\n request: Omit<ProductRequest, 'type'> & {\n type?: ProductTypeInput | null;\n },\n): ReturnType<QueryField<'fetchProducts'>> => {\n const {skus, type} = request;\n return getModule().fetchProducts(normalizeProductType(type), skus);\n};\n\nexport const requestPurchase: MutationField<'requestPurchase'> = async (\n args,\n) => {\n markRequested(args.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 type = normalizeProductType(args.type);\n if (type === 'all') {\n throw createPurchaseError({\n code: ErrorCode.DeveloperError,\n message: 'Product type all is only supported for product queries.',\n });\n }\n const androidRequest = getAndroidRequest(args.request);\n if (!androidRequest?.skus?.length) {\n throw new Error(\n 'Invalid request for Amazon Vega. The `request.google.skus` property is required and must be a non-empty array.',\n );\n }\n\n return normalizePurchaseArray(\n await getModule().requestPurchase({\n skus: androidRequest.skus,\n type,\n }),\n );\n};\n\nexport const getAvailablePurchases: QueryField<\n 'getAvailablePurchases'\n> = async (options) => {\n return normalizePurchaseArray(\n await getModule().getAvailableItems((options ?? {}) as PurchaseOptions),\n );\n};\n\nexport const finishTransaction: MutationField<'finishTransaction'> = async ({\n purchase,\n isConsumable = false,\n}) => {\n const token = purchase.purchaseToken ?? undefined;\n if (!token) {\n throw createPurchaseTokenError(purchase);\n }\n\n if (isConsumable) {\n await getModule().consumePurchaseAndroid(token);\n return;\n }\n\n await getModule().acknowledgePurchaseAndroid(token);\n};\n\nexport const restorePurchases: MutationField<'restorePurchases'> = async () => {\n await getAvailablePurchases({\n includeSuspendedAndroid: false,\n });\n};\n\nexport const getActiveSubscriptions: QueryField<\n 'getActiveSubscriptions'\n> = async (subscriptionIds) => {\n return getModule().getActiveSubscriptions(subscriptionIds ?? null);\n};\n\nexport const hasActiveSubscriptions: QueryField<\n 'hasActiveSubscriptions'\n> = async (subscriptionIds) => {\n return getModule().hasActiveSubscriptions(subscriptionIds ?? null);\n};\n\nexport const getStorefront: QueryField<'getStorefront'> = async () => {\n return getModule().getStorefront();\n};\n\nexport const verifyPurchaseWithProvider: MutationField<\n 'verifyPurchaseWithProvider'\n> = async (options) => {\n return getModule().verifyPurchaseWithProvider(options);\n};\n\nexport const verifyPurchase: MutationField<'verifyPurchase'> = async () =>\n unsupported('verifyPurchase');\n\nexport const acknowledgePurchaseAndroid: MutationField<\n 'acknowledgePurchaseAndroid'\n> = async (purchaseToken) => {\n await getModule().acknowledgePurchaseAndroid(purchaseToken);\n return true;\n};\n\nexport const consumePurchaseAndroid: MutationField<\n 'consumePurchaseAndroid'\n> = async (purchaseToken) => {\n await getModule().consumePurchaseAndroid(purchaseToken);\n return true;\n};\n\nexport const syncIOS: MutationField<'syncIOS'> = async () =>\n unsupported('syncIOS');\nexport const verifyAppOwnership: QueryField<\n 'verifyAppOwnership'\n> = async () => ({status: 'unknown', reason: 'unsupported', storeId: 'amazon'});\n\nexport const getAppTransactionIOS: QueryField<\n 'getAppTransactionIOS'\n> = async () => null;\nexport const getPromotedProductIOS: QueryField<\n 'getPromotedProductIOS'\n> = async () => null;\n\nexport const showManageSubscriptionsIOS: MutationField<\n 'showManageSubscriptionsIOS'\n> = async () => [];\nexport const presentExternalPurchaseLinkIOS: MutationField<\n 'presentExternalPurchaseLinkIOS'\n> = async () => unsupported('presentExternalPurchaseLinkIOS');\n\nexport const deepLinkToSubscriptions: MutationField<\n 'deepLinkToSubscriptions'\n> = async () => unsupported('deepLinkToSubscriptions');\n// Vega has no offer-code redemption surface; resolve null without launching.\nexport const openRedeemOfferCode: MutationField<\n 'openRedeemOfferCode'\n> = async () => null;\n\nexport const promotedProductListenerIOS = (): EventSubscription => ({\n remove: () => {},\n});\nexport const userChoiceBillingListenerAndroid = (): EventSubscription => ({\n remove: () => {},\n});\nexport const developerProvidedBillingListenerAndroid =\n (): EventSubscription => ({\n remove: () => {},\n });\nexport const subscriptionBillingIssueListener = (): EventSubscription => ({\n remove: () => {},\n});\n\nexport const isBillingProgramAvailableAndroid: MutationField<\n 'isBillingProgramAvailableAndroid'\n> = async () => unsupported('isBillingProgramAvailableAndroid');\nexport const getBillingChoiceInfoAndroid: QueryField<\n 'getBillingChoiceInfoAndroid'\n> = async () => unsupported('getBillingChoiceInfoAndroid');\nexport const launchExternalLinkAndroid: MutationField<\n 'launchExternalLinkAndroid'\n> = async () => unsupported('launchExternalLinkAndroid');\nexport const createBillingProgramReportingDetailsAndroid: MutationField<\n 'createBillingProgramReportingDetailsAndroid'\n> = async () => unsupported('createBillingProgramReportingDetailsAndroid');\nexport const showBillingProgramInformationDialogAndroid: MutationField<\n 'showBillingProgramInformationDialogAndroid'\n> = async () => unsupported('showBillingProgramInformationDialogAndroid');\nexport const showInAppMessagesAndroid: MutationField<\n 'showInAppMessagesAndroid'\n> = async () => unsupported('showInAppMessagesAndroid');\n\nconst purchaseFlowSdk: PurchaseFlowSdk = {\n finishTransaction: (args) => finishTransaction(args),\n getAvailablePurchases: () => getAvailablePurchases(),\n getPendingTransactionsIOS: undefined,\n purchaseUpdatedListener: (listener) => purchaseUpdatedListener(listener),\n purchaseErrorListener: (listener) => purchaseErrorListener(listener),\n};\n\n/**\n * Creates the app's purchase flow on Amazon Vega. Create one per signed-in\n * 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): PurchaseFlowOptions<Purchase>['confirmWithBackend'] {\n return createIapkitConfirmation(verifyPurchaseWithProvider, options);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.kepler.js","sourceRoot":"","sources":["../src/index.kepler.ts"],"names":[],"mappings":"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","sourcesContent":["import {getVegaIapModule} from './vega';\nimport {ErrorCode} from './types';\nimport {\n type PurchaseFlow,\n type PurchaseFlowOptions,\n type PurchaseFlowPurchase,\n} from './purchase-flow-core';\nimport {\n createIapkitConfirmation,\n type IapkitConfirmationOptions,\n} from './purchase-flow-confirmers';\nimport {\n clearRequested,\n createSdkPurchaseFlow,\n markRequested,\n type PurchaseFlowSdk,\n type SdkPurchaseFlowOptions,\n} from './utils/purchaseFlowBinding';\nimport type {\n MutationField,\n ProductQueryType,\n ProductRequest,\n Purchase,\n PurchaseError,\n PurchaseOptions,\n PurchaseUpdatedListenerOptions,\n QueryField,\n RequestPurchasePropsByPlatforms,\n RequestSubscriptionPropsByPlatforms,\n} from './types';\nimport {decodeAndroidPurchases} from './utils/availablePurchases';\nimport {createPurchaseError} from './utils/errorMapping';\n\nexport * from './types';\nexport {isRecoverableError} from './utils/errorMapping';\nexport * from './vega';\nexport * from './useIAP';\nexport {kitApi, KitApiError, resolveLocalizedPayload} from './kit-api';\nexport type {\n EntitlementsResponse,\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 StatusResponse,\n} from './kit-api';\nexport {\n describePurchaseFlowStatus,\n toPurchaseConfirmationRequest,\n} from './purchase-flow-core';\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-core';\nexport type {IapkitConfirmationOptions} from './purchase-flow-confirmers';\nexport type {SdkPurchaseFlowOptions} from './utils/purchaseFlowBinding';\n\nexport enum OpenIapEvent {\n PurchaseUpdated = 'purchase-updated',\n PurchaseError = 'purchase-error',\n PromotedProductIOS = 'promoted-product-ios',\n UserChoiceBillingAndroid = 'user-choice-billing-android',\n DeveloperProvidedBillingAndroid = 'developer-provided-billing-android',\n SubscriptionBillingIssue = 'subscription-billing-issue',\n}\n\nexport type ProductTypeInput = ProductQueryType;\n\nexport interface EventSubscription {\n remove(): void;\n}\n\nconst getModule = () => {\n const module = getVegaIapModule();\n if (!module) {\n throw new Error(\n 'Amazon Vega IAP module is unavailable. Install @amazon-devices/keplerscript-appstore-iap-lib in the Vega app target and build with the React Native for Vega kepler platform.',\n );\n }\n return module;\n};\n\nconst unsupported = (feature: string): never => {\n throw new Error(`${feature} is not supported on Amazon Vega.`);\n};\n\nconst normalizeProductType = (\n type?: ProductTypeInput | null,\n): ProductQueryType => {\n if (type == null || type === 'in-app') return 'in-app';\n if (type === 'subs' || type === 'all') return type;\n throw new Error(\n `Unsupported product type: ${String(type)}. Use in-app, subs, or all.`,\n );\n};\n\nconst normalizePurchaseArray = (purchases: Purchase[]): Purchase[] =>\n decodeAndroidPurchases(purchases);\n\nconst getAndroidRequest = (\n request?:\n | RequestPurchasePropsByPlatforms\n | RequestSubscriptionPropsByPlatforms\n | null,\n) => {\n return request?.google;\n};\n\nconst createPurchaseTokenError = (purchase: Purchase): Error => {\n const error = new Error(\n 'Purchase token is required to finish Amazon Vega transaction',\n ) as Error & PurchaseError;\n error.code = ErrorCode.DeveloperError;\n error.productId = purchase.productId;\n return error;\n};\n\nexport const emitter = {\n addListener(\n eventName: OpenIapEvent,\n listener: (payload: Purchase | PurchaseError) => void,\n ): EventSubscription {\n return getModule().addListener(eventName, listener);\n },\n removeListener(\n eventName: OpenIapEvent,\n listener: (payload: Purchase | PurchaseError) => void,\n ): void {\n return getModule().removeListener(eventName, listener);\n },\n};\n\nexport const purchaseUpdatedListener = (\n listener: (event: Purchase) => void,\n options?: PurchaseUpdatedListenerOptions | null,\n): EventSubscription => {\n return getModule().addListener(OpenIapEvent.PurchaseUpdated, (purchase) => {\n listener(purchase as Purchase);\n });\n};\n\nexport const purchaseErrorListener = (\n listener: (error: PurchaseError) => void,\n): EventSubscription => {\n return getModule().addListener(OpenIapEvent.PurchaseError, (error) => {\n listener(error as PurchaseError);\n });\n};\n\nexport const initConnection: MutationField<'initConnection'> = async (\n config,\n) => {\n return getModule().initConnection(config ?? null);\n};\n\nexport const endConnection: MutationField<'endConnection'> = async () => {\n return getModule().endConnection();\n};\n\nexport const fetchProducts = async (\n request: Omit<ProductRequest, 'type'> & {\n type?: ProductTypeInput | null;\n },\n): ReturnType<QueryField<'fetchProducts'>> => {\n const {skus, type} = request;\n return getModule().fetchProducts(normalizeProductType(type), skus);\n};\n\nexport const requestPurchase: MutationField<'requestPurchase'> = async (\n args,\n) => {\n markRequested(args.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 type = normalizeProductType(args.type);\n if (type === 'all') {\n throw createPurchaseError({\n code: ErrorCode.DeveloperError,\n message: 'Product type all is only supported for product queries.',\n });\n }\n const androidRequest = getAndroidRequest(args.request);\n if (!androidRequest?.skus?.length) {\n throw new Error(\n 'Invalid request for Amazon Vega. The `request.google.skus` property is required and must be a non-empty array.',\n );\n }\n\n return normalizePurchaseArray(\n await getModule().requestPurchase({\n skus: androidRequest.skus,\n type,\n }),\n );\n};\n\nexport const getAvailablePurchases: QueryField<\n 'getAvailablePurchases'\n> = async (options) => {\n return normalizePurchaseArray(\n await getModule().getAvailableItems((options ?? {}) as PurchaseOptions),\n );\n};\n\nexport const finishTransaction: MutationField<'finishTransaction'> = async ({\n purchase,\n isConsumable = false,\n}) => {\n const token = purchase.purchaseToken ?? undefined;\n if (!token) {\n throw createPurchaseTokenError(purchase);\n }\n\n if (isConsumable) {\n await getModule().consumePurchaseAndroid(token);\n return;\n }\n\n await getModule().acknowledgePurchaseAndroid(token);\n};\n\nexport const restorePurchases: MutationField<'restorePurchases'> = async () => {\n await getAvailablePurchases({\n includeSuspendedAndroid: false,\n });\n};\n\nexport const getActiveSubscriptions: QueryField<\n 'getActiveSubscriptions'\n> = async (subscriptionIds) => {\n return getModule().getActiveSubscriptions(subscriptionIds ?? null);\n};\n\nexport const hasActiveSubscriptions: QueryField<\n 'hasActiveSubscriptions'\n> = async (subscriptionIds) => {\n return getModule().hasActiveSubscriptions(subscriptionIds ?? null);\n};\n\nexport const getStorefront: QueryField<'getStorefront'> = async () => {\n return getModule().getStorefront();\n};\n\nexport const verifyPurchaseWithProvider: MutationField<\n 'verifyPurchaseWithProvider'\n> = async (options) => {\n return getModule().verifyPurchaseWithProvider(options);\n};\n\nexport const verifyPurchase: MutationField<'verifyPurchase'> = async () =>\n unsupported('verifyPurchase');\n\nexport const acknowledgePurchaseAndroid: MutationField<\n 'acknowledgePurchaseAndroid'\n> = async (purchaseToken) => {\n await getModule().acknowledgePurchaseAndroid(purchaseToken);\n return true;\n};\n\nexport const consumePurchaseAndroid: MutationField<\n 'consumePurchaseAndroid'\n> = async (purchaseToken) => {\n await getModule().consumePurchaseAndroid(purchaseToken);\n return true;\n};\n\nexport const syncIOS: MutationField<'syncIOS'> = async () =>\n unsupported('syncIOS');\nexport const verifyAppOwnership: QueryField<\n 'verifyAppOwnership'\n> = async () => ({status: 'unknown', reason: 'unsupported', storeId: 'amazon'});\n\nexport const getAppTransactionIOS: QueryField<\n 'getAppTransactionIOS'\n> = async () => null;\nexport const getPromotedProductIOS: QueryField<\n 'getPromotedProductIOS'\n> = async () => null;\n\nexport const showManageSubscriptionsIOS: MutationField<\n 'showManageSubscriptionsIOS'\n> = async () => [];\nexport const presentExternalPurchaseLinkIOS: MutationField<\n 'presentExternalPurchaseLinkIOS'\n> = async () => unsupported('presentExternalPurchaseLinkIOS');\n\nexport const deepLinkToSubscriptions: MutationField<\n 'deepLinkToSubscriptions'\n> = async () => unsupported('deepLinkToSubscriptions');\n// Vega has no offer-code redemption surface; resolve null without launching.\nexport const openRedeemOfferCode: MutationField<\n 'openRedeemOfferCode'\n> = async () => null;\n\nexport const promotedProductListenerIOS = (): EventSubscription => ({\n remove: () => {},\n});\nexport const userChoiceBillingListenerAndroid = (): EventSubscription => ({\n remove: () => {},\n});\nexport const developerProvidedBillingListenerAndroid =\n (): EventSubscription => ({\n remove: () => {},\n });\nexport const subscriptionBillingIssueListener = (): EventSubscription => ({\n remove: () => {},\n});\n\nexport const isBillingProgramAvailableAndroid: MutationField<\n 'isBillingProgramAvailableAndroid'\n> = async () => unsupported('isBillingProgramAvailableAndroid');\nexport const getBillingChoiceInfoAndroid: QueryField<\n 'getBillingChoiceInfoAndroid'\n> = async () => unsupported('getBillingChoiceInfoAndroid');\nexport const launchExternalLinkAndroid: MutationField<\n 'launchExternalLinkAndroid'\n> = async () => unsupported('launchExternalLinkAndroid');\nexport const createBillingProgramReportingDetailsAndroid: MutationField<\n 'createBillingProgramReportingDetailsAndroid'\n> = async () => unsupported('createBillingProgramReportingDetailsAndroid');\nexport const showBillingProgramInformationDialogAndroid: MutationField<\n 'showBillingProgramInformationDialogAndroid'\n> = async () => unsupported('showBillingProgramInformationDialogAndroid');\nexport const showInAppMessagesAndroid: MutationField<\n 'showInAppMessagesAndroid'\n> = async () => unsupported('showInAppMessagesAndroid');\n\nconst purchaseFlowSdk: PurchaseFlowSdk = {\n finishTransaction: (args) => finishTransaction(args),\n getAvailablePurchases: () => getAvailablePurchases(),\n getPendingTransactionsIOS: undefined,\n purchaseUpdatedListener: (listener) => purchaseUpdatedListener(listener),\n purchaseErrorListener: (listener) => purchaseErrorListener(listener),\n};\n\n/**\n * Creates the app's purchase flow on Amazon Vega. Create one per signed-in\n * 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): PurchaseFlowOptions<Purchase>['confirmWithBackend'] {\n return createIapkitConfirmation(verifyPurchaseWithProvider, options);\n}\n"]}
|
|
@@ -13,6 +13,8 @@ export interface IapkitConfirmationOptions<P extends PurchaseFlowPurchase = Purc
|
|
|
13
13
|
amazon?: {
|
|
14
14
|
/** Verify App Tester receipts with the Amazon RVS Cloud Sandbox. */
|
|
15
15
|
sandbox?: boolean;
|
|
16
|
+
/** Expected verdict environment; defaults to Sandbox with sandbox, otherwise Production. */
|
|
17
|
+
expectedEnvironment?: "Sandbox" | "Production";
|
|
16
18
|
/** RVS reports a subscription term under its parent SKU; maps one to the other. */
|
|
17
19
|
verifiedProductId?: (productId: string) => string;
|
|
18
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purchase-flow-confirmers.d.ts","sourceRoot":"","sources":["../src/purchase-flow-confirmers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"purchase-flow-confirmers.d.ts","sourceRoot":"","sources":["../src/purchase-flow-confirmers.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,6 +86,7 @@ export function toIapkitVerificationProps(purchase, options) {
|
|
|
86
86
|
iapkit: { ...base, google: { purchaseToken: token() } },
|
|
87
87
|
};
|
|
88
88
|
case "amazon":
|
|
89
|
+
amazonExpectedEnvironment(options.amazon);
|
|
89
90
|
return {
|
|
90
91
|
provider: "iapkit",
|
|
91
92
|
iapkit: {
|
|
@@ -169,11 +170,19 @@ function amazonProductId(purchase, options) {
|
|
|
169
170
|
return (options.amazon?.verifiedProductId?.(purchase.productId) ??
|
|
170
171
|
purchase.productId);
|
|
171
172
|
}
|
|
173
|
+
function amazonExpectedEnvironment(amazon) {
|
|
174
|
+
const expected = amazon?.expectedEnvironment ?? (amazon?.sandbox ? "Sandbox" : "Production");
|
|
175
|
+
if (expected !== "Sandbox" && expected !== "Production") {
|
|
176
|
+
throw new Error("Amazon expectedEnvironment must be Sandbox or Production");
|
|
177
|
+
}
|
|
178
|
+
if (amazon?.sandbox && expected === "Production") {
|
|
179
|
+
throw new Error("Amazon Cloud Sandbox requires expectedEnvironment Sandbox");
|
|
180
|
+
}
|
|
181
|
+
return expected;
|
|
182
|
+
}
|
|
172
183
|
function environmentMismatch(environment, store, purchase, options) {
|
|
173
184
|
const expected = store === "amazon"
|
|
174
|
-
? options.amazon
|
|
175
|
-
? "Sandbox"
|
|
176
|
-
: "Production"
|
|
185
|
+
? amazonExpectedEnvironment(options.amazon)
|
|
177
186
|
: store === "apple"
|
|
178
187
|
? purchase.environmentIOS
|
|
179
188
|
: null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purchase-flow-confirmers.js","sourceRoot":"","sources":["../src/purchase-flow-confirmers.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal adapters for SDK confirmation helpers; apps use SDK root imports.\n// Each adapter uses the same lifecycle contract as other verification services.\nimport type {\n PurchaseConfirmation,\n PurchaseFlowOptions,\n PurchaseFlowPurchase,\n} from \"./purchase-flow-core\";\n\ntype IapkitStore = \"apple\" | \"google\" | \"amazon\" | \"horizon\";\n\n/** How an app without its own backend confirms purchases with IAPKit. */\nexport interface IapkitConfirmationOptions<\n P extends PurchaseFlowPurchase = PurchaseFlowPurchase,\n> {\n /**\n * A publishable key (`openiap-kit_pk_...`), which is safe to ship in an\n * app. Leave it out where the SDK has one configured, such as Expo's\n * `iapkitApiKey`.\n */\n apiKey?: string;\n /** A self-hosted or local IAPKit origin. Defaults to https://kit.openiap.dev. */\n baseUrl?: string;\n amazon?: {\n /** Verify App Tester receipts with the Amazon RVS Cloud Sandbox. */\n sandbox?: boolean;\n /** RVS reports a subscription term under its parent SKU; maps one to the other. */\n verifiedProductId?: (productId: string) => string;\n };\n /** The IAPKit store that verifies a community store's evidence, such as an Amazon RVS adapter. */\n verifyAs?: (purchase: P) => IapkitStore | undefined;\n /** Credits consumables before finishing; must be idempotent per purchase.id. */\n grant?: (purchase: P, context: { isConsumable: boolean }) => Promise<void>;\n}\n\n/** @internal Use the SDK's VerifyPurchaseWithProviderProps. */\nexport interface IapkitVerificationProps {\n provider: \"iapkit\";\n iapkit: {\n apiKey?: string;\n baseUrl?: string;\n apple?: { jws: string };\n google?: { purchaseToken: string };\n amazon?: {\n receiptId: string;\n expectedProductId: string;\n sandbox: boolean;\n userId?: string;\n };\n horizon?: { sku: string };\n };\n}\n\n/** @internal Use the SDK's VerifyPurchaseWithProviderResult. */\nexport interface IapkitVerificationResult {\n iapkit?: {\n store: string;\n storeId: string;\n environment?: string | null;\n isValid: boolean;\n state: string;\n productId?: string | null;\n } | null;\n errors?: { code?: string | null; message: string }[] | null;\n}\n\nconst IAPKIT_UNKNOWN_RETRY_MS = 30_000;\n\n/**\n * @internal Use the SDK's confirmWithIapkit.\n * The SDK's `confirmWithIapkit`, given its `verifyPurchaseWithProvider`:\n * verifies the purchase with IAPKit, then runs `grant` before the flow\n * finishes it.\n */\nexport function createIapkitConfirmation<P extends PurchaseFlowPurchase>(\n verifyPurchaseWithProvider: (\n props: IapkitVerificationProps,\n ) => Promise<IapkitVerificationResult>,\n options: IapkitConfirmationOptions<P>,\n): PurchaseFlowOptions<P>[\"confirmWithBackend\"] {\n return async (purchase, context) => {\n requireGrant(\"confirmWithIapkit\", purchase, context, options);\n const confirmation = readIapkitVerification(\n await verifyPurchaseWithProvider(\n toIapkitVerificationProps(purchase, options),\n ),\n purchase,\n context,\n options,\n );\n if (confirmation.status === \"entitled\" && !confirmation.alreadyGranted) {\n await options.grant?.(purchase, context);\n }\n return confirmation;\n };\n}\n\n/**\n * @internal Use the SDK's confirmOnDeviceIOS.\n * The SDK's `confirmOnDeviceIOS`, given its `getPendingTransactionsIOS`, for an\n * app with neither a backend nor IAPKit. StoreKit verified the transaction if\n * it is still unfinished, unrevoked, not upgraded, unexpired, and from the\n * purchase's environment; `grant` then runs before the flow finishes it.\n */\nexport function createDeviceConfirmationIOS<P extends PurchaseFlowPurchase>(\n getPendingTransactionsIOS: () => Promise<P[]>,\n options: {\n /** Required for consumables; credit each purchase.id only once. */\n grant?: (purchase: P, context: { isConsumable: boolean }) => Promise<void>;\n } = {},\n): PurchaseFlowOptions<P>[\"confirmWithBackend\"] {\n return async (purchase, context) => {\n requireGrant(\"confirmOnDeviceIOS\", purchase, context, options);\n // A community provider may report store \"apple\" under its own storeId.\n if (\n purchase.store !== \"apple\" ||\n (purchase.storeId ?? \"apple\") !== \"apple\"\n ) {\n throw new Error(\n `Device confirmation covers App Store purchases, not ${purchase.storeId ?? purchase.store}`,\n );\n }\n const pending = await getPendingTransactionsIOS();\n // After the query: a transaction can expire while StoreKit answers.\n const now = Date.now();\n const verified = pending.some(\n (candidate) =>\n candidate.store === \"apple\" &&\n purchase.id !== \"\" &&\n candidate.id === purchase.id &&\n candidate.productId === purchase.productId &&\n candidate.revocationDateIOS == null &&\n candidate.isUpgradedIOS !== true &&\n (candidate.expirationDateIOS == null ||\n candidate.expirationDateIOS > now) &&\n (purchase.environmentIOS == null ||\n candidate.environmentIOS === purchase.environmentIOS),\n );\n if (!verified) {\n throw new Error(\n `StoreKit lists no valid unfinished transaction for ${purchase.productId}`,\n );\n }\n await options.grant?.(purchase, context);\n return { status: \"entitled\", alreadyGranted: false };\n };\n}\n\n// Checked before verifying: a consumable must never pass without a way to credit it.\nfunction requireGrant<P extends PurchaseFlowPurchase>(\n name: string,\n purchase: P,\n context: { isConsumable: boolean },\n options: Pick<IapkitConfirmationOptions<P>, \"grant\">,\n): void {\n if (context.isConsumable && !options.grant) {\n throw new Error(\n `${name} needs grant to credit consumable ${purchase.productId} before it is consumed`,\n );\n }\n}\n\n/** @internal Builds the IAPKit request; throws for a store IAPKit cannot verify. */\nexport function toIapkitVerificationProps<P extends PurchaseFlowPurchase>(\n purchase: P,\n options: IapkitConfirmationOptions<P>,\n): IapkitVerificationProps {\n const apiKey = options.apiKey?.trim();\n // An unset environment variable, not a deliberate fallback to the SDK's key.\n if (apiKey === \"\") throw new Error(\"IAPKit apiKey is empty\");\n const baseUrl = options.baseUrl?.trim();\n const base = {\n ...(apiKey ? { apiKey } : {}),\n ...(baseUrl ? { baseUrl } : {}),\n };\n const token = (): string => {\n if (!purchase.purchaseToken) {\n throw new Error(\n `Purchase ${purchase.productId} has no purchase token to verify`,\n );\n }\n return purchase.purchaseToken;\n };\n const store = verifyingStore(purchase, options);\n switch (store) {\n case \"apple\":\n return {\n provider: \"iapkit\",\n iapkit: { ...base, apple: { jws: token() } },\n };\n case \"google\":\n return {\n provider: \"iapkit\",\n iapkit: { ...base, google: { purchaseToken: token() } },\n };\n case \"amazon\":\n return {\n provider: \"iapkit\",\n iapkit: {\n ...base,\n amazon: {\n receiptId: token(),\n expectedProductId: amazonProductId(purchase, options),\n sandbox: options.amazon?.sandbox ?? false,\n ...(purchase.userIdAmazon ? { userId: purchase.userIdAmazon } : {}),\n },\n },\n };\n case \"horizon\":\n return {\n provider: \"iapkit\",\n iapkit: { ...base, horizon: { sku: purchase.productId } },\n };\n default:\n throw new Error(`IAPKit cannot verify store ${purchase.store}`);\n }\n}\n\n/**\n * @internal Use the SDK's confirmWithIapkit.\n * Turns IAPKit's answer into the flow's confirmation. Anything that may be a\n * configuration error rather than a rejected payment throws, so the flow\n * reports `failed` and leaves the purchase unfinished: evidence for another\n * store, product, or environment, `inauthentic` (IAPKit's answer to a product\n * or package mismatch, and to every Horizon rejection), and a valid state this\n * product type cannot be granted from.\n */\nexport function readIapkitVerification<P extends PurchaseFlowPurchase>(\n result: IapkitVerificationResult,\n purchase: P,\n context: { isConsumable: boolean },\n options: Omit<IapkitConfirmationOptions<P>, \"apiKey\"> = {},\n): PurchaseConfirmation {\n const verified = result.iapkit;\n if (!verified) {\n const errors = (result.errors ?? []).map((error) =>\n error.code ? `[${error.code}] ${error.message}` : error.message,\n );\n throw new Error(\n errors.join(\"\\n\") || \"IAPKit returned no verification result\",\n );\n }\n switch (verified.state) {\n case \"pending\":\n return { status: \"store_pending\" };\n // The store gave no usable answer: retry instead of rejecting a payment.\n case \"unknown\":\n return {\n status: \"verification_delayed\",\n retryAfterMs: IAPKIT_UNKNOWN_RETRY_MS,\n };\n }\n const store = verifyingStore(purchase, options);\n const expectedProductId =\n store === \"amazon\"\n ? amazonProductId(purchase, options)\n : purchase.productId;\n const mismatch =\n verified.store !== purchase.store\n ? `store ${verified.store}, expected ${purchase.store}`\n : purchase.storeId && verified.storeId !== purchase.storeId\n ? `store id ${verified.storeId}, expected ${purchase.storeId}`\n : verified.productId !== expectedProductId\n ? `product ${verified.productId ?? \"(none)\"}, expected ${expectedProductId}`\n : environmentMismatch(verified.environment, store, purchase, options);\n if (mismatch) throw new Error(`IAPKit verified ${mismatch}`);\n if (!verified.isValid) {\n switch (verified.state) {\n case \"canceled\":\n case \"expired\":\n return { status: \"invalid\", reason: verified.state };\n // Only a granted purchase is consumed; the flow grants before finishing.\n case \"consumed\":\n return { status: \"entitled\", alreadyGranted: true };\n default:\n throw new Error(`IAPKit rejected the purchase: ${verified.state}`);\n }\n }\n if (!grantsAccess(store, verified.state, context.isConsumable)) {\n throw new Error(\n `IAPKit state ${verified.state} cannot grant this ${\n context.isConsumable ? \"consumable\" : \"non-consumable\"\n } ${purchase.store} purchase`,\n );\n }\n return { status: \"entitled\", alreadyGranted: false };\n}\n\nfunction verifyingStore<P extends PurchaseFlowPurchase>(\n purchase: P,\n options: Pick<IapkitConfirmationOptions<P>, \"verifyAs\">,\n): string {\n return options.verifyAs?.(purchase) ?? purchase.store;\n}\n\nfunction amazonProductId(\n purchase: PurchaseFlowPurchase,\n options: Pick<IapkitConfirmationOptions, \"amazon\">,\n): string {\n return (\n options.amazon?.verifiedProductId?.(purchase.productId) ??\n purchase.productId\n );\n}\n\nfunction environmentMismatch(\n environment: string | null | undefined,\n store: string,\n purchase: PurchaseFlowPurchase,\n options: Pick<IapkitConfirmationOptions, \"amazon\">,\n): string | null {\n const expected =\n store === \"amazon\"\n ? options.amazon?.sandbox\n ? \"Sandbox\"\n : \"Production\"\n : store === \"apple\"\n ? purchase.environmentIOS\n : null;\n return expected && environment !== expected\n ? `environment ${environment ?? \"(none)\"}, expected ${expected}`\n : null;\n}\n\n// Apple and Amazon keep a consumable at ready-to-consume until it is finished;\n// Google reports a granted purchase as pending-acknowledgment until then.\nfunction grantsAccess(\n store: string,\n state: string,\n isConsumable: boolean,\n): boolean {\n switch (store) {\n case \"apple\":\n case \"amazon\":\n return state === (isConsumable ? \"ready-to-consume\" : \"entitled\");\n case \"google\":\n return (\n state === \"entitled\" ||\n state === \"pending-acknowledgment\" ||\n (isConsumable && state === \"ready-to-consume\")\n );\n case \"horizon\":\n return state === \"entitled\";\n default:\n return false;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"purchase-flow-confirmers.js","sourceRoot":"","sources":["../src/purchase-flow-confirmers.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal adapters for SDK confirmation helpers; apps use SDK root imports.\n// Each adapter uses the same lifecycle contract as other verification services.\nimport type {\n PurchaseConfirmation,\n PurchaseFlowOptions,\n PurchaseFlowPurchase,\n} from \"./purchase-flow-core\";\n\ntype IapkitStore = \"apple\" | \"google\" | \"amazon\" | \"horizon\";\n\n/** How an app without its own backend confirms purchases with IAPKit. */\nexport interface IapkitConfirmationOptions<\n P extends PurchaseFlowPurchase = PurchaseFlowPurchase,\n> {\n /**\n * A publishable key (`openiap-kit_pk_...`), which is safe to ship in an\n * app. Leave it out where the SDK has one configured, such as Expo's\n * `iapkitApiKey`.\n */\n apiKey?: string;\n /** A self-hosted or local IAPKit origin. Defaults to https://kit.openiap.dev. */\n baseUrl?: string;\n amazon?: {\n /** Verify App Tester receipts with the Amazon RVS Cloud Sandbox. */\n sandbox?: boolean;\n /** Expected verdict environment; defaults to Sandbox with sandbox, otherwise Production. */\n expectedEnvironment?: \"Sandbox\" | \"Production\";\n /** RVS reports a subscription term under its parent SKU; maps one to the other. */\n verifiedProductId?: (productId: string) => string;\n };\n /** The IAPKit store that verifies a community store's evidence, such as an Amazon RVS adapter. */\n verifyAs?: (purchase: P) => IapkitStore | undefined;\n /** Credits consumables before finishing; must be idempotent per purchase.id. */\n grant?: (purchase: P, context: { isConsumable: boolean }) => Promise<void>;\n}\n\n/** @internal Use the SDK's VerifyPurchaseWithProviderProps. */\nexport interface IapkitVerificationProps {\n provider: \"iapkit\";\n iapkit: {\n apiKey?: string;\n baseUrl?: string;\n apple?: { jws: string };\n google?: { purchaseToken: string };\n amazon?: {\n receiptId: string;\n expectedProductId: string;\n sandbox: boolean;\n userId?: string;\n };\n horizon?: { sku: string };\n };\n}\n\n/** @internal Use the SDK's VerifyPurchaseWithProviderResult. */\nexport interface IapkitVerificationResult {\n iapkit?: {\n store: string;\n storeId: string;\n environment?: string | null;\n isValid: boolean;\n state: string;\n productId?: string | null;\n } | null;\n errors?: { code?: string | null; message: string }[] | null;\n}\n\nconst IAPKIT_UNKNOWN_RETRY_MS = 30_000;\n\n/**\n * @internal Use the SDK's confirmWithIapkit.\n * The SDK's `confirmWithIapkit`, given its `verifyPurchaseWithProvider`:\n * verifies the purchase with IAPKit, then runs `grant` before the flow\n * finishes it.\n */\nexport function createIapkitConfirmation<P extends PurchaseFlowPurchase>(\n verifyPurchaseWithProvider: (\n props: IapkitVerificationProps,\n ) => Promise<IapkitVerificationResult>,\n options: IapkitConfirmationOptions<P>,\n): PurchaseFlowOptions<P>[\"confirmWithBackend\"] {\n return async (purchase, context) => {\n requireGrant(\"confirmWithIapkit\", purchase, context, options);\n const confirmation = readIapkitVerification(\n await verifyPurchaseWithProvider(\n toIapkitVerificationProps(purchase, options),\n ),\n purchase,\n context,\n options,\n );\n if (confirmation.status === \"entitled\" && !confirmation.alreadyGranted) {\n await options.grant?.(purchase, context);\n }\n return confirmation;\n };\n}\n\n/**\n * @internal Use the SDK's confirmOnDeviceIOS.\n * The SDK's `confirmOnDeviceIOS`, given its `getPendingTransactionsIOS`, for an\n * app with neither a backend nor IAPKit. StoreKit verified the transaction if\n * it is still unfinished, unrevoked, not upgraded, unexpired, and from the\n * purchase's environment; `grant` then runs before the flow finishes it.\n */\nexport function createDeviceConfirmationIOS<P extends PurchaseFlowPurchase>(\n getPendingTransactionsIOS: () => Promise<P[]>,\n options: {\n /** Required for consumables; credit each purchase.id only once. */\n grant?: (purchase: P, context: { isConsumable: boolean }) => Promise<void>;\n } = {},\n): PurchaseFlowOptions<P>[\"confirmWithBackend\"] {\n return async (purchase, context) => {\n requireGrant(\"confirmOnDeviceIOS\", purchase, context, options);\n // A community provider may report store \"apple\" under its own storeId.\n if (\n purchase.store !== \"apple\" ||\n (purchase.storeId ?? \"apple\") !== \"apple\"\n ) {\n throw new Error(\n `Device confirmation covers App Store purchases, not ${purchase.storeId ?? purchase.store}`,\n );\n }\n const pending = await getPendingTransactionsIOS();\n // After the query: a transaction can expire while StoreKit answers.\n const now = Date.now();\n const verified = pending.some(\n (candidate) =>\n candidate.store === \"apple\" &&\n purchase.id !== \"\" &&\n candidate.id === purchase.id &&\n candidate.productId === purchase.productId &&\n candidate.revocationDateIOS == null &&\n candidate.isUpgradedIOS !== true &&\n (candidate.expirationDateIOS == null ||\n candidate.expirationDateIOS > now) &&\n (purchase.environmentIOS == null ||\n candidate.environmentIOS === purchase.environmentIOS),\n );\n if (!verified) {\n throw new Error(\n `StoreKit lists no valid unfinished transaction for ${purchase.productId}`,\n );\n }\n await options.grant?.(purchase, context);\n return { status: \"entitled\", alreadyGranted: false };\n };\n}\n\n// Checked before verifying: a consumable must never pass without a way to credit it.\nfunction requireGrant<P extends PurchaseFlowPurchase>(\n name: string,\n purchase: P,\n context: { isConsumable: boolean },\n options: Pick<IapkitConfirmationOptions<P>, \"grant\">,\n): void {\n if (context.isConsumable && !options.grant) {\n throw new Error(\n `${name} needs grant to credit consumable ${purchase.productId} before it is consumed`,\n );\n }\n}\n\n/** @internal Builds the IAPKit request; throws for a store IAPKit cannot verify. */\nexport function toIapkitVerificationProps<P extends PurchaseFlowPurchase>(\n purchase: P,\n options: IapkitConfirmationOptions<P>,\n): IapkitVerificationProps {\n const apiKey = options.apiKey?.trim();\n // An unset environment variable, not a deliberate fallback to the SDK's key.\n if (apiKey === \"\") throw new Error(\"IAPKit apiKey is empty\");\n const baseUrl = options.baseUrl?.trim();\n const base = {\n ...(apiKey ? { apiKey } : {}),\n ...(baseUrl ? { baseUrl } : {}),\n };\n const token = (): string => {\n if (!purchase.purchaseToken) {\n throw new Error(\n `Purchase ${purchase.productId} has no purchase token to verify`,\n );\n }\n return purchase.purchaseToken;\n };\n const store = verifyingStore(purchase, options);\n switch (store) {\n case \"apple\":\n return {\n provider: \"iapkit\",\n iapkit: { ...base, apple: { jws: token() } },\n };\n case \"google\":\n return {\n provider: \"iapkit\",\n iapkit: { ...base, google: { purchaseToken: token() } },\n };\n case \"amazon\":\n amazonExpectedEnvironment(options.amazon);\n return {\n provider: \"iapkit\",\n iapkit: {\n ...base,\n amazon: {\n receiptId: token(),\n expectedProductId: amazonProductId(purchase, options),\n sandbox: options.amazon?.sandbox ?? false,\n ...(purchase.userIdAmazon ? { userId: purchase.userIdAmazon } : {}),\n },\n },\n };\n case \"horizon\":\n return {\n provider: \"iapkit\",\n iapkit: { ...base, horizon: { sku: purchase.productId } },\n };\n default:\n throw new Error(`IAPKit cannot verify store ${purchase.store}`);\n }\n}\n\n/**\n * @internal Use the SDK's confirmWithIapkit.\n * Turns IAPKit's answer into the flow's confirmation. Anything that may be a\n * configuration error rather than a rejected payment throws, so the flow\n * reports `failed` and leaves the purchase unfinished: evidence for another\n * store, product, or environment, `inauthentic` (IAPKit's answer to a product\n * or package mismatch, and to every Horizon rejection), and a valid state this\n * product type cannot be granted from.\n */\nexport function readIapkitVerification<P extends PurchaseFlowPurchase>(\n result: IapkitVerificationResult,\n purchase: P,\n context: { isConsumable: boolean },\n options: Omit<IapkitConfirmationOptions<P>, \"apiKey\"> = {},\n): PurchaseConfirmation {\n const verified = result.iapkit;\n if (!verified) {\n const errors = (result.errors ?? []).map((error) =>\n error.code ? `[${error.code}] ${error.message}` : error.message,\n );\n throw new Error(\n errors.join(\"\\n\") || \"IAPKit returned no verification result\",\n );\n }\n switch (verified.state) {\n case \"pending\":\n return { status: \"store_pending\" };\n // The store gave no usable answer: retry instead of rejecting a payment.\n case \"unknown\":\n return {\n status: \"verification_delayed\",\n retryAfterMs: IAPKIT_UNKNOWN_RETRY_MS,\n };\n }\n const store = verifyingStore(purchase, options);\n const expectedProductId =\n store === \"amazon\"\n ? amazonProductId(purchase, options)\n : purchase.productId;\n const mismatch =\n verified.store !== purchase.store\n ? `store ${verified.store}, expected ${purchase.store}`\n : purchase.storeId && verified.storeId !== purchase.storeId\n ? `store id ${verified.storeId}, expected ${purchase.storeId}`\n : verified.productId !== expectedProductId\n ? `product ${verified.productId ?? \"(none)\"}, expected ${expectedProductId}`\n : environmentMismatch(verified.environment, store, purchase, options);\n if (mismatch) throw new Error(`IAPKit verified ${mismatch}`);\n if (!verified.isValid) {\n switch (verified.state) {\n case \"canceled\":\n case \"expired\":\n return { status: \"invalid\", reason: verified.state };\n // Only a granted purchase is consumed; the flow grants before finishing.\n case \"consumed\":\n return { status: \"entitled\", alreadyGranted: true };\n default:\n throw new Error(`IAPKit rejected the purchase: ${verified.state}`);\n }\n }\n if (!grantsAccess(store, verified.state, context.isConsumable)) {\n throw new Error(\n `IAPKit state ${verified.state} cannot grant this ${\n context.isConsumable ? \"consumable\" : \"non-consumable\"\n } ${purchase.store} purchase`,\n );\n }\n return { status: \"entitled\", alreadyGranted: false };\n}\n\nfunction verifyingStore<P extends PurchaseFlowPurchase>(\n purchase: P,\n options: Pick<IapkitConfirmationOptions<P>, \"verifyAs\">,\n): string {\n return options.verifyAs?.(purchase) ?? purchase.store;\n}\n\nfunction amazonProductId(\n purchase: PurchaseFlowPurchase,\n options: Pick<IapkitConfirmationOptions, \"amazon\">,\n): string {\n return (\n options.amazon?.verifiedProductId?.(purchase.productId) ??\n purchase.productId\n );\n}\n\nfunction amazonExpectedEnvironment(\n amazon: IapkitConfirmationOptions[\"amazon\"],\n): \"Sandbox\" | \"Production\" {\n const expected =\n amazon?.expectedEnvironment ?? (amazon?.sandbox ? \"Sandbox\" : \"Production\");\n if (expected !== \"Sandbox\" && expected !== \"Production\") {\n throw new Error(\"Amazon expectedEnvironment must be Sandbox or Production\");\n }\n if (amazon?.sandbox && expected === \"Production\") {\n throw new Error(\n \"Amazon Cloud Sandbox requires expectedEnvironment Sandbox\",\n );\n }\n return expected;\n}\n\nfunction environmentMismatch(\n environment: string | null | undefined,\n store: string,\n purchase: PurchaseFlowPurchase,\n options: Pick<IapkitConfirmationOptions, \"amazon\">,\n): string | null {\n const expected =\n store === \"amazon\"\n ? amazonExpectedEnvironment(options.amazon)\n : store === \"apple\"\n ? purchase.environmentIOS\n : null;\n return expected && environment !== expected\n ? `environment ${environment ?? \"(none)\"}, expected ${expected}`\n : null;\n}\n\n// Apple and Amazon keep a consumable at ready-to-consume until it is finished;\n// Google reports a granted purchase as pending-acknowledgment until then.\nfunction grantsAccess(\n store: string,\n state: string,\n isConsumable: boolean,\n): boolean {\n switch (store) {\n case \"apple\":\n case \"amazon\":\n return state === (isConsumable ? \"ready-to-consume\" : \"entitled\");\n case \"google\":\n return (\n state === \"entitled\" ||\n state === \"pending-acknowledgment\" ||\n (isConsumable && state === \"ready-to-consume\")\n );\n case \"horizon\":\n return state === \"entitled\";\n default:\n return false;\n }\n}\n"]}
|
package/bun.lock
CHANGED
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
},
|
|
41
41
|
"overrides": {
|
|
42
|
+
"node-forge": "1.4.2",
|
|
42
43
|
"shell-quote": "1.12.0",
|
|
43
44
|
"uuid": "11.1.1",
|
|
44
45
|
"zod": "4.6.7",
|
|
@@ -1402,7 +1403,7 @@
|
|
|
1402
1403
|
|
|
1403
1404
|
"node-exports-info": ["node-exports-info@1.6.2", "", { "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" } }, "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag=="],
|
|
1404
1405
|
|
|
1405
|
-
"node-forge": ["node-forge@1.4.
|
|
1406
|
+
"node-forge": ["node-forge@1.4.2", "", {}, "sha512-rRtAR5XLJ8gCKd9du4qrKAsgCG1ObGP4gLeNJMa4vYSeq4bmBMOJk5IHkrviBV0q7uoAJlVd8HEQYQSVUb4FGQ=="],
|
|
1406
1407
|
|
|
1407
1408
|
"node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="],
|
|
1408
1409
|
|
package/openiap-versions.json
CHANGED
package/osv-scanner.toml
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
[[IgnoredVulns]]
|
|
2
|
-
id = "GHSA-
|
|
3
|
-
ignoreUntil = 2026-
|
|
4
|
-
reason = "No patched
|
|
2
|
+
id = "GHSA-gcqx-w48m-w2h4"
|
|
3
|
+
ignoreUntil = 2026-11-04
|
|
4
|
+
reason = "No patched deepmerge release exists. This lock reaches it only through Jest, Expo configuration, or React Native/Kepler CLI configuration used for trusted local builds and tests; mobile entry points and the published SDK runtime do not import those tools. Do not load untrusted project configuration. Revisit the upstream fix before expiry: https://github.com/advisories/GHSA-gcqx-w48m-w2h4."
|
|
5
|
+
|
|
6
|
+
[[IgnoredVulns]]
|
|
7
|
+
id = "GHSA-3g3m-2fjr-6pw4"
|
|
8
|
+
ignoreUntil = 2026-11-04
|
|
9
|
+
reason = "The fix is glob 14.0.2, outside Expo 57 dependency ranges. Expo uses glob for trusted local project discovery and builds, including early cancellation after the first match; cancellation must not be treated as an enforced traversal budget. The published expo-iap mobile entry points do not import glob. Do not run this tooling on untrusted directory trees or expose it as a public request handler. Recheck compatible upstream upgrades before expiry: https://github.com/advisories/GHSA-3g3m-2fjr-6pw4."
|
|
10
|
+
|
|
11
|
+
[[IgnoredVulns]]
|
|
12
|
+
id = "GHSA-g3hv-75wg-m249"
|
|
13
|
+
ignoreUntil = 2026-11-04
|
|
14
|
+
reason = "The fix is minimatch 11.0.1, outside the Expo 57, Jest and ESLint dependency ranges. These copies serve local project discovery, fingerprinting, lint and coverage; the published expo-iap mobile entry points do not import them. Patterns come from the trusted checkout and build configuration; do not load untrusted project patterns or expose this tooling as a public request handler. Recheck compatible upstream upgrades before expiry: https://github.com/advisories/GHSA-g3hv-75wg-m249."
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-iap",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.4.1",
|
|
4
4
|
"description": "In App Purchase module in Expo",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -103,7 +103,8 @@
|
|
|
103
103
|
"overrides": {
|
|
104
104
|
"zod": "4.6.7",
|
|
105
105
|
"uuid": "11.1.1",
|
|
106
|
-
"shell-quote": "1.12.0"
|
|
106
|
+
"shell-quote": "1.12.0",
|
|
107
|
+
"node-forge": "1.4.2"
|
|
107
108
|
},
|
|
108
109
|
"expo": {
|
|
109
110
|
"plugin": "./app.plugin.js"
|
package/src/index.kepler.ts
CHANGED
|
@@ -32,6 +32,7 @@ import {decodeAndroidPurchases} from './utils/availablePurchases';
|
|
|
32
32
|
import {createPurchaseError} from './utils/errorMapping';
|
|
33
33
|
|
|
34
34
|
export * from './types';
|
|
35
|
+
export {isRecoverableError} from './utils/errorMapping';
|
|
35
36
|
export * from './vega';
|
|
36
37
|
export * from './useIAP';
|
|
37
38
|
export {kitApi, KitApiError, resolveLocalizedPayload} from './kit-api';
|
package/src/index.ts
CHANGED
|
@@ -23,6 +23,8 @@ export interface IapkitConfirmationOptions<
|
|
|
23
23
|
amazon?: {
|
|
24
24
|
/** Verify App Tester receipts with the Amazon RVS Cloud Sandbox. */
|
|
25
25
|
sandbox?: boolean;
|
|
26
|
+
/** Expected verdict environment; defaults to Sandbox with sandbox, otherwise Production. */
|
|
27
|
+
expectedEnvironment?: "Sandbox" | "Production";
|
|
26
28
|
/** RVS reports a subscription term under its parent SKU; maps one to the other. */
|
|
27
29
|
verifiedProductId?: (productId: string) => string;
|
|
28
30
|
};
|
|
@@ -193,6 +195,7 @@ export function toIapkitVerificationProps<P extends PurchaseFlowPurchase>(
|
|
|
193
195
|
iapkit: { ...base, google: { purchaseToken: token() } },
|
|
194
196
|
};
|
|
195
197
|
case "amazon":
|
|
198
|
+
amazonExpectedEnvironment(options.amazon);
|
|
196
199
|
return {
|
|
197
200
|
provider: "iapkit",
|
|
198
201
|
iapkit: {
|
|
@@ -302,6 +305,22 @@ function amazonProductId(
|
|
|
302
305
|
);
|
|
303
306
|
}
|
|
304
307
|
|
|
308
|
+
function amazonExpectedEnvironment(
|
|
309
|
+
amazon: IapkitConfirmationOptions["amazon"],
|
|
310
|
+
): "Sandbox" | "Production" {
|
|
311
|
+
const expected =
|
|
312
|
+
amazon?.expectedEnvironment ?? (amazon?.sandbox ? "Sandbox" : "Production");
|
|
313
|
+
if (expected !== "Sandbox" && expected !== "Production") {
|
|
314
|
+
throw new Error("Amazon expectedEnvironment must be Sandbox or Production");
|
|
315
|
+
}
|
|
316
|
+
if (amazon?.sandbox && expected === "Production") {
|
|
317
|
+
throw new Error(
|
|
318
|
+
"Amazon Cloud Sandbox requires expectedEnvironment Sandbox",
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
return expected;
|
|
322
|
+
}
|
|
323
|
+
|
|
305
324
|
function environmentMismatch(
|
|
306
325
|
environment: string | null | undefined,
|
|
307
326
|
store: string,
|
|
@@ -310,9 +329,7 @@ function environmentMismatch(
|
|
|
310
329
|
): string | null {
|
|
311
330
|
const expected =
|
|
312
331
|
store === "amazon"
|
|
313
|
-
? options.amazon
|
|
314
|
-
? "Sandbox"
|
|
315
|
-
: "Production"
|
|
332
|
+
? amazonExpectedEnvironment(options.amazon)
|
|
316
333
|
: store === "apple"
|
|
317
334
|
? purchase.environmentIOS
|
|
318
335
|
: null;
|