expo-iap 2.6.2 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +9 -1
- package/android/src/main/java/expo/modules/iap/ExpoIapModule.kt +45 -44
- package/build/ExpoIap.types.d.ts +84 -2
- package/build/ExpoIap.types.d.ts.map +1 -1
- package/build/ExpoIap.types.js +11 -2
- package/build/ExpoIap.types.js.map +1 -1
- package/build/index.d.ts +58 -7
- package/build/index.d.ts.map +1 -1
- package/build/index.js +114 -12
- package/build/index.js.map +1 -1
- package/build/modules/ios.d.ts.map +1 -1
- package/build/modules/ios.js +0 -43
- package/build/modules/ios.js.map +1 -1
- package/build/types/ExpoIapIos.types.d.ts +1 -1
- package/build/types/ExpoIapIos.types.d.ts.map +1 -1
- package/build/types/ExpoIapIos.types.js.map +1 -1
- package/build/useIap.d.ts +2 -2
- package/build/useIap.d.ts.map +1 -1
- package/build/useIap.js.map +1 -1
- package/ios/ExpoIapModule.swift +9 -4
- package/package.json +1 -1
- package/src/ExpoIap.types.ts +125 -4
- package/src/index.ts +137 -31
- package/src/modules/ios.ts +0 -65
- package/src/types/ExpoIapIos.types.ts +1 -1
- package/src/useIap.ts +3 -1
package/android/build.gradle
CHANGED
|
@@ -41,10 +41,18 @@ android {
|
|
|
41
41
|
lintOptions {
|
|
42
42
|
abortOnError false
|
|
43
43
|
}
|
|
44
|
+
kotlinOptions {
|
|
45
|
+
jvmTarget = "17"
|
|
46
|
+
freeCompilerArgs += ["-Xskip-metadata-version-check"]
|
|
47
|
+
}
|
|
48
|
+
compileOptions {
|
|
49
|
+
sourceCompatibility JavaVersion.VERSION_17
|
|
50
|
+
targetCompatibility JavaVersion.VERSION_17
|
|
51
|
+
}
|
|
44
52
|
}
|
|
45
53
|
|
|
46
54
|
dependencies {
|
|
47
55
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
|
|
48
|
-
implementation "com.android.billingclient:billing-ktx:
|
|
56
|
+
implementation "com.android.billingclient:billing-ktx:8.0.0"
|
|
49
57
|
implementation "com.google.android.gms:play-services-base:18.1.0"
|
|
50
58
|
}
|
|
@@ -13,12 +13,12 @@ import com.android.billingclient.api.BillingResult
|
|
|
13
13
|
import com.android.billingclient.api.ConsumeParams
|
|
14
14
|
import com.android.billingclient.api.GetBillingConfigParams
|
|
15
15
|
import com.android.billingclient.api.ProductDetails
|
|
16
|
+
import com.android.billingclient.api.QueryProductDetailsResult
|
|
16
17
|
import com.android.billingclient.api.Purchase
|
|
17
|
-
import com.android.billingclient.api.PurchaseHistoryRecord
|
|
18
18
|
import com.android.billingclient.api.PurchasesUpdatedListener
|
|
19
19
|
import com.android.billingclient.api.QueryProductDetailsParams
|
|
20
|
-
import com.android.billingclient.api.QueryPurchaseHistoryParams
|
|
21
20
|
import com.android.billingclient.api.QueryPurchasesParams
|
|
21
|
+
import com.android.billingclient.api.PendingPurchasesParams
|
|
22
22
|
import com.google.android.gms.common.ConnectionResult
|
|
23
23
|
import com.google.android.gms.common.GoogleApiAvailability
|
|
24
24
|
import expo.modules.kotlin.Promise
|
|
@@ -53,6 +53,21 @@ class ExpoIapModule :
|
|
|
53
53
|
"responseCode" to responseCode,
|
|
54
54
|
"debugMessage" to billingResult.debugMessage,
|
|
55
55
|
)
|
|
56
|
+
// Add sub-response code if available (v8.0.0+)
|
|
57
|
+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
|
|
58
|
+
try {
|
|
59
|
+
val subResponseCode = billingResult.javaClass.getMethod("getSubResponseCode").invoke(billingResult) as? Int
|
|
60
|
+
if (subResponseCode != null && subResponseCode != 0) {
|
|
61
|
+
error["subResponseCode"] = subResponseCode
|
|
62
|
+
// Check for specific sub-response codes
|
|
63
|
+
if (subResponseCode == 1) { // PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS
|
|
64
|
+
error["subResponseMessage"] = "Payment declined due to insufficient funds"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} catch (e: Exception) {
|
|
68
|
+
// Method doesn't exist in older versions, ignore
|
|
69
|
+
}
|
|
70
|
+
}
|
|
56
71
|
val errorData = PlayUtils.getBillingResponseData(responseCode)
|
|
57
72
|
error["code"] = errorData.code
|
|
58
73
|
error["message"] = errorData.message
|
|
@@ -158,7 +173,7 @@ class ExpoIapModule :
|
|
|
158
173
|
.setProductList(skuList)
|
|
159
174
|
.build()
|
|
160
175
|
|
|
161
|
-
billingClient.queryProductDetailsAsync(params) { billingResult,
|
|
176
|
+
billingClient.queryProductDetailsAsync(params) { billingResult: BillingResult, productDetailsResult: QueryProductDetailsResult ->
|
|
162
177
|
if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) {
|
|
163
178
|
promise.reject(
|
|
164
179
|
IapErrorCode.E_QUERY_PRODUCT,
|
|
@@ -168,6 +183,8 @@ class ExpoIapModule :
|
|
|
168
183
|
return@queryProductDetailsAsync
|
|
169
184
|
}
|
|
170
185
|
|
|
186
|
+
val productDetailsList = productDetailsResult.productDetailsList ?: emptyList()
|
|
187
|
+
|
|
171
188
|
val items =
|
|
172
189
|
productDetailsList.map { productDetails ->
|
|
173
190
|
skus[productDetails.productId] = productDetails
|
|
@@ -269,45 +286,8 @@ class ExpoIapModule :
|
|
|
269
286
|
}
|
|
270
287
|
}
|
|
271
288
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
billingClient.queryPurchaseHistoryAsync(
|
|
275
|
-
QueryPurchaseHistoryParams
|
|
276
|
-
.newBuilder()
|
|
277
|
-
.setProductType(
|
|
278
|
-
if (type == "subs") BillingClient.ProductType.SUBS else BillingClient.ProductType.INAPP,
|
|
279
|
-
).build(),
|
|
280
|
-
) { billingResult: BillingResult, purchaseHistoryRecordList: List<PurchaseHistoryRecord>? ->
|
|
281
|
-
|
|
282
|
-
if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) {
|
|
283
|
-
PlayUtils.rejectPromiseWithBillingError(
|
|
284
|
-
promise,
|
|
285
|
-
billingResult.responseCode,
|
|
286
|
-
)
|
|
287
|
-
return@queryPurchaseHistoryAsync
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
Log.d(TAG, purchaseHistoryRecordList.toString())
|
|
291
|
-
val items = mutableListOf<Map<String, Any?>>()
|
|
292
|
-
purchaseHistoryRecordList?.forEach { purchase ->
|
|
293
|
-
val item =
|
|
294
|
-
mutableMapOf<String, Any?>(
|
|
295
|
-
"id" to purchase.products.firstOrNull() as Any?,
|
|
296
|
-
"ids" to purchase.products,
|
|
297
|
-
"transactionDate" to purchase.purchaseTime.toDouble(),
|
|
298
|
-
"transactionReceipt" to purchase.originalJson,
|
|
299
|
-
"purchaseTokenAndroid" to purchase.purchaseToken,
|
|
300
|
-
"dataAndroid" to purchase.originalJson,
|
|
301
|
-
"signatureAndroid" to purchase.signature,
|
|
302
|
-
"developerPayload" to purchase.developerPayload,
|
|
303
|
-
"platform" to "android",
|
|
304
|
-
)
|
|
305
|
-
items.add(item)
|
|
306
|
-
}
|
|
307
|
-
promise.resolve(items)
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
289
|
+
// getPurchaseHistoryByType removed in Google Play Billing Library v8
|
|
290
|
+
// Use getAvailableItemsByType instead to get active purchases
|
|
311
291
|
|
|
312
292
|
AsyncFunction("buyItemByType") { params: Map<String, Any?>, promise: Promise ->
|
|
313
293
|
val type = params["type"] as String
|
|
@@ -425,7 +405,23 @@ class ExpoIapModule :
|
|
|
425
405
|
|
|
426
406
|
if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) {
|
|
427
407
|
val errorData = PlayUtils.getBillingResponseData(billingResult.responseCode)
|
|
428
|
-
|
|
408
|
+
var errorMessage = billingResult.debugMessage ?: errorData.message
|
|
409
|
+
|
|
410
|
+
// Check for sub-response codes (v8.0.0+)
|
|
411
|
+
try {
|
|
412
|
+
val subResponseCode = billingResult.javaClass.getMethod("getSubResponseCode").invoke(billingResult) as? Int
|
|
413
|
+
if (subResponseCode != null && subResponseCode != 0) {
|
|
414
|
+
if (subResponseCode == 1) { // PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS
|
|
415
|
+
errorMessage = "$errorMessage (Payment declined due to insufficient funds)"
|
|
416
|
+
} else {
|
|
417
|
+
errorMessage = "$errorMessage (Sub-response code: $subResponseCode)"
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
} catch (e: Exception) {
|
|
421
|
+
// Method doesn't exist in older versions, ignore
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
promise.reject(errorData.code, errorMessage, null)
|
|
429
425
|
return@ensureConnection
|
|
430
426
|
}
|
|
431
427
|
}
|
|
@@ -560,7 +556,12 @@ class ExpoIapModule :
|
|
|
560
556
|
BillingClient
|
|
561
557
|
.newBuilder(context)
|
|
562
558
|
.setListener(this)
|
|
563
|
-
.enablePendingPurchases(
|
|
559
|
+
.enablePendingPurchases(
|
|
560
|
+
PendingPurchasesParams.newBuilder()
|
|
561
|
+
.enableOneTimeProducts()
|
|
562
|
+
.build()
|
|
563
|
+
)
|
|
564
|
+
.enableAutoServiceReconnection()
|
|
564
565
|
.build()
|
|
565
566
|
|
|
566
567
|
billingClientCache?.startConnection(
|
package/build/ExpoIap.types.d.ts
CHANGED
|
@@ -28,8 +28,8 @@ export type AndroidPlatform = {
|
|
|
28
28
|
};
|
|
29
29
|
export type Product = (ProductAndroid & AndroidPlatform) | (ProductIos & IosPlatform);
|
|
30
30
|
export type SubscriptionProduct = (SubscriptionProductAndroid & AndroidPlatform) | (SubscriptionProductIos & IosPlatform);
|
|
31
|
-
export type
|
|
32
|
-
export type
|
|
31
|
+
export type LegacyRequestPurchaseProps = RequestPurchaseIosProps | RequestPurchaseAndroidProps;
|
|
32
|
+
export type LegacyRequestSubscriptionProps = RequestSubscriptionAndroidProps | RequestSubscriptionIosProps;
|
|
33
33
|
export type { ProductPurchaseAndroid } from './types/ExpoIapAndroid.types';
|
|
34
34
|
export type { ProductPurchaseIos } from './types/ExpoIapIos.types';
|
|
35
35
|
export type ProductPurchase = (ProductPurchaseAndroid & AndroidPlatform) | (ProductPurchaseIos & IosPlatform);
|
|
@@ -212,4 +212,86 @@ export interface UnifiedRequestSubscriptionProps extends UnifiedRequestPurchaseP
|
|
|
212
212
|
offerToken: string;
|
|
213
213
|
}[];
|
|
214
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* iOS-specific purchase request parameters
|
|
217
|
+
*/
|
|
218
|
+
export interface IosRequestPurchaseProps {
|
|
219
|
+
readonly sku: string;
|
|
220
|
+
readonly andDangerouslyFinishTransactionAutomaticallyIOS?: boolean;
|
|
221
|
+
readonly appAccountToken?: string;
|
|
222
|
+
readonly quantity?: number;
|
|
223
|
+
readonly withOffer?: import('./types/ExpoIapIos.types').PaymentDiscount;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Android-specific purchase request parameters
|
|
227
|
+
*/
|
|
228
|
+
export interface AndroidRequestPurchaseProps {
|
|
229
|
+
readonly skus: string[];
|
|
230
|
+
readonly obfuscatedAccountIdAndroid?: string;
|
|
231
|
+
readonly obfuscatedProfileIdAndroid?: string;
|
|
232
|
+
readonly isOfferPersonalized?: boolean;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Android-specific subscription request parameters
|
|
236
|
+
*/
|
|
237
|
+
export interface AndroidRequestSubscriptionProps extends AndroidRequestPurchaseProps {
|
|
238
|
+
readonly purchaseTokenAndroid?: string;
|
|
239
|
+
readonly replacementModeAndroid?: number;
|
|
240
|
+
readonly subscriptionOffers: {
|
|
241
|
+
sku: string;
|
|
242
|
+
offerToken: string;
|
|
243
|
+
}[];
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Modern platform-specific request structure (v2.7.0+)
|
|
247
|
+
* Allows clear separation of iOS and Android parameters
|
|
248
|
+
*/
|
|
249
|
+
export interface PlatformRequestPurchaseProps {
|
|
250
|
+
readonly ios?: IosRequestPurchaseProps;
|
|
251
|
+
readonly android?: AndroidRequestPurchaseProps;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Modern platform-specific subscription request structure (v2.7.0+)
|
|
255
|
+
*/
|
|
256
|
+
export interface PlatformRequestSubscriptionProps {
|
|
257
|
+
readonly ios?: IosRequestPurchaseProps;
|
|
258
|
+
readonly android?: AndroidRequestSubscriptionProps;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Modern request purchase parameters (v2.7.0+)
|
|
262
|
+
* This is the recommended API moving forward
|
|
263
|
+
*/
|
|
264
|
+
export type RequestPurchaseProps = PlatformRequestPurchaseProps;
|
|
265
|
+
/**
|
|
266
|
+
* Modern request subscription parameters (v2.7.0+)
|
|
267
|
+
* This is the recommended API moving forward
|
|
268
|
+
*/
|
|
269
|
+
export type RequestSubscriptionProps = PlatformRequestSubscriptionProps;
|
|
270
|
+
/**
|
|
271
|
+
* Legacy request purchase parameters (deprecated)
|
|
272
|
+
* Includes both unified and old platform-specific formats
|
|
273
|
+
* @deprecated Use RequestPurchaseProps with platform-specific structure instead
|
|
274
|
+
*/
|
|
275
|
+
export type LegacyRequestPurchasePropsAll = UnifiedRequestPurchaseProps | LegacyRequestPurchaseProps;
|
|
276
|
+
/**
|
|
277
|
+
* Legacy request subscription parameters (deprecated)
|
|
278
|
+
* Includes both unified and old platform-specific formats
|
|
279
|
+
* @deprecated Use RequestSubscriptionProps with platform-specific structure instead
|
|
280
|
+
*/
|
|
281
|
+
export type LegacyRequestSubscriptionPropsAll = UnifiedRequestSubscriptionProps | LegacyRequestSubscriptionProps;
|
|
282
|
+
/**
|
|
283
|
+
* All supported request purchase parameters
|
|
284
|
+
* Used internally for backward compatibility
|
|
285
|
+
* @internal
|
|
286
|
+
*/
|
|
287
|
+
export type RequestPurchasePropsWithLegacy = RequestPurchaseProps | LegacyRequestPurchasePropsAll;
|
|
288
|
+
/**
|
|
289
|
+
* All supported request subscription parameters
|
|
290
|
+
* Used internally for backward compatibility
|
|
291
|
+
* @internal
|
|
292
|
+
*/
|
|
293
|
+
export type RequestSubscriptionPropsWithLegacy = RequestSubscriptionProps | LegacyRequestSubscriptionPropsAll;
|
|
294
|
+
export declare function isPlatformRequestProps(props: RequestPurchasePropsWithLegacy | RequestSubscriptionPropsWithLegacy): props is PlatformRequestPurchaseProps | PlatformRequestSubscriptionProps;
|
|
295
|
+
export declare function isUnifiedRequestProps(props: RequestPurchasePropsWithLegacy | RequestSubscriptionPropsWithLegacy): props is UnifiedRequestPurchaseProps | UnifiedRequestSubscriptionProps;
|
|
296
|
+
export declare function isLegacyRequestProps(props: RequestPurchasePropsWithLegacy | RequestSubscriptionPropsWithLegacy): props is LegacyRequestPurchaseProps | LegacyRequestSubscriptionProps;
|
|
215
297
|
//# sourceMappingURL=ExpoIap.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoIap.types.d.ts","sourceRoot":"","sources":["../src/ExpoIap.types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,2BAA2B,EAC3B,+BAA+B,EAC/B,0BAA0B,EAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAGlC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3C,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG;IAAC,QAAQ,EAAE,KAAK,CAAA;CAAC,CAAC;AAC5C,MAAM,MAAM,eAAe,GAAG;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAC,CAAC;AAGpD,MAAM,MAAM,OAAO,GACf,CAAC,cAAc,GAAG,eAAe,CAAC,GAClC,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;AAE/B,MAAM,MAAM,mBAAmB,GAC3B,CAAC,0BAA0B,GAAG,eAAe,CAAC,GAC9C,CAAC,sBAAsB,GAAG,WAAW,CAAC,CAAC;AAG3C,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"ExpoIap.types.d.ts","sourceRoot":"","sources":["../src/ExpoIap.types.ts"],"names":[],"mappings":"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"}
|
package/build/ExpoIap.types.js
CHANGED
|
@@ -182,8 +182,17 @@ export const ErrorCodeUtils = {
|
|
|
182
182
|
},
|
|
183
183
|
};
|
|
184
184
|
// ============================================================================
|
|
185
|
-
// ============================================================================
|
|
186
185
|
// Type Guards and Utility Functions
|
|
187
186
|
// ============================================================================
|
|
188
|
-
//
|
|
187
|
+
// Type guards to check which API style is being used
|
|
188
|
+
export function isPlatformRequestProps(props) {
|
|
189
|
+
return 'ios' in props || 'android' in props;
|
|
190
|
+
}
|
|
191
|
+
export function isUnifiedRequestProps(props) {
|
|
192
|
+
return 'sku' in props || 'skus' in props;
|
|
193
|
+
}
|
|
194
|
+
export function isLegacyRequestProps(props) {
|
|
195
|
+
return 'productId' in props || 'productIds' in props;
|
|
196
|
+
}
|
|
197
|
+
// Note: Other type guard functions are exported from index.ts to avoid conflicts
|
|
189
198
|
//# sourceMappingURL=ExpoIap.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoIap.types.js","sourceRoot":"","sources":["../src/ExpoIap.types.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ProductAndroid,\n ProductPurchaseAndroid,\n RequestPurchaseAndroidProps,\n RequestSubscriptionAndroidProps,\n SubscriptionProductAndroid,\n} from './types/ExpoIapAndroid.types';\nimport {\n ProductIos,\n ProductPurchaseIos,\n RequestPurchaseIosProps,\n RequestSubscriptionIosProps,\n SubscriptionProductIos,\n} from './types/ExpoIapIos.types';\nimport {NATIVE_ERROR_CODES} from './ExpoIapModule';\n\nexport type ChangeEventPayload = {\n value: string;\n};\n\nexport type ProductType = 'inapp' | 'subs';\n\nexport type ProductBase = {\n id: string;\n title: string;\n description: string;\n type: ProductType;\n displayName?: string;\n displayPrice: string;\n currency: string;\n price?: number;\n};\n\nexport type PurchaseBase = {\n id: string;\n transactionId?: string;\n transactionDate: number;\n transactionReceipt: string;\n};\n\n// Define literal platform types for better type discrimination\nexport type IosPlatform = {platform: 'ios'};\nexport type AndroidPlatform = {platform: 'android'};\n\n// Platform-agnostic unified product types (public API)\nexport type Product =\n | (ProductAndroid & AndroidPlatform)\n | (ProductIos & IosPlatform);\n\nexport type SubscriptionProduct =\n | (SubscriptionProductAndroid & AndroidPlatform)\n | (SubscriptionProductIos & IosPlatform);\n\n// Internal platform-specific types (used for native interop only)\nexport type RequestPurchaseProps =\n | RequestPurchaseIosProps\n | RequestPurchaseAndroidProps;\n\nexport type RequestSubscriptionProps =\n | RequestSubscriptionAndroidProps\n | RequestSubscriptionIosProps;\n\n// ============================================================================\n// Legacy Types (For backward compatibility with useIap hook)\n// ============================================================================\n\n// Re-export platform-specific purchase types for legacy compatibility\nexport type {ProductPurchaseAndroid} from './types/ExpoIapAndroid.types';\nexport type {ProductPurchaseIos} from './types/ExpoIapIos.types';\n\n// Union type for platform-specific purchase types (legacy support)\nexport type ProductPurchase =\n | (ProductPurchaseAndroid & AndroidPlatform)\n | (ProductPurchaseIos & IosPlatform);\n\n// Union type for platform-specific subscription purchase types (legacy support)\nexport type SubscriptionPurchase =\n | (ProductPurchaseAndroid & AndroidPlatform & {autoRenewingAndroid: boolean})\n | (ProductPurchaseIos & IosPlatform);\n\nexport type Purchase = ProductPurchase | SubscriptionPurchase;\n\n// Legacy result type\nexport type PurchaseResult = {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n purchaseTokenAndroid?: string;\n};\n/**\n * Centralized error codes for expo-iap\n * These are mapped to platform-specific error codes and provide consistent error handling\n */\nexport enum ErrorCode {\n E_UNKNOWN = 'E_UNKNOWN',\n E_USER_CANCELLED = 'E_USER_CANCELLED',\n E_USER_ERROR = 'E_USER_ERROR',\n E_ITEM_UNAVAILABLE = 'E_ITEM_UNAVAILABLE',\n E_REMOTE_ERROR = 'E_REMOTE_ERROR',\n E_NETWORK_ERROR = 'E_NETWORK_ERROR',\n E_SERVICE_ERROR = 'E_SERVICE_ERROR',\n E_RECEIPT_FAILED = 'E_RECEIPT_FAILED',\n E_RECEIPT_FINISHED_FAILED = 'E_RECEIPT_FINISHED_FAILED',\n E_NOT_PREPARED = 'E_NOT_PREPARED',\n E_NOT_ENDED = 'E_NOT_ENDED',\n E_ALREADY_OWNED = 'E_ALREADY_OWNED',\n E_DEVELOPER_ERROR = 'E_DEVELOPER_ERROR',\n E_BILLING_RESPONSE_JSON_PARSE_ERROR = 'E_BILLING_RESPONSE_JSON_PARSE_ERROR',\n E_DEFERRED_PAYMENT = 'E_DEFERRED_PAYMENT',\n E_INTERRUPTED = 'E_INTERRUPTED',\n E_IAP_NOT_AVAILABLE = 'E_IAP_NOT_AVAILABLE',\n E_PURCHASE_ERROR = 'E_PURCHASE_ERROR',\n E_SYNC_ERROR = 'E_SYNC_ERROR',\n E_TRANSACTION_VALIDATION_FAILED = 'E_TRANSACTION_VALIDATION_FAILED',\n E_ACTIVITY_UNAVAILABLE = 'E_ACTIVITY_UNAVAILABLE',\n E_ALREADY_PREPARED = 'E_ALREADY_PREPARED',\n E_PENDING = 'E_PENDING',\n E_CONNECTION_CLOSED = 'E_CONNECTION_CLOSED',\n}\n\n/**\n * Platform-specific error code mappings\n * Maps ErrorCode enum values to platform-specific integer codes\n */\nexport const ErrorCodeMapping = {\n ios: {\n [ErrorCode.E_UNKNOWN]: 0,\n [ErrorCode.E_SERVICE_ERROR]: 1,\n [ErrorCode.E_USER_CANCELLED]: 2,\n [ErrorCode.E_USER_ERROR]: 3,\n [ErrorCode.E_ITEM_UNAVAILABLE]: 4,\n [ErrorCode.E_REMOTE_ERROR]: 5,\n [ErrorCode.E_NETWORK_ERROR]: 6,\n [ErrorCode.E_RECEIPT_FAILED]: 7,\n [ErrorCode.E_RECEIPT_FINISHED_FAILED]: 8,\n [ErrorCode.E_DEVELOPER_ERROR]: 9,\n [ErrorCode.E_PURCHASE_ERROR]: 10,\n [ErrorCode.E_SYNC_ERROR]: 11,\n [ErrorCode.E_DEFERRED_PAYMENT]: 12,\n [ErrorCode.E_TRANSACTION_VALIDATION_FAILED]: 13,\n [ErrorCode.E_NOT_PREPARED]: 14,\n [ErrorCode.E_NOT_ENDED]: 15,\n [ErrorCode.E_ALREADY_OWNED]: 16,\n [ErrorCode.E_BILLING_RESPONSE_JSON_PARSE_ERROR]: 17,\n [ErrorCode.E_INTERRUPTED]: 18,\n [ErrorCode.E_IAP_NOT_AVAILABLE]: 19,\n [ErrorCode.E_ACTIVITY_UNAVAILABLE]: 20,\n [ErrorCode.E_ALREADY_PREPARED]: 21,\n [ErrorCode.E_PENDING]: 22,\n [ErrorCode.E_CONNECTION_CLOSED]: 23,\n },\n android: {\n [ErrorCode.E_UNKNOWN]: 'E_UNKNOWN',\n [ErrorCode.E_USER_CANCELLED]: 'E_USER_CANCELLED',\n [ErrorCode.E_USER_ERROR]: 'E_USER_ERROR',\n [ErrorCode.E_ITEM_UNAVAILABLE]: 'E_ITEM_UNAVAILABLE',\n [ErrorCode.E_REMOTE_ERROR]: 'E_REMOTE_ERROR',\n [ErrorCode.E_NETWORK_ERROR]: 'E_NETWORK_ERROR',\n [ErrorCode.E_SERVICE_ERROR]: 'E_SERVICE_ERROR',\n [ErrorCode.E_RECEIPT_FAILED]: 'E_RECEIPT_FAILED',\n [ErrorCode.E_RECEIPT_FINISHED_FAILED]: 'E_RECEIPT_FINISHED_FAILED',\n [ErrorCode.E_NOT_PREPARED]: 'E_NOT_PREPARED',\n [ErrorCode.E_NOT_ENDED]: 'E_NOT_ENDED',\n [ErrorCode.E_ALREADY_OWNED]: 'E_ALREADY_OWNED',\n [ErrorCode.E_DEVELOPER_ERROR]: 'E_DEVELOPER_ERROR',\n [ErrorCode.E_BILLING_RESPONSE_JSON_PARSE_ERROR]:\n 'E_BILLING_RESPONSE_JSON_PARSE_ERROR',\n [ErrorCode.E_DEFERRED_PAYMENT]: 'E_DEFERRED_PAYMENT',\n [ErrorCode.E_INTERRUPTED]: 'E_INTERRUPTED',\n [ErrorCode.E_IAP_NOT_AVAILABLE]: 'E_IAP_NOT_AVAILABLE',\n [ErrorCode.E_PURCHASE_ERROR]: 'E_PURCHASE_ERROR',\n [ErrorCode.E_SYNC_ERROR]: 'E_SYNC_ERROR',\n [ErrorCode.E_TRANSACTION_VALIDATION_FAILED]:\n 'E_TRANSACTION_VALIDATION_FAILED',\n [ErrorCode.E_ACTIVITY_UNAVAILABLE]: 'E_ACTIVITY_UNAVAILABLE',\n [ErrorCode.E_ALREADY_PREPARED]: 'E_ALREADY_PREPARED',\n [ErrorCode.E_PENDING]: 'E_PENDING',\n [ErrorCode.E_CONNECTION_CLOSED]: 'E_CONNECTION_CLOSED',\n },\n} as const;\n\nexport class PurchaseError implements Error {\n constructor(\n public name: string,\n public message: string,\n public responseCode?: number,\n public debugMessage?: string,\n public code?: ErrorCode,\n public productId?: string,\n public platform?: 'ios' | 'android',\n ) {\n this.name = '[expo-iap]: PurchaseError';\n this.message = message;\n this.responseCode = responseCode;\n this.debugMessage = debugMessage;\n this.code = code;\n this.productId = productId;\n this.platform = platform;\n }\n\n /**\n * Creates a PurchaseError from platform-specific error data\n * @param errorData Raw error data from native modules\n * @param platform Platform where the error occurred\n * @returns Properly typed PurchaseError instance\n */\n static fromPlatformError(\n errorData: any,\n platform: 'ios' | 'android',\n ): PurchaseError {\n const errorCode = errorData.code\n ? ErrorCodeUtils.fromPlatformCode(errorData.code, platform)\n : ErrorCode.E_UNKNOWN;\n\n return new PurchaseError(\n '[expo-iap]: PurchaseError',\n errorData.message || 'Unknown error occurred',\n errorData.responseCode,\n errorData.debugMessage,\n errorCode,\n errorData.productId,\n platform,\n );\n }\n\n /**\n * Gets the platform-specific error code for this error\n * @returns Platform-specific error code\n */\n getPlatformCode(): string | number | undefined {\n if (!this.code || !this.platform) return undefined;\n return ErrorCodeUtils.toPlatformCode(this.code, this.platform);\n }\n}\n\n/**\n * Utility functions for error code mapping and validation\n */\nexport const ErrorCodeUtils = {\n /**\n * Gets the native error code for the current platform\n * @param errorCode ErrorCode enum value\n * @returns Platform-specific error code from native constants\n */\n getNativeErrorCode: (errorCode: ErrorCode): string => {\n return NATIVE_ERROR_CODES[errorCode] || errorCode;\n },\n\n /**\n * Maps a platform-specific error code back to the standardized ErrorCode enum\n * @param platformCode Platform-specific error code (string for Android, number for iOS)\n * @param platform Target platform\n * @returns Corresponding ErrorCode enum value or E_UNKNOWN if not found\n */\n fromPlatformCode: (\n platformCode: string | number,\n platform: 'ios' | 'android',\n ): ErrorCode => {\n const mapping = ErrorCodeMapping[platform];\n\n for (const [errorCode, mappedCode] of Object.entries(mapping)) {\n if (mappedCode === platformCode) {\n return errorCode as ErrorCode;\n }\n }\n\n return ErrorCode.E_UNKNOWN;\n },\n\n /**\n * Maps an ErrorCode enum to platform-specific code\n * @param errorCode ErrorCode enum value\n * @param platform Target platform\n * @returns Platform-specific error code\n */\n toPlatformCode: (\n errorCode: ErrorCode,\n platform: 'ios' | 'android',\n ): string | number => {\n return (\n ErrorCodeMapping[platform][errorCode] ??\n (platform === 'ios' ? 0 : 'E_UNKNOWN')\n );\n },\n\n /**\n * Checks if an error code is valid for the specified platform\n * @param errorCode ErrorCode enum value\n * @param platform Target platform\n * @returns True if the error code is supported on the platform\n */\n isValidForPlatform: (\n errorCode: ErrorCode,\n platform: 'ios' | 'android',\n ): boolean => {\n return errorCode in ErrorCodeMapping[platform];\n },\n};\n\n// ============================================================================\n// Enhanced Unified Request Types\n// ============================================================================\n\n/**\n * Unified request props that work on both iOS and Android platforms\n * iOS will use 'sku', Android will use 'skus' (or convert sku to skus array)\n */\nexport interface UnifiedRequestPurchaseProps {\n // Universal properties - works on both platforms\n readonly sku?: string; // Single SKU (iOS native, Android fallback)\n readonly skus?: string[]; // Multiple SKUs (Android native, iOS uses first item)\n\n // iOS-specific properties (ignored on Android)\n readonly andDangerouslyFinishTransactionAutomaticallyIOS?: boolean;\n readonly appAccountToken?: string;\n readonly quantity?: number;\n readonly withOffer?: import('./types/ExpoIapIos.types').PaymentDiscount;\n\n // Android-specific properties (ignored on iOS)\n readonly obfuscatedAccountIdAndroid?: string;\n readonly obfuscatedProfileIdAndroid?: string;\n readonly isOfferPersonalized?: boolean;\n}\n\n/**\n * Unified subscription request props\n */\nexport interface UnifiedRequestSubscriptionProps\n extends UnifiedRequestPurchaseProps {\n // Android subscription-specific properties\n readonly purchaseTokenAndroid?: string;\n readonly replacementModeAndroid?: number;\n readonly subscriptionOffers?: {\n sku: string;\n offerToken: string;\n }[];\n}\n\n// ============================================================================\n// ============================================================================\n// Type Guards and Utility Functions\n// ============================================================================\n\n// Note: Type guard functions are exported from index.ts to avoid conflicts\n"]}
|
|
1
|
+
{"version":3,"file":"ExpoIap.types.js","sourceRoot":"","sources":["../src/ExpoIap.types.ts"],"names":[],"mappings":"AAcA,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AA4EnD;;;GAGG;AACH,MAAM,CAAN,IAAY,SAyBX;AAzBD,WAAY,SAAS;IACnB,oCAAuB,CAAA;IACvB,kDAAqC,CAAA;IACrC,0CAA6B,CAAA;IAC7B,sDAAyC,CAAA;IACzC,8CAAiC,CAAA;IACjC,gDAAmC,CAAA;IACnC,gDAAmC,CAAA;IACnC,kDAAqC,CAAA;IACrC,oEAAuD,CAAA;IACvD,8CAAiC,CAAA;IACjC,wCAA2B,CAAA;IAC3B,gDAAmC,CAAA;IACnC,oDAAuC,CAAA;IACvC,wFAA2E,CAAA;IAC3E,sDAAyC,CAAA;IACzC,4CAA+B,CAAA;IAC/B,wDAA2C,CAAA;IAC3C,kDAAqC,CAAA;IACrC,0CAA6B,CAAA;IAC7B,gFAAmE,CAAA;IACnE,8DAAiD,CAAA;IACjD,sDAAyC,CAAA;IACzC,oCAAuB,CAAA;IACvB,wDAA2C,CAAA;AAC7C,CAAC,EAzBW,SAAS,KAAT,SAAS,QAyBpB;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,GAAG,EAAE;QACH,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/B,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3B,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACjC,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7B,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/B,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACxC,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAChC,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,EAAE;QAChC,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE;QAC5B,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE;QAClC,CAAC,SAAS,CAAC,+BAA+B,CAAC,EAAE,EAAE;QAC/C,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,EAAE;QAC9B,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE;QAC3B,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE;QAC/B,CAAC,SAAS,CAAC,mCAAmC,CAAC,EAAE,EAAE;QACnD,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,EAAE;QAC7B,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAAE;QACnC,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,EAAE;QACtC,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE;QAClC,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE;QACzB,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAAE;KACpC;IACD,OAAO,EAAE;QACP,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,WAAW;QAClC,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,kBAAkB;QAChD,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,cAAc;QACxC,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,oBAAoB;QACpD,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,gBAAgB;QAC5C,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,iBAAiB;QAC9C,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,iBAAiB;QAC9C,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,kBAAkB;QAChD,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,2BAA2B;QAClE,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,gBAAgB;QAC5C,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,aAAa;QACtC,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,iBAAiB;QAC9C,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,mBAAmB;QAClD,CAAC,SAAS,CAAC,mCAAmC,CAAC,EAC7C,qCAAqC;QACvC,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,oBAAoB;QACpD,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,eAAe;QAC1C,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,qBAAqB;QACtD,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,kBAAkB;QAChD,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,cAAc;QACxC,CAAC,SAAS,CAAC,+BAA+B,CAAC,EACzC,iCAAiC;QACnC,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,wBAAwB;QAC5D,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,oBAAoB;QACpD,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,WAAW;QAClC,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,qBAAqB;KACvD;CACO,CAAC;AAEX,MAAM,OAAO,aAAa;IAEf;IACA;IACA;IACA;IACA;IACA;IACA;IAPT,YACS,IAAY,EACZ,OAAe,EACf,YAAqB,EACrB,YAAqB,EACrB,IAAgB,EAChB,SAAkB,EAClB,QAA4B;QAN5B,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAQ;QACf,iBAAY,GAAZ,YAAY,CAAS;QACrB,iBAAY,GAAZ,YAAY,CAAS;QACrB,SAAI,GAAJ,IAAI,CAAY;QAChB,cAAS,GAAT,SAAS,CAAS;QAClB,aAAQ,GAAR,QAAQ,CAAoB;QAEnC,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CACtB,SAAc,EACd,QAA2B;QAE3B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI;YAC9B,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC3D,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;QAExB,OAAO,IAAI,aAAa,CACtB,2BAA2B,EAC3B,SAAS,CAAC,OAAO,IAAI,wBAAwB,EAC7C,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,YAAY,EACtB,SAAS,EACT,SAAS,CAAC,SAAS,EACnB,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QACnD,OAAO,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B;;;;OAIG;IACH,kBAAkB,EAAE,CAAC,SAAoB,EAAU,EAAE;QACnD,OAAO,kBAAkB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,EAAE,CAChB,YAA6B,EAC7B,QAA2B,EAChB,EAAE;QACb,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE3C,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAChC,OAAO,SAAsB,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC,SAAS,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACH,cAAc,EAAE,CACd,SAAoB,EACpB,QAA2B,EACV,EAAE;QACnB,OAAO,CACL,gBAAgB,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;YACrC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CACvC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,EAAE,CAClB,SAAoB,EACpB,QAA2B,EAClB,EAAE;QACX,OAAO,SAAS,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;CACF,CAAC;AAgJF,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E,qDAAqD;AACrD,MAAM,UAAU,sBAAsB,CACpC,KAA0E;IAE1E,OAAO,KAAK,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAA0E;IAE1E,OAAO,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAA0E;IAE1E,OAAO,WAAW,IAAI,KAAK,IAAI,YAAY,IAAI,KAAK,CAAC;AACvD,CAAC;AAED,iFAAiF","sourcesContent":["import {\n ProductAndroid,\n ProductPurchaseAndroid,\n RequestPurchaseAndroidProps,\n RequestSubscriptionAndroidProps,\n SubscriptionProductAndroid,\n} from './types/ExpoIapAndroid.types';\nimport {\n ProductIos,\n ProductPurchaseIos,\n RequestPurchaseIosProps,\n RequestSubscriptionIosProps,\n SubscriptionProductIos,\n} from './types/ExpoIapIos.types';\nimport {NATIVE_ERROR_CODES} from './ExpoIapModule';\n\nexport type ChangeEventPayload = {\n value: string;\n};\n\nexport type ProductType = 'inapp' | 'subs';\n\nexport type ProductBase = {\n id: string;\n title: string;\n description: string;\n type: ProductType;\n displayName?: string;\n displayPrice: string;\n currency: string;\n price?: number;\n};\n\nexport type PurchaseBase = {\n id: string;\n transactionId?: string;\n transactionDate: number;\n transactionReceipt: string;\n};\n\n// Define literal platform types for better type discrimination\nexport type IosPlatform = {platform: 'ios'};\nexport type AndroidPlatform = {platform: 'android'};\n\n// Platform-agnostic unified product types (public API)\nexport type Product =\n | (ProductAndroid & AndroidPlatform)\n | (ProductIos & IosPlatform);\n\nexport type SubscriptionProduct =\n | (SubscriptionProductAndroid & AndroidPlatform)\n | (SubscriptionProductIos & IosPlatform);\n\n// Legacy internal platform-specific types (kept for backward compatibility)\nexport type LegacyRequestPurchaseProps =\n | RequestPurchaseIosProps\n | RequestPurchaseAndroidProps;\n\nexport type LegacyRequestSubscriptionProps =\n | RequestSubscriptionAndroidProps\n | RequestSubscriptionIosProps;\n\n// ============================================================================\n// Legacy Types (For backward compatibility with useIap hook)\n// ============================================================================\n\n// Re-export platform-specific purchase types for legacy compatibility\nexport type {ProductPurchaseAndroid} from './types/ExpoIapAndroid.types';\nexport type {ProductPurchaseIos} from './types/ExpoIapIos.types';\n\n// Union type for platform-specific purchase types (legacy support)\nexport type ProductPurchase =\n | (ProductPurchaseAndroid & AndroidPlatform)\n | (ProductPurchaseIos & IosPlatform);\n\n// Union type for platform-specific subscription purchase types (legacy support)\nexport type SubscriptionPurchase =\n | (ProductPurchaseAndroid & AndroidPlatform & {autoRenewingAndroid: boolean})\n | (ProductPurchaseIos & IosPlatform);\n\nexport type Purchase = ProductPurchase | SubscriptionPurchase;\n\n// Legacy result type\nexport type PurchaseResult = {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n purchaseTokenAndroid?: string;\n};\n/**\n * Centralized error codes for expo-iap\n * These are mapped to platform-specific error codes and provide consistent error handling\n */\nexport enum ErrorCode {\n E_UNKNOWN = 'E_UNKNOWN',\n E_USER_CANCELLED = 'E_USER_CANCELLED',\n E_USER_ERROR = 'E_USER_ERROR',\n E_ITEM_UNAVAILABLE = 'E_ITEM_UNAVAILABLE',\n E_REMOTE_ERROR = 'E_REMOTE_ERROR',\n E_NETWORK_ERROR = 'E_NETWORK_ERROR',\n E_SERVICE_ERROR = 'E_SERVICE_ERROR',\n E_RECEIPT_FAILED = 'E_RECEIPT_FAILED',\n E_RECEIPT_FINISHED_FAILED = 'E_RECEIPT_FINISHED_FAILED',\n E_NOT_PREPARED = 'E_NOT_PREPARED',\n E_NOT_ENDED = 'E_NOT_ENDED',\n E_ALREADY_OWNED = 'E_ALREADY_OWNED',\n E_DEVELOPER_ERROR = 'E_DEVELOPER_ERROR',\n E_BILLING_RESPONSE_JSON_PARSE_ERROR = 'E_BILLING_RESPONSE_JSON_PARSE_ERROR',\n E_DEFERRED_PAYMENT = 'E_DEFERRED_PAYMENT',\n E_INTERRUPTED = 'E_INTERRUPTED',\n E_IAP_NOT_AVAILABLE = 'E_IAP_NOT_AVAILABLE',\n E_PURCHASE_ERROR = 'E_PURCHASE_ERROR',\n E_SYNC_ERROR = 'E_SYNC_ERROR',\n E_TRANSACTION_VALIDATION_FAILED = 'E_TRANSACTION_VALIDATION_FAILED',\n E_ACTIVITY_UNAVAILABLE = 'E_ACTIVITY_UNAVAILABLE',\n E_ALREADY_PREPARED = 'E_ALREADY_PREPARED',\n E_PENDING = 'E_PENDING',\n E_CONNECTION_CLOSED = 'E_CONNECTION_CLOSED',\n}\n\n/**\n * Platform-specific error code mappings\n * Maps ErrorCode enum values to platform-specific integer codes\n */\nexport const ErrorCodeMapping = {\n ios: {\n [ErrorCode.E_UNKNOWN]: 0,\n [ErrorCode.E_SERVICE_ERROR]: 1,\n [ErrorCode.E_USER_CANCELLED]: 2,\n [ErrorCode.E_USER_ERROR]: 3,\n [ErrorCode.E_ITEM_UNAVAILABLE]: 4,\n [ErrorCode.E_REMOTE_ERROR]: 5,\n [ErrorCode.E_NETWORK_ERROR]: 6,\n [ErrorCode.E_RECEIPT_FAILED]: 7,\n [ErrorCode.E_RECEIPT_FINISHED_FAILED]: 8,\n [ErrorCode.E_DEVELOPER_ERROR]: 9,\n [ErrorCode.E_PURCHASE_ERROR]: 10,\n [ErrorCode.E_SYNC_ERROR]: 11,\n [ErrorCode.E_DEFERRED_PAYMENT]: 12,\n [ErrorCode.E_TRANSACTION_VALIDATION_FAILED]: 13,\n [ErrorCode.E_NOT_PREPARED]: 14,\n [ErrorCode.E_NOT_ENDED]: 15,\n [ErrorCode.E_ALREADY_OWNED]: 16,\n [ErrorCode.E_BILLING_RESPONSE_JSON_PARSE_ERROR]: 17,\n [ErrorCode.E_INTERRUPTED]: 18,\n [ErrorCode.E_IAP_NOT_AVAILABLE]: 19,\n [ErrorCode.E_ACTIVITY_UNAVAILABLE]: 20,\n [ErrorCode.E_ALREADY_PREPARED]: 21,\n [ErrorCode.E_PENDING]: 22,\n [ErrorCode.E_CONNECTION_CLOSED]: 23,\n },\n android: {\n [ErrorCode.E_UNKNOWN]: 'E_UNKNOWN',\n [ErrorCode.E_USER_CANCELLED]: 'E_USER_CANCELLED',\n [ErrorCode.E_USER_ERROR]: 'E_USER_ERROR',\n [ErrorCode.E_ITEM_UNAVAILABLE]: 'E_ITEM_UNAVAILABLE',\n [ErrorCode.E_REMOTE_ERROR]: 'E_REMOTE_ERROR',\n [ErrorCode.E_NETWORK_ERROR]: 'E_NETWORK_ERROR',\n [ErrorCode.E_SERVICE_ERROR]: 'E_SERVICE_ERROR',\n [ErrorCode.E_RECEIPT_FAILED]: 'E_RECEIPT_FAILED',\n [ErrorCode.E_RECEIPT_FINISHED_FAILED]: 'E_RECEIPT_FINISHED_FAILED',\n [ErrorCode.E_NOT_PREPARED]: 'E_NOT_PREPARED',\n [ErrorCode.E_NOT_ENDED]: 'E_NOT_ENDED',\n [ErrorCode.E_ALREADY_OWNED]: 'E_ALREADY_OWNED',\n [ErrorCode.E_DEVELOPER_ERROR]: 'E_DEVELOPER_ERROR',\n [ErrorCode.E_BILLING_RESPONSE_JSON_PARSE_ERROR]:\n 'E_BILLING_RESPONSE_JSON_PARSE_ERROR',\n [ErrorCode.E_DEFERRED_PAYMENT]: 'E_DEFERRED_PAYMENT',\n [ErrorCode.E_INTERRUPTED]: 'E_INTERRUPTED',\n [ErrorCode.E_IAP_NOT_AVAILABLE]: 'E_IAP_NOT_AVAILABLE',\n [ErrorCode.E_PURCHASE_ERROR]: 'E_PURCHASE_ERROR',\n [ErrorCode.E_SYNC_ERROR]: 'E_SYNC_ERROR',\n [ErrorCode.E_TRANSACTION_VALIDATION_FAILED]:\n 'E_TRANSACTION_VALIDATION_FAILED',\n [ErrorCode.E_ACTIVITY_UNAVAILABLE]: 'E_ACTIVITY_UNAVAILABLE',\n [ErrorCode.E_ALREADY_PREPARED]: 'E_ALREADY_PREPARED',\n [ErrorCode.E_PENDING]: 'E_PENDING',\n [ErrorCode.E_CONNECTION_CLOSED]: 'E_CONNECTION_CLOSED',\n },\n} as const;\n\nexport class PurchaseError implements Error {\n constructor(\n public name: string,\n public message: string,\n public responseCode?: number,\n public debugMessage?: string,\n public code?: ErrorCode,\n public productId?: string,\n public platform?: 'ios' | 'android',\n ) {\n this.name = '[expo-iap]: PurchaseError';\n this.message = message;\n this.responseCode = responseCode;\n this.debugMessage = debugMessage;\n this.code = code;\n this.productId = productId;\n this.platform = platform;\n }\n\n /**\n * Creates a PurchaseError from platform-specific error data\n * @param errorData Raw error data from native modules\n * @param platform Platform where the error occurred\n * @returns Properly typed PurchaseError instance\n */\n static fromPlatformError(\n errorData: any,\n platform: 'ios' | 'android',\n ): PurchaseError {\n const errorCode = errorData.code\n ? ErrorCodeUtils.fromPlatformCode(errorData.code, platform)\n : ErrorCode.E_UNKNOWN;\n\n return new PurchaseError(\n '[expo-iap]: PurchaseError',\n errorData.message || 'Unknown error occurred',\n errorData.responseCode,\n errorData.debugMessage,\n errorCode,\n errorData.productId,\n platform,\n );\n }\n\n /**\n * Gets the platform-specific error code for this error\n * @returns Platform-specific error code\n */\n getPlatformCode(): string | number | undefined {\n if (!this.code || !this.platform) return undefined;\n return ErrorCodeUtils.toPlatformCode(this.code, this.platform);\n }\n}\n\n/**\n * Utility functions for error code mapping and validation\n */\nexport const ErrorCodeUtils = {\n /**\n * Gets the native error code for the current platform\n * @param errorCode ErrorCode enum value\n * @returns Platform-specific error code from native constants\n */\n getNativeErrorCode: (errorCode: ErrorCode): string => {\n return NATIVE_ERROR_CODES[errorCode] || errorCode;\n },\n\n /**\n * Maps a platform-specific error code back to the standardized ErrorCode enum\n * @param platformCode Platform-specific error code (string for Android, number for iOS)\n * @param platform Target platform\n * @returns Corresponding ErrorCode enum value or E_UNKNOWN if not found\n */\n fromPlatformCode: (\n platformCode: string | number,\n platform: 'ios' | 'android',\n ): ErrorCode => {\n const mapping = ErrorCodeMapping[platform];\n\n for (const [errorCode, mappedCode] of Object.entries(mapping)) {\n if (mappedCode === platformCode) {\n return errorCode as ErrorCode;\n }\n }\n\n return ErrorCode.E_UNKNOWN;\n },\n\n /**\n * Maps an ErrorCode enum to platform-specific code\n * @param errorCode ErrorCode enum value\n * @param platform Target platform\n * @returns Platform-specific error code\n */\n toPlatformCode: (\n errorCode: ErrorCode,\n platform: 'ios' | 'android',\n ): string | number => {\n return (\n ErrorCodeMapping[platform][errorCode] ??\n (platform === 'ios' ? 0 : 'E_UNKNOWN')\n );\n },\n\n /**\n * Checks if an error code is valid for the specified platform\n * @param errorCode ErrorCode enum value\n * @param platform Target platform\n * @returns True if the error code is supported on the platform\n */\n isValidForPlatform: (\n errorCode: ErrorCode,\n platform: 'ios' | 'android',\n ): boolean => {\n return errorCode in ErrorCodeMapping[platform];\n },\n};\n\n// ============================================================================\n// Enhanced Unified Request Types\n// ============================================================================\n\n/**\n * Unified request props that work on both iOS and Android platforms\n * iOS will use 'sku', Android will use 'skus' (or convert sku to skus array)\n */\nexport interface UnifiedRequestPurchaseProps {\n // Universal properties - works on both platforms\n readonly sku?: string; // Single SKU (iOS native, Android fallback)\n readonly skus?: string[]; // Multiple SKUs (Android native, iOS uses first item)\n\n // iOS-specific properties (ignored on Android)\n readonly andDangerouslyFinishTransactionAutomaticallyIOS?: boolean;\n readonly appAccountToken?: string;\n readonly quantity?: number;\n readonly withOffer?: import('./types/ExpoIapIos.types').PaymentDiscount;\n\n // Android-specific properties (ignored on iOS)\n readonly obfuscatedAccountIdAndroid?: string;\n readonly obfuscatedProfileIdAndroid?: string;\n readonly isOfferPersonalized?: boolean;\n}\n\n/**\n * Unified subscription request props\n */\nexport interface UnifiedRequestSubscriptionProps\n extends UnifiedRequestPurchaseProps {\n // Android subscription-specific properties\n readonly purchaseTokenAndroid?: string;\n readonly replacementModeAndroid?: number;\n readonly subscriptionOffers?: {\n sku: string;\n offerToken: string;\n }[];\n}\n\n// ============================================================================\n// New Platform-Specific Request Types (v2.7.0+)\n// ============================================================================\n\n/**\n * iOS-specific purchase request parameters\n */\nexport interface IosRequestPurchaseProps {\n readonly sku: string;\n readonly andDangerouslyFinishTransactionAutomaticallyIOS?: boolean;\n readonly appAccountToken?: string;\n readonly quantity?: number;\n readonly withOffer?: import('./types/ExpoIapIos.types').PaymentDiscount;\n}\n\n/**\n * Android-specific purchase request parameters\n */\nexport interface AndroidRequestPurchaseProps {\n readonly skus: string[];\n readonly obfuscatedAccountIdAndroid?: string;\n readonly obfuscatedProfileIdAndroid?: string;\n readonly isOfferPersonalized?: boolean;\n}\n\n/**\n * Android-specific subscription request parameters\n */\nexport interface AndroidRequestSubscriptionProps\n extends AndroidRequestPurchaseProps {\n readonly purchaseTokenAndroid?: string;\n readonly replacementModeAndroid?: number;\n readonly subscriptionOffers: {\n sku: string;\n offerToken: string;\n }[];\n}\n\n/**\n * Modern platform-specific request structure (v2.7.0+)\n * Allows clear separation of iOS and Android parameters\n */\nexport interface PlatformRequestPurchaseProps {\n readonly ios?: IosRequestPurchaseProps;\n readonly android?: AndroidRequestPurchaseProps;\n}\n\n/**\n * Modern platform-specific subscription request structure (v2.7.0+)\n */\nexport interface PlatformRequestSubscriptionProps {\n readonly ios?: IosRequestPurchaseProps;\n readonly android?: AndroidRequestSubscriptionProps;\n}\n\n/**\n * Modern request purchase parameters (v2.7.0+)\n * This is the recommended API moving forward\n */\nexport type RequestPurchaseProps = PlatformRequestPurchaseProps;\n\n/**\n * Modern request subscription parameters (v2.7.0+)\n * This is the recommended API moving forward\n */\nexport type RequestSubscriptionProps = PlatformRequestSubscriptionProps;\n\n/**\n * Legacy request purchase parameters (deprecated)\n * Includes both unified and old platform-specific formats\n * @deprecated Use RequestPurchaseProps with platform-specific structure instead\n */\nexport type LegacyRequestPurchasePropsAll =\n | UnifiedRequestPurchaseProps\n | LegacyRequestPurchaseProps;\n\n/**\n * Legacy request subscription parameters (deprecated)\n * Includes both unified and old platform-specific formats\n * @deprecated Use RequestSubscriptionProps with platform-specific structure instead\n */\nexport type LegacyRequestSubscriptionPropsAll =\n | UnifiedRequestSubscriptionProps\n | LegacyRequestSubscriptionProps;\n\n/**\n * All supported request purchase parameters\n * Used internally for backward compatibility\n * @internal\n */\nexport type RequestPurchasePropsWithLegacy =\n | RequestPurchaseProps\n | LegacyRequestPurchasePropsAll;\n\n/**\n * All supported request subscription parameters\n * Used internally for backward compatibility\n * @internal\n */\nexport type RequestSubscriptionPropsWithLegacy =\n | RequestSubscriptionProps\n | LegacyRequestSubscriptionPropsAll;\n\n// ============================================================================\n// Type Guards and Utility Functions\n// ============================================================================\n\n// Type guards to check which API style is being used\nexport function isPlatformRequestProps(\n props: RequestPurchasePropsWithLegacy | RequestSubscriptionPropsWithLegacy,\n): props is PlatformRequestPurchaseProps | PlatformRequestSubscriptionProps {\n return 'ios' in props || 'android' in props;\n}\n\nexport function isUnifiedRequestProps(\n props: RequestPurchasePropsWithLegacy | RequestSubscriptionPropsWithLegacy,\n): props is UnifiedRequestPurchaseProps | UnifiedRequestSubscriptionProps {\n return 'sku' in props || 'skus' in props;\n}\n\nexport function isLegacyRequestProps(\n props: RequestPurchasePropsWithLegacy | RequestSubscriptionPropsWithLegacy,\n): props is LegacyRequestPurchaseProps | LegacyRequestSubscriptionProps {\n return 'productId' in props || 'productIds' in props;\n}\n\n// Note: Other type guard functions are exported from index.ts to avoid conflicts\n"]}
|
package/build/index.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { Product, ProductPurchase, Purchase, PurchaseError, PurchaseResult,
|
|
2
|
-
import { RequestPurchaseAndroidProps, RequestSubscriptionAndroidProps } from './types/ExpoIapAndroid.types';
|
|
3
|
-
import { RequestPurchaseIosProps, RequestSubscriptionIosProps } from './types/ExpoIapIos.types';
|
|
1
|
+
import { Product, ProductPurchase, Purchase, PurchaseError, PurchaseResult, RequestSubscriptionPropsWithLegacy, RequestPurchasePropsWithLegacy, SubscriptionProduct, SubscriptionPurchase } from './ExpoIap.types';
|
|
4
2
|
export * from './ExpoIap.types';
|
|
5
3
|
export * from './modules/android';
|
|
6
4
|
export * from './modules/ios';
|
|
@@ -45,17 +43,70 @@ export declare const getAvailablePurchases: ({ alsoPublishToEventListener, onlyI
|
|
|
45
43
|
onlyIncludeActiveItems?: boolean;
|
|
46
44
|
}) => Promise<ProductPurchase[]>;
|
|
47
45
|
type PurchaseRequest = {
|
|
48
|
-
request:
|
|
46
|
+
request: RequestPurchasePropsWithLegacy;
|
|
49
47
|
type?: 'inapp';
|
|
50
48
|
} | {
|
|
51
|
-
request:
|
|
49
|
+
request: RequestSubscriptionPropsWithLegacy;
|
|
52
50
|
type: 'subs';
|
|
53
51
|
};
|
|
52
|
+
/**
|
|
53
|
+
* Request a purchase for products or subscriptions.
|
|
54
|
+
*
|
|
55
|
+
* @param requestObj - Purchase request configuration
|
|
56
|
+
* @param requestObj.request - Platform-specific purchase parameters
|
|
57
|
+
* @param requestObj.type - Type of purchase: 'inapp' for products (default) or 'subs' for subscriptions
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* // Product purchase
|
|
62
|
+
* await requestPurchase({
|
|
63
|
+
* request: {
|
|
64
|
+
* ios: { sku: productId },
|
|
65
|
+
* android: { skus: [productId] }
|
|
66
|
+
* },
|
|
67
|
+
* type: 'inapp'
|
|
68
|
+
* });
|
|
69
|
+
*
|
|
70
|
+
* // Subscription purchase
|
|
71
|
+
* await requestPurchase({
|
|
72
|
+
* request: {
|
|
73
|
+
* ios: { sku: subscriptionId },
|
|
74
|
+
* android: {
|
|
75
|
+
* skus: [subscriptionId],
|
|
76
|
+
* subscriptionOffers: [{ sku: subscriptionId, offerToken: 'token' }]
|
|
77
|
+
* }
|
|
78
|
+
* },
|
|
79
|
+
* type: 'subs'
|
|
80
|
+
* });
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
54
83
|
export declare const requestPurchase: (requestObj: PurchaseRequest) => Promise<ProductPurchase | SubscriptionPurchase | ProductPurchase[] | SubscriptionPurchase[] | void>;
|
|
55
84
|
/**
|
|
56
|
-
* @deprecated Use `requestPurchase({ request, type: 'subs' })` instead. This method will be removed in version 3.0.0
|
|
85
|
+
* @deprecated Use `requestPurchase({ request, type: 'subs' })` instead. This method will be removed in version 3.0.0.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* // Old way (deprecated)
|
|
90
|
+
* await requestSubscription({
|
|
91
|
+
* sku: subscriptionId,
|
|
92
|
+
* // or for Android
|
|
93
|
+
* skus: [subscriptionId],
|
|
94
|
+
* });
|
|
95
|
+
*
|
|
96
|
+
* // New way (recommended)
|
|
97
|
+
* await requestPurchase({
|
|
98
|
+
* request: {
|
|
99
|
+
* ios: { sku: subscriptionId },
|
|
100
|
+
* android: {
|
|
101
|
+
* skus: [subscriptionId],
|
|
102
|
+
* subscriptionOffers: [{ sku: subscriptionId, offerToken: 'token' }]
|
|
103
|
+
* }
|
|
104
|
+
* },
|
|
105
|
+
* type: 'subs'
|
|
106
|
+
* });
|
|
107
|
+
* ```
|
|
57
108
|
*/
|
|
58
|
-
export declare const requestSubscription: (request:
|
|
109
|
+
export declare const requestSubscription: (request: RequestSubscriptionPropsWithLegacy) => Promise<SubscriptionPurchase | SubscriptionPurchase[] | null | void>;
|
|
59
110
|
export declare const finishTransaction: ({ purchase, isConsumable, }: {
|
|
60
111
|
purchase: Purchase;
|
|
61
112
|
isConsumable?: boolean;
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,OAAO,EACP,eAAe,EACf,QAAQ,EACR,aAAa,EACb,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,OAAO,EACP,eAAe,EACf,QAAQ,EACR,aAAa,EACb,cAAc,EACd,kCAAkC,EAClC,8BAA8B,EAC9B,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,iBAAiB,CAAC;AAKzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAGhE,eAAO,MAAM,EAAE,KAAmB,CAAC;AAEnC,oBAAY,QAAQ;IAClB,eAAe,qBAAqB;IACpC,aAAa,mBAAmB;IAChC,yFAAyF;IACzF,qBAAqB,4BAA4B;CAClD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,OAE1C;AAGD,eAAO,MAAM,OAAO,EAAoD;IACtE,WAAW,EAAE,CACX,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAC/B;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAC,CAAC;IAC1B,cAAc,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAC/B,IAAI,CAAC;CACX,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,UAAU,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI;YARrB,MAAM,IAAI;CAezB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAU,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI;YAlB1B,MAAM,IAAI;CAqBzB,CAAC;AAEF,wBAAgB,cAAc,QAE7B;AAED,eAAO,MAAM,WAAW,GAAU,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,OAAO,EAAE,CA2BnE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EAAE,KACb,OAAO,CAAC,mBAAmB,EAAE,CAkC/B,CAAC;AAEF,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAEtD;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,0DAGhC;IACD,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC7B,KAAG,OAAO,CAAC,eAAe,EAAE,CAQjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,0DAGlC;IACD,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC7B,KAAG,OAAO,CAAC,eAAe,EAAE,CAkB7B,CAAC;AAEN,eAAO,MAAM,qBAAqB,GAAI,0DAGnC;IACD,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC7B,KAAG,OAAO,CAAC,eAAe,EAAE,CAe7B,CAAC;AAiBN,KAAK,eAAe,GAChB;IACE,OAAO,EAAE,8BAA8B,CAAC;IACxC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACD;IACE,OAAO,EAAE,kCAAkC,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAoDN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,eAAe,GAC1B,YAAY,eAAe,KAC1B,OAAO,CACN,eAAe,GACf,oBAAoB,GACpB,eAAe,EAAE,GACjB,oBAAoB,EAAE,GACtB,IAAI,CAmGP,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,kCAAkC,KAC1C,OAAO,CAAC,oBAAoB,GAAG,oBAAoB,EAAE,GAAG,IAAI,GAAG,IAAI,CASrE,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,6BAG/B;IACD,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,KAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAiCnC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,QAAO,OAAO,CAAC,MAAM,CAKjD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,OAAO,CAAC,MAAM,CAK9C,CAAC;AAEF,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC"}
|