expo-iap 5.2.3 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.d.ts +3 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +3 -1
- package/build/index.js.map +1 -1
- package/build/kit-api.d.ts.map +1 -1
- package/build/kit-api.js +13 -38
- package/build/kit-api.js.map +1 -1
- package/build/types.d.ts +11 -0
- package/build/types.d.ts.map +1 -1
- package/build/types.js.map +1 -1
- package/build/vega-adapter.d.ts.map +1 -1
- package/build/vega-adapter.js +10 -0
- package/build/vega-adapter.js.map +1 -1
- package/openiap-versions.json +3 -3
- package/package.json +1 -1
- package/src/index.ts +3 -1
- package/src/kit-api.ts +23 -46
- package/src/types.ts +11 -0
- package/src/vega-adapter.ts +15 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vega-adapter.js","sourceRoot":"","sources":["../src/vega-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import {ErrorCode} from './types';\nimport type {\n ActiveSubscription,\n IapkitPurchaseState,\n Product,\n ProductSubscription,\n Purchase,\n PurchaseOptions,\n RequestVerifyPurchaseWithIapkitResult,\n SubResponseCodeAndroid,\n VerifyPurchaseWithProviderProps,\n VerifyPurchaseWithProviderResult,\n} from './types';\n\ntype ResponseOperation =\n | 'product-data'\n | 'purchase'\n | 'purchase-updates'\n | 'user-data'\n | 'notify-fulfillment';\n\nconst IAPKIT_VERIFY_TIMEOUT_MS = 10_000;\nconst MAX_IAPKIT_ERROR_DEPTH = 5;\nconst MAX_PRODUCT_DATA_BATCH_SIZE = 100;\nconst MAX_PURCHASE_UPDATE_PAGES = 100;\nconst NOTIFY_FULFILLMENT_ATTEMPT_TIMEOUT_MS = 2_000;\nconst NOTIFY_FULFILLMENT_MAX_ATTEMPTS = 15;\nconst NOTIFY_FULFILLMENT_RETRY_DELAY_MS = 1_000;\nconst PURCHASE_UPDATES_MAX_ATTEMPTS = 5;\nconst PURCHASE_UPDATES_RETRY_DELAY_MS = 1_000;\nconst PURCHASE_RECOVERY_CLOCK_SKEW_MS = 5_000;\n\ntype VegaListener = (payload: any) => void;\n\ninterface VegaPurchaseErrorPayload {\n code: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n message: string;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n}\n\ninterface RecoverPurchasesOptions {\n minPurchaseDateMs?: number;\n}\n\ninterface VegaPrice {\n priceCurrencyCode?: string | null;\n priceStr?: string | null;\n valueInMicros?: bigint | number | string | null;\n}\n\ninterface VegaProduct {\n description?: string | null;\n freeTrialPeriod?: string | null;\n itemType?: unknown;\n price?: VegaPrice | number | string | null;\n productType?: unknown;\n sku?: string | null;\n subscriptionBase?: string | null;\n subscriptionParent?: string | null;\n subscriptionPeriod?: string | null;\n term?: string | null;\n title?: string | null;\n}\n\ninterface VegaReceipt {\n cancelDate?: Date | number | string | null;\n deferredDate?: Date | number | string | null;\n deferredSku?: string | null;\n isCancelled?: boolean | null;\n isDeferred?: boolean | null;\n productType?: unknown;\n purchaseDate?: Date | number | string | null;\n receiptId?: string | null;\n sku?: string | null;\n termSku?: string | null;\n}\n\ninterface VegaUserData {\n countryCode?: string | null;\n marketplace?: string | null;\n userId?: string | null;\n}\n\ninterface VegaResponse {\n responseCode?: unknown;\n}\n\ninterface VegaProductDataResponse extends VegaResponse {\n productData?: Map<string, VegaProduct> | Record<string, VegaProduct> | null;\n}\n\ninterface VegaPurchaseResponse extends VegaResponse {\n receipt?: VegaReceipt | null;\n userData?: VegaUserData | null;\n}\n\ninterface VegaPurchaseUpdatesResponse extends VegaResponse {\n hasMore?: boolean | null;\n receiptList?: VegaReceipt[] | null;\n userData?: VegaUserData | null;\n}\n\ninterface VegaUserDataResponse extends VegaResponse {\n userData?: VegaUserData | null;\n}\n\ninterface VegaUserDataRequest {\n fetchUserProfileAccessConsentStatus: boolean;\n}\n\nexport interface VegaPurchasingService {\n getProductData(request: {skus: string[]}): Promise<VegaProductDataResponse>;\n getPurchaseUpdates(request: {\n reset: boolean;\n }): Promise<VegaPurchaseUpdatesResponse>;\n getUserData(request: VegaUserDataRequest): Promise<VegaUserDataResponse>;\n notifyFulfillment(request: {\n fulfillmentResult: number;\n receiptId: string;\n }): Promise<VegaResponse>;\n purchase(request: {sku: string}): Promise<VegaPurchaseResponse>;\n}\n\nexport interface ExpoIapVegaModule {\n ERROR_CODES: Record<string, string>;\n acknowledgePurchaseAndroid(purchaseToken: string): Promise<void>;\n addListener(eventName: string, listener: VegaListener): {remove: () => void};\n consumePurchaseAndroid(purchaseToken: string): Promise<void>;\n endConnection(): Promise<boolean>;\n fetchProducts(\n type: string,\n skus: string[],\n ): Promise<(Product | ProductSubscription)[]>;\n getActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<ActiveSubscription[]>;\n getAvailableItems(options?: PurchaseOptions): Promise<Purchase[]>;\n getStorefront(): Promise<string>;\n hasActiveSubscriptions(subscriptionIds?: string[] | null): Promise<boolean>;\n initConnection(config?: unknown): Promise<boolean>;\n removeListener(eventName: string, listener: VegaListener): void;\n requestPurchase(params: {\n skus?: string[];\n type?: string;\n }): Promise<Purchase[]>;\n verifyPurchaseWithProvider(\n options: VerifyPurchaseWithProviderProps,\n ): Promise<VerifyPurchaseWithProviderResult>;\n}\n\nconst PRODUCT_TYPE_SUBSCRIPTION = 3;\nconst FULFILLMENT_RESULT_FULFILLED = 1;\nconst RESPONSE_SUCCESS = 1;\nconst PURCHASE_RESPONSE_SUCCESS = 0;\nconst IAPKIT_DEFAULT_BASE_URL = 'https://kit.openiap.dev';\nconst IAPKIT_VERIFY_PATH = '/v1/purchase/verify';\nconst VEGA_PARSER_ERROR_MESSAGES = [\n 'Cannot convert undefined value to object',\n 'userId is not found while parsing Json',\n];\n\nfunction createVegaError(\n code: ErrorCode,\n message: string,\n responseCode?: unknown,\n productId?: string,\n): Error {\n const error = new Error(message) as Error & {\n code?: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n };\n error.code = code;\n error.debugMessage = message;\n error.productId = productId;\n if (typeof responseCode === 'number') {\n error.responseCode = responseCode;\n }\n return error;\n}\n\nfunction isValidIpv4Address(address: string): boolean {\n const octets = address.split('.');\n return (\n octets.length === 4 &&\n octets.every(\n (octet) => /^(?:0|[1-9]\\d{0,2})$/.test(octet) && Number(octet) <= 255,\n )\n );\n}\n\nfunction isValidIpv6Address(address: string): boolean {\n let ipv6Part = address;\n let ipv4GroupCount = 0;\n\n if (address.includes('.')) {\n const lastColon = address.lastIndexOf(':');\n if (lastColon < 0 || !isValidIpv4Address(address.slice(lastColon + 1))) {\n return false;\n }\n const ipv6Prefix = address.slice(0, lastColon);\n ipv6Part = ipv6Prefix.endsWith(':') ? `${ipv6Prefix}:` : ipv6Prefix;\n ipv4GroupCount = 2;\n }\n\n if (\n !ipv6Part.includes(':') ||\n !/^[0-9a-f:]+$/i.test(ipv6Part) ||\n ipv6Part.includes(':::')\n ) {\n return false;\n }\n\n const compressionIndex = ipv6Part.indexOf('::');\n const hasCompression = compressionIndex >= 0;\n if (\n (hasCompression && ipv6Part.indexOf('::', compressionIndex + 2) >= 0) ||\n (!hasCompression && (ipv6Part.startsWith(':') || ipv6Part.endsWith(':')))\n ) {\n return false;\n }\n\n const sections = hasCompression ? ipv6Part.split('::') : [ipv6Part];\n const groups: string[] = [];\n for (const section of sections) {\n if (section.length > 0) groups.push(...section.split(':'));\n }\n if (!groups.every((group) => /^[0-9a-f]{1,4}$/i.test(group))) {\n return false;\n }\n\n const groupCount = groups.length + ipv4GroupCount;\n return hasCompression ? groupCount < 8 : groupCount === 8;\n}\n\nfunction isValidHostname(hostname: string): boolean {\n if (/^[0-9.]+$/.test(hostname)) {\n return isValidIpv4Address(hostname);\n }\n\n const normalizedHostname = hostname.endsWith('.')\n ? hostname.slice(0, -1)\n : hostname;\n if (normalizedHostname.length === 0 || normalizedHostname.length > 253) {\n return false;\n }\n const hostnameLabels = normalizedHostname.split('.');\n const lastLabel = hostnameLabels[hostnameLabels.length - 1]!;\n if (/^(?:[0-9]+|0x[0-9a-f]+)$/i.test(lastLabel)) {\n return false;\n }\n\n return normalizedHostname\n .split('.')\n .every(\n (label) =>\n label.length <= 63 && /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(label),\n );\n}\n\nfunction getIapkitVerifyUrl(baseUrl?: string | null): string {\n const requestedBaseUrl =\n typeof baseUrl === 'string' && baseUrl.trim().length > 0\n ? baseUrl.trim()\n : IAPKIT_DEFAULT_BASE_URL;\n const normalizedBaseUrl = requestedBaseUrl.replace(/\\/+$/, '');\n // Kepler's URL polyfill throws for standard getters such as protocol,\n // host, and pathname. Parse the small origin-only contract directly.\n const originMatch = /^(https?):\\/\\/([^/?#@\\s\\\\]+)$/i.exec(normalizedBaseUrl);\n if (!originMatch) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'IAPKit baseUrl must be a valid HTTP(S) origin',\n );\n }\n\n const authority = originMatch[2]!;\n const isBracketedIpv6 = authority.startsWith('[');\n const authorityMatch = isBracketedIpv6\n ? /^\\[([^\\]]+)\\](?::([0-9]+))?$/.exec(authority)\n : /^([^:]+)(?::([0-9]+))?$/.exec(authority);\n const host = authorityMatch?.[1];\n const requestedPort = authorityMatch?.[2];\n const portNumber = requestedPort ? Number(requestedPort) : null;\n const hasValidHost =\n typeof host === 'string' &&\n (isBracketedIpv6 ? isValidIpv6Address(host) : isValidHostname(host));\n const hasValidPort =\n portNumber === null ||\n (Number.isInteger(portNumber) && portNumber >= 1 && portNumber <= 65535);\n if (!authorityMatch || !hasValidHost || !hasValidPort) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'IAPKit baseUrl must be a valid HTTP(S) origin',\n );\n }\n\n const scheme = originMatch[1]!.toLowerCase();\n const serializedHost = isBracketedIpv6 ? `[${host!}]` : host!;\n const port = requestedPort ? `:${requestedPort}` : '';\n return `${scheme}://${serializedHost}${port}${IAPKIT_VERIFY_PATH}`;\n}\n\nfunction toPurchaseErrorPayload(\n error: unknown,\n fallbackMessage: string,\n productId?: string,\n): VegaPurchaseErrorPayload {\n if (error instanceof Error) {\n const errorWithFields = error as Error & {\n code?: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n };\n return {\n code: errorWithFields.code ?? ErrorCode.PurchaseError,\n debugMessage: errorWithFields.debugMessage,\n isEmptyProductList: errorWithFields.isEmptyProductList,\n message: error.message || fallbackMessage,\n productId: errorWithFields.productId ?? productId,\n productIds: errorWithFields.productIds,\n productType: errorWithFields.productType,\n responseCode: errorWithFields.responseCode,\n subResponseCodeAndroid: errorWithFields.subResponseCodeAndroid,\n };\n }\n\n return {\n code: ErrorCode.PurchaseError,\n message: fallbackMessage,\n productId,\n };\n}\n\nfunction responseCodeName(responseCode: unknown): string {\n return typeof responseCode === 'string' ? responseCode.toUpperCase() : '';\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction withTimeout<T>(\n operation: Promise<T>,\n timeoutMs: number,\n timeoutError: Error,\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => reject(timeoutError), timeoutMs);\n operation.then(\n (value) => {\n clearTimeout(timeoutId);\n resolve(value);\n },\n (error) => {\n clearTimeout(timeoutId);\n reject(error);\n },\n );\n });\n}\n\nfunction isSuccess(\n operation: ResponseOperation,\n responseCode: unknown,\n): boolean {\n if (typeof responseCode === 'number') {\n return operation === 'purchase'\n ? responseCode === PURCHASE_RESPONSE_SUCCESS\n : responseCode === RESPONSE_SUCCESS;\n }\n\n const name = responseCodeName(responseCode);\n return name === 'SUCCESSFUL' || name === 'SUCCESS' || name === 'OK';\n}\n\nfunction mapErrorCode(\n operation: ResponseOperation,\n responseCode: unknown,\n): ErrorCode {\n const name = responseCodeName(responseCode);\n if (name.includes('ALREADY_PURCHASED')) return ErrorCode.AlreadyOwned;\n if (name.includes('INVALID_SKU')) return ErrorCode.SkuNotFound;\n if (name.includes('NOT_SUPPORTED')) return ErrorCode.FeatureNotSupported;\n if (name.includes('PENDING')) return ErrorCode.Pending;\n if (name.includes('FAILED')) {\n return operation === 'purchase'\n ? ErrorCode.UserCancelled\n : ErrorCode.ServiceError;\n }\n\n if (typeof responseCode === 'number') {\n if (operation === 'purchase') {\n if (responseCode === 1) return ErrorCode.AlreadyOwned;\n if (responseCode === 2) return ErrorCode.SkuNotFound;\n if (responseCode === 3) return ErrorCode.FeatureNotSupported;\n if (responseCode === 4) return ErrorCode.UserCancelled;\n }\n if (operation !== 'purchase' && responseCode === 2) {\n return ErrorCode.FeatureNotSupported;\n }\n if (operation !== 'purchase' && responseCode === 3) {\n return ErrorCode.ServiceError;\n }\n if (operation !== 'purchase' && responseCode === 4) {\n return ErrorCode.ServiceError;\n }\n }\n\n if (operation === 'product-data') return ErrorCode.QueryProduct;\n if (operation === 'user-data') return ErrorCode.InitConnection;\n return ErrorCode.PurchaseError;\n}\n\nfunction shouldRetryResponse(\n operation: ResponseOperation,\n responseCode: unknown,\n): boolean {\n if (isSuccess(operation, responseCode)) return false;\n if (operation === 'purchase') return false;\n if (typeof responseCode === 'number') return responseCode === 3;\n return responseCodeName(responseCode).includes('FAILED');\n}\n\nfunction shouldRecoverPurchaseResponse(responseCode: unknown): boolean {\n if (typeof responseCode === 'number') {\n return responseCode === 1 || responseCode === 4;\n }\n const name = responseCodeName(responseCode);\n return name.includes('ALREADY_PURCHASED') || name.includes('FAILED');\n}\n\nfunction ensureSuccessful(\n operation: ResponseOperation,\n response: VegaResponse | null | undefined,\n message: string,\n productId?: string,\n): void {\n const responseCode = response?.responseCode;\n if (isSuccess(operation, responseCode)) return;\n throw createVegaError(\n mapErrorCode(operation, responseCode),\n `${message}. Amazon Vega responseCode=${String(responseCode ?? 'unknown')}`,\n responseCode,\n productId,\n );\n}\n\nfunction toTimestamp(value: unknown): number {\n if (value instanceof Date) return value.getTime();\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value === 'string') {\n const timestamp = Date.parse(value);\n return Number.isFinite(timestamp) ? timestamp : 0;\n }\n return 0;\n}\n\nfunction priceNumberToMicros(value: number): number {\n return Math.trunc(Math.abs(value) < 10_000 ? value * 1_000_000 : value);\n}\n\nfunction toPriceAmountMicros(value: unknown): string {\n if (typeof value === 'bigint') return value.toString();\n if (typeof value === 'number' && Number.isFinite(value)) {\n return Math.trunc(value).toString();\n }\n if (typeof value === 'string' && value.length > 0) return value;\n return '0';\n}\n\nfunction getPriceObject(product: VegaProduct): VegaPrice {\n return product.price != null &&\n typeof product.price === 'object' &&\n !Array.isArray(product.price)\n ? product.price\n : {};\n}\n\nfunction getPriceAmountMicros(product: VegaProduct): unknown {\n if (typeof product.price === 'number' && Number.isFinite(product.price)) {\n return priceNumberToMicros(product.price);\n }\n return getPriceObject(product).valueInMicros;\n}\n\nfunction microsToPrice(value: unknown): number | null {\n const micros =\n typeof value === 'bigint' ? Number(value) : Number(value ?? Number.NaN);\n if (!Number.isFinite(micros)) return null;\n return micros / 1_000_000;\n}\n\nfunction getPrice(product: VegaProduct): number | null {\n if (typeof product.price === 'number' && Number.isFinite(product.price)) {\n return Math.abs(product.price) < 10_000\n ? product.price\n : product.price / 1_000_000;\n }\n return microsToPrice(getPriceObject(product).valueInMicros);\n}\n\nfunction getDisplayPrice(product: VegaProduct): string {\n const price = product.price;\n if (typeof price === 'number' && Number.isFinite(price)) {\n const value = Math.abs(price) < 10_000 ? price : price / 1_000_000;\n return value.toFixed(2);\n }\n if (typeof price === 'string') return price;\n return getPriceObject(product).priceStr ?? '';\n}\n\nfunction getCurrency(product: VegaProduct): string {\n return getPriceObject(product).priceCurrencyCode ?? '';\n}\n\nfunction isSubscription(productType: unknown): boolean {\n if (typeof productType === 'number')\n return productType === PRODUCT_TYPE_SUBSCRIPTION;\n if (typeof productType === 'string') {\n return productType.toUpperCase().includes('SUBSCRIPTION');\n }\n return false;\n}\n\nfunction productTypeToOpenIap(productType: unknown): 'in-app' | 'subs' {\n return isSubscription(productType) ? 'subs' : 'in-app';\n}\n\nfunction getProductType(product: VegaProduct): unknown {\n return product.productType ?? product.itemType;\n}\n\nfunction getSubscriptionPeriod(product: VegaProduct): string {\n if (product.subscriptionPeriod) return product.subscriptionPeriod;\n\n const term = product.term?.toLowerCase() ?? '';\n if (term.includes('year')) return 'P1Y';\n if (term.includes('month')) return 'P1M';\n if (term.includes('week')) return 'P1W';\n if (term.includes('day')) return 'P1D';\n return '';\n}\n\nfunction nonBlankString(value: unknown): string | null {\n if (typeof value !== 'string') return null;\n return value.trim().length > 0 ? value : null;\n}\n\nfunction getReceiptSku(receipt: VegaReceipt): string {\n return nonBlankString(receipt.sku) ?? nonBlankString(receipt.termSku) ?? '';\n}\n\nfunction getCachedProductType(\n receipt: VegaReceipt,\n productTypesBySku: Map<string, unknown>,\n fallbackSku?: string,\n): unknown {\n const sku = getReceiptSku(receipt) || fallbackSku || '';\n return sku ? productTypesBySku.get(sku) : undefined;\n}\n\nfunction productDataToArray(\n productData?: Map<string, VegaProduct> | Record<string, VegaProduct> | null,\n): VegaProduct[] {\n if (!productData) return [];\n if (productData instanceof Map) {\n return Array.from(productData.entries()).map(([sku, product]) => ({\n ...product,\n sku: product.sku ?? sku,\n }));\n }\n return Object.entries(productData).map(([sku, product]) => ({\n ...product,\n sku: product.sku ?? sku,\n }));\n}\n\nfunction chunkArray<T>(items: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += size) {\n chunks.push(items.slice(index, index + size));\n }\n return chunks;\n}\n\nfunction createUserDataRequest(): VegaUserDataRequest {\n return {\n fetchUserProfileAccessConsentStatus: false,\n };\n}\n\nfunction isVegaParserError(error: unknown): boolean {\n return (\n error instanceof Error &&\n VEGA_PARSER_ERROR_MESSAGES.some((message) =>\n error.message.includes(message),\n )\n );\n}\n\nfunction malformedVegaResponse(error: unknown, operation: string): Error {\n const detail = error instanceof Error ? error.message : String(error);\n return createVegaError(\n ErrorCode.BillingResponseJsonParseError,\n `${operation} returned a malformed response: ${detail}`,\n );\n}\n\nfunction createPricingPhase(product: VegaProduct) {\n return {\n billingCycleCount: 0,\n billingPeriod: getSubscriptionPeriod(product),\n formattedPrice: getDisplayPrice(product),\n priceAmountMicros: toPriceAmountMicros(getPriceAmountMicros(product)),\n priceCurrencyCode: getCurrency(product),\n recurrenceMode: 1,\n };\n}\n\nfunction createStandardizedSubscriptionOffer(product: VegaProduct) {\n const pricingPhase = createPricingPhase(product);\n const sku = product.sku ?? '';\n return {\n basePlanIdAndroid: sku,\n currency: getCurrency(product),\n displayPrice: getDisplayPrice(product),\n id: sku,\n offerTagsAndroid: [],\n offerTokenAndroid: '',\n paymentMode: 'pay-as-you-go' as const,\n period: null,\n price: getPrice(product) ?? 0,\n pricingPhasesAndroid: {\n pricingPhaseList: [pricingPhase],\n },\n type: 'introductory' as const,\n };\n}\n\nfunction mapProduct(product: VegaProduct): Product | ProductSubscription {\n const sku = product.sku ?? '';\n const type = productTypeToOpenIap(getProductType(product));\n const base = {\n id: sku,\n title: product.title ?? sku,\n description: product.description ?? '',\n displayName: product.title ?? sku,\n displayPrice: getDisplayPrice(product),\n currency: getCurrency(product),\n price: getPrice(product),\n debugDescription: null,\n platform: 'android' as const,\n nameAndroid: product.title ?? sku,\n productStatusAndroid: 'ok' as const,\n discountOffers: null,\n };\n\n if (type === 'subs') {\n return {\n ...base,\n type,\n subscriptionOffers: [createStandardizedSubscriptionOffer(product)],\n };\n }\n\n return {\n ...base,\n type,\n subscriptionOffers: null,\n };\n}\n\nfunction mapReceipt(\n receipt: VegaReceipt,\n fallbackProductType?: unknown,\n productIdOverride?: string,\n userData?: VegaUserData | null,\n): Purchase {\n const receiptId = receipt.receiptId ?? '';\n const productId = productIdOverride ?? getReceiptSku(receipt);\n const type = productTypeToOpenIap(receipt.productType ?? fallbackProductType);\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n const isActive = !isCanceled;\n const deferredSku = nonBlankString(receipt.deferredSku);\n\n return {\n id: receiptId,\n productId,\n transactionDate: toTimestamp(receipt.purchaseDate),\n purchaseToken: receiptId,\n currentPlanId:\n type === 'subs' ? (nonBlankString(receipt.termSku) ?? productId) : null,\n ids: productId ? [productId] : [],\n store: 'amazon',\n quantity: 1,\n purchaseState: isActive ? 'purchased' : 'unknown',\n isAutoRenewing: type === 'subs' && isActive,\n transactionId: receiptId,\n autoRenewingAndroid: type === 'subs' && isActive,\n dataAndroid: JSON.stringify(receipt),\n signatureAndroid: null,\n isAcknowledgedAndroid: false,\n packageNameAndroid: null,\n obfuscatedAccountIdAndroid: null,\n obfuscatedProfileIdAndroid: null,\n developerPayloadAndroid: null,\n isSuspendedAndroid: false,\n pendingPurchaseUpdateAndroid:\n receipt.isDeferred && deferredSku\n ? {products: [deferredSku], purchaseToken: receiptId}\n : null,\n userIdAmazon: nonBlankString(userData?.userId),\n userMarketplaceAmazon: nonBlankString(userData?.marketplace),\n };\n}\n\nexport function createExpoIapVegaModule(\n service: VegaPurchasingService,\n): ExpoIapVegaModule {\n const productTypesBySku = new Map<string, unknown>();\n const subscriptionBasesBySku = new Map<string, string>();\n const subscriptionParentsBySku = new Map<string, string>();\n const listenersByEventName = new Map<string, Set<VegaListener>>();\n let cachedUserData: VegaUserData | null = null;\n\n const emit = (eventName: string, payload: unknown): void => {\n for (const listener of listenersByEventName.get(eventName) ?? []) {\n listener(payload);\n }\n };\n\n const cacheProductMetadata = (product: VegaProduct): void => {\n if (!product.sku) return;\n\n const productType = getProductType(product);\n productTypesBySku.set(product.sku, productType);\n\n if (product.subscriptionBase) {\n subscriptionBasesBySku.set(product.sku, product.subscriptionBase);\n productTypesBySku.set(product.subscriptionBase, productType);\n }\n if (product.subscriptionParent) {\n subscriptionParentsBySku.set(product.sku, product.subscriptionParent);\n productTypesBySku.set(product.subscriptionParent, productType);\n }\n };\n\n const receiptMatchesRequestedSku = (\n receipt: VegaReceipt,\n sku: string,\n ): boolean => {\n const receiptSku = getReceiptSku(receipt);\n if (!receiptSku) return false;\n if (receiptSku === sku || receipt.termSku === sku) return true;\n if (receiptSku === subscriptionBasesBySku.get(sku)) return true;\n if (receiptSku === subscriptionParentsBySku.get(sku)) return true;\n return receiptSku === `${sku}.base`;\n };\n\n const resolveReceiptProductId = (\n receipt: VegaReceipt,\n productIdOverride?: string,\n ): string => {\n if (productIdOverride) return productIdOverride;\n\n const receiptSku = getReceiptSku(receipt);\n if (!receiptSku) return '';\n\n for (const [productSku, subscriptionBase] of subscriptionBasesBySku) {\n if (receiptSku === subscriptionBase) return productSku;\n }\n\n for (const [productSku, subscriptionParent] of subscriptionParentsBySku) {\n if (receiptSku === subscriptionParent) return productSku;\n }\n\n if (receiptSku.endsWith('.base')) {\n const parentSku = receiptSku.slice(0, -'.base'.length);\n if (productTypesBySku.has(parentSku)) return parentSku;\n }\n\n return receiptSku;\n };\n\n const getUserData = async (): Promise<VegaUserData | null> => {\n let response: VegaUserDataResponse;\n try {\n response = await service.getUserData(createUserDataRequest());\n } catch (error) {\n if (isVegaParserError(error)) {\n return null;\n }\n throw error;\n }\n ensureSuccessful('user-data', response, 'Failed to fetch Amazon user data');\n cachedUserData = response.userData ?? null;\n return cachedUserData;\n };\n\n const getStorefront = async (): Promise<string> => {\n try {\n const userData = await getUserData();\n const storefront = userData?.marketplace ?? userData?.countryCode;\n if (typeof storefront !== 'string' || storefront.trim().length === 0) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega storefront lookup returned no country code.',\n );\n }\n return storefront;\n } catch (error) {\n const errorCode =\n error instanceof Error\n ? (error as Error & {code?: unknown}).code\n : undefined;\n if (\n typeof errorCode === 'string' &&\n Object.values(ErrorCode).includes(errorCode as ErrorCode)\n ) {\n throw error;\n }\n throw createVegaError(\n ErrorCode.ServiceError,\n `Failed to get Amazon Vega storefront: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n };\n\n const getPurchaseUpdateReceipts = async (): Promise<VegaReceipt[]> => {\n const receipts: VegaReceipt[] = [];\n let reset = true;\n let hasMore = false;\n let pageCount = 0;\n\n do {\n if (pageCount >= MAX_PURCHASE_UPDATE_PAGES) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega purchase updates exceeded the pagination limit.',\n );\n }\n pageCount++;\n\n let response: VegaPurchaseUpdatesResponse | null = null;\n for (\n let attempt = 1;\n attempt <= PURCHASE_UPDATES_MAX_ATTEMPTS;\n attempt += 1\n ) {\n try {\n response = await service.getPurchaseUpdates({reset});\n } catch (error) {\n if (isVegaParserError(error)) {\n throw malformedVegaResponse(error, 'Amazon Vega purchase updates');\n }\n throw error;\n }\n\n if (\n !response ||\n !shouldRetryResponse('purchase-updates', response.responseCode) ||\n attempt === PURCHASE_UPDATES_MAX_ATTEMPTS\n ) {\n break;\n }\n await delay(PURCHASE_UPDATES_RETRY_DELAY_MS);\n }\n if (!response) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega purchase updates returned no response.',\n );\n }\n ensureSuccessful(\n 'purchase-updates',\n response,\n 'Failed to fetch Amazon purchase updates',\n );\n cachedUserData = response.userData ?? cachedUserData;\n receipts.push(...(response.receiptList ?? []));\n hasMore = Boolean(response.hasMore);\n reset = false;\n } while (hasMore);\n\n return receipts;\n };\n\n const getProductData = async (\n skus: string[],\n message: string,\n ): Promise<VegaProduct[]> => {\n const products: VegaProduct[] = [];\n for (const batch of chunkArray(skus, MAX_PRODUCT_DATA_BATCH_SIZE)) {\n const response = await service.getProductData({skus: batch});\n ensureSuccessful('product-data', response, message);\n products.push(...productDataToArray(response.productData));\n }\n return products;\n };\n\n const hydrateProductTypesForReceipts = async (\n receipts: VegaReceipt[],\n ): Promise<void> => {\n const missingSkus = new Set<string>();\n\n for (const receipt of receipts) {\n const sku = getReceiptSku(receipt);\n if (!sku) continue;\n if (receipt.productType != null) {\n productTypesBySku.set(sku, receipt.productType);\n continue;\n }\n\n const resolvedSku = resolveReceiptProductId(receipt);\n const resolvedProductType = productTypesBySku.get(resolvedSku);\n if (resolvedProductType != null) {\n productTypesBySku.set(sku, resolvedProductType);\n } else if (!productTypesBySku.has(sku)) {\n missingSkus.add(sku);\n }\n }\n\n if (missingSkus.size === 0) return;\n\n let products: VegaProduct[];\n try {\n products = await getProductData(\n Array.from(missingSkus),\n 'Failed to fetch Amazon Vega product data for purchase updates',\n );\n } catch (error) {\n if (isVegaParserError(error)) {\n throw malformedVegaResponse(\n error,\n 'Amazon Vega purchase product metadata',\n );\n }\n throw error;\n }\n\n for (const product of products) {\n cacheProductMetadata(product);\n }\n };\n\n const getAvailableItems = async (\n _options?: PurchaseOptions,\n ): Promise<Purchase[]> => {\n const receipts = await getPurchaseUpdateReceipts();\n await hydrateProductTypesForReceipts(receipts);\n return receipts\n .filter((receipt) => {\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n return !isCanceled;\n })\n .map((receipt) =>\n mapReceipt(\n receipt,\n getCachedProductType(receipt, productTypesBySku),\n resolveReceiptProductId(receipt),\n cachedUserData,\n ),\n );\n };\n\n const finishReceipt = async (purchaseToken: string): Promise<void> => {\n if (!purchaseToken) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'purchaseToken is required to finish an Amazon Vega transaction.',\n );\n }\n\n let lastResponse: VegaResponse | null = null;\n for (\n let attempt = 1;\n attempt <= NOTIFY_FULFILLMENT_MAX_ATTEMPTS;\n attempt += 1\n ) {\n const response = await withTimeout(\n service.notifyFulfillment({\n fulfillmentResult: FULFILLMENT_RESULT_FULFILLED,\n receiptId: purchaseToken,\n }),\n NOTIFY_FULFILLMENT_ATTEMPT_TIMEOUT_MS,\n createVegaError(\n ErrorCode.ServiceTimeout,\n 'Amazon Vega notifyFulfillment timed out.',\n ),\n );\n if (isSuccess('notify-fulfillment', response?.responseCode)) return;\n lastResponse = response;\n if (attempt < NOTIFY_FULFILLMENT_MAX_ATTEMPTS) {\n await delay(NOTIFY_FULFILLMENT_RETRY_DELAY_MS);\n }\n }\n\n ensureSuccessful(\n 'notify-fulfillment',\n lastResponse,\n 'Failed to notify Amazon Vega fulfillment',\n );\n };\n\n const recoverFulfillablePurchases = async (\n sku: string,\n fallbackProductType?: unknown,\n options?: RecoverPurchasesOptions,\n ): Promise<{requestedPurchases: Purchase[]}> => {\n const receipts = await getPurchaseUpdateReceipts();\n await hydrateProductTypesForReceipts(receipts);\n const requestedPurchases: Purchase[] = [];\n\n for (const receipt of receipts) {\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n if (isCanceled) continue;\n\n const purchaseTimestamp = toTimestamp(receipt.purchaseDate);\n if (\n options?.minPurchaseDateMs != null &&\n (purchaseTimestamp === 0 ||\n purchaseTimestamp < options.minPurchaseDateMs)\n ) {\n continue;\n }\n\n const matchesRequestedSku = receiptMatchesRequestedSku(receipt, sku);\n if (!matchesRequestedSku) {\n continue;\n }\n\n const purchase = mapReceipt(\n receipt,\n receipt.productType ??\n getCachedProductType(receipt, productTypesBySku, sku) ??\n fallbackProductType,\n resolveReceiptProductId(receipt, sku),\n cachedUserData,\n );\n requestedPurchases.push(purchase);\n emit('purchase-updated', purchase);\n }\n\n return {requestedPurchases};\n };\n\n const verifyWithIapkit = async (\n options: VerifyPurchaseWithProviderProps,\n ): Promise<VerifyPurchaseWithProviderResult> => {\n function normalizeIapkitState(state: unknown): IapkitPurchaseState {\n const normalized =\n typeof state === 'string'\n ? state.toLowerCase().replace(/_/g, '-')\n : 'unknown';\n const states = new Set<IapkitPurchaseState>([\n 'entitled',\n 'pending-acknowledgment',\n 'pending',\n 'canceled',\n 'expired',\n 'ready-to-consume',\n 'consumed',\n 'unknown',\n 'inauthentic',\n ]);\n return states.has(normalized as IapkitPurchaseState)\n ? (normalized as IapkitPurchaseState)\n : 'unknown';\n }\n\n function extractIapkitErrorMessage(\n json: unknown,\n depth = 0,\n ): string | null {\n if (depth > MAX_IAPKIT_ERROR_DEPTH) return null;\n if (!json || typeof json !== 'object') return null;\n const record = json as Record<string, unknown>;\n function extractStringMessage(value: string): string {\n if (depth >= MAX_IAPKIT_ERROR_DEPTH) return value;\n try {\n const parsed = JSON.parse(value);\n return parsed && typeof parsed === 'object'\n ? (extractIapkitErrorMessage(parsed, depth + 1) ?? value)\n : value;\n } catch {\n return value;\n }\n }\n\n const details = record.details;\n if (details && typeof details === 'object') {\n const originalError = (details as Record<string, unknown>)\n .originalError;\n if (typeof originalError === 'string') {\n return extractStringMessage(originalError);\n }\n }\n\n const errors = record.errors;\n if (Array.isArray(errors) && errors.length > 0) {\n const firstError = errors[0];\n return typeof firstError === 'string'\n ? extractStringMessage(firstError)\n : extractIapkitErrorMessage(firstError, depth + 1);\n }\n\n if (typeof record.message === 'string') {\n return extractStringMessage(record.message);\n }\n if (typeof record.error === 'string') {\n return extractStringMessage(record.error);\n }\n return null;\n }\n\n function parseIapkitJsonResponse(text: string): unknown | null {\n if (!text.trim()) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n }\n\n function isIapkitResultObject(\n json: unknown,\n ): json is Record<string, unknown> {\n return Boolean(json) && typeof json === 'object' && !Array.isArray(json);\n }\n\n function hasIapkitErrors(json: unknown): boolean {\n if (!isIapkitResultObject(json)) return false;\n const errors = json.errors;\n return Array.isArray(errors) && errors.length > 0;\n }\n\n function readIapkitResult(\n json: Record<string, unknown>,\n status: number,\n ): RequestVerifyPurchaseWithIapkitResult {\n if (\n typeof json.isValid !== 'boolean' ||\n typeof json.state !== 'string' ||\n json.store !== 'amazon'\n ) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${status}).`,\n );\n }\n\n const productId = json.productId;\n if (productId != null && typeof productId !== 'string') {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${status}).`,\n );\n }\n\n return {\n isValid: json.isValid,\n ...(productId == null ? {} : {productId}),\n state: normalizeIapkitState(json.state),\n store: 'amazon',\n };\n }\n\n if (options.provider !== 'iapkit') {\n throw createVegaError(\n ErrorCode.FeatureNotSupported,\n `Unsupported purchase verification provider: ${options.provider}.`,\n );\n }\n\n const iapkit = options.iapkit;\n const payloadCount =\n Number(Boolean(iapkit?.amazon)) +\n Number(Boolean(iapkit?.apple)) +\n Number(Boolean(iapkit?.google));\n const amazon = iapkit?.amazon;\n if (payloadCount !== 1 || !amazon) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification requires exactly one amazon payload.',\n );\n }\n\n const receiptId =\n typeof amazon.receiptId === 'string' ? amazon.receiptId.trim() : '';\n if (!receiptId) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification requires amazon.receiptId.',\n );\n }\n\n let userId = typeof amazon.userId === 'string' ? amazon.userId.trim() : '';\n if (!userId) {\n await getUserData();\n userId = cachedUserData?.userId?.trim() ?? '';\n }\n if (!userId) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification could not resolve userId.',\n );\n }\n\n const apiKey =\n typeof iapkit?.apiKey === 'string' ? iapkit.apiKey.trim() : '';\n const verificationUrl = getIapkitVerifyUrl(iapkit?.baseUrl);\n let response: Response;\n try {\n const controller = new AbortController();\n const timeout = setTimeout(\n () => controller.abort(),\n IAPKIT_VERIFY_TIMEOUT_MS,\n );\n response = await fetch(verificationUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(apiKey ? {Authorization: `Bearer ${apiKey}`} : {}),\n },\n body: JSON.stringify({\n store: 'amazon',\n userId,\n receiptId,\n ...(amazon.sandbox == null ? {} : {sandbox: amazon.sandbox}),\n }),\n signal: controller.signal,\n }).finally(() => clearTimeout(timeout));\n } catch (error) {\n throw createVegaError(\n ErrorCode.NetworkError,\n error instanceof Error\n ? error.message\n : 'Failed to reach IAPKit verification endpoint.',\n );\n }\n let text: string;\n try {\n text = await response.text();\n } catch (error) {\n throw createVegaError(\n ErrorCode.NetworkError,\n error instanceof Error\n ? error.message\n : 'Failed to read IAPKit verification response.',\n );\n }\n const json = parseIapkitJsonResponse(text);\n\n if (!response.ok) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n extractIapkitErrorMessage(json) ?? `HTTP ${response.status}`,\n );\n }\n\n if (json === null) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned non-JSON response (HTTP ${response.status}).`,\n );\n }\n\n if (!isIapkitResultObject(json)) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${response.status}).`,\n );\n }\n\n if (hasIapkitErrors(json)) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n extractIapkitErrorMessage(json) ?? 'IAPKit verification failed.',\n );\n }\n\n const result = readIapkitResult(json, response.status);\n return {\n provider: 'iapkit',\n iapkit: result,\n };\n };\n\n const vegaModule: ExpoIapVegaModule = {\n ERROR_CODES: ErrorCode,\n async initConnection(): Promise<boolean> {\n return true;\n },\n async endConnection(): Promise<boolean> {\n productTypesBySku.clear();\n subscriptionBasesBySku.clear();\n subscriptionParentsBySku.clear();\n cachedUserData = null;\n return true;\n },\n async fetchProducts(\n type: string,\n skus: string[],\n ): Promise<(Product | ProductSubscription)[]> {\n if (!Array.isArray(skus) || skus.length === 0) {\n throw createVegaError(ErrorCode.EmptySkuList, 'No SKUs provided');\n }\n\n const products = await getProductData(\n skus,\n 'Failed to fetch Amazon Vega products',\n );\n\n return products\n .filter((product) => {\n cacheProductMetadata(product);\n const openIapType = productTypeToOpenIap(getProductType(product));\n if (type === 'all') return true;\n if (type === 'subs') return openIapType === 'subs';\n return openIapType === 'in-app';\n })\n .map(mapProduct);\n },\n async requestPurchase(params): Promise<Purchase[]> {\n let sku: string | undefined;\n try {\n const skus = params.skus ?? [];\n if (skus.length !== 1) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega purchase expects exactly one SKU per request.',\n );\n }\n\n sku = skus[0]!;\n const fallbackProductType =\n params.type === 'subs'\n ? PRODUCT_TYPE_SUBSCRIPTION\n : productTypesBySku.get(sku);\n if (fallbackProductType != null) {\n productTypesBySku.set(sku, fallbackProductType);\n }\n let response: VegaPurchaseResponse;\n const purchaseStartedAtMs =\n Date.now() - PURCHASE_RECOVERY_CLOCK_SKEW_MS;\n try {\n response = await service.purchase({sku});\n } catch (error) {\n if (isVegaParserError(error)) {\n try {\n const recovered = await recoverFulfillablePurchases(\n sku,\n fallbackProductType,\n {minPurchaseDateMs: purchaseStartedAtMs},\n );\n if (recovered.requestedPurchases.length > 0) {\n return recovered.requestedPurchases;\n }\n } catch {\n // Keep the original parser error as the source of truth.\n }\n }\n throw error;\n }\n\n if (\n !isSuccess('purchase', response.responseCode) &&\n shouldRecoverPurchaseResponse(response.responseCode)\n ) {\n try {\n const recovered = await recoverFulfillablePurchases(\n sku,\n fallbackProductType,\n );\n if (recovered.requestedPurchases.length > 0) {\n return recovered.requestedPurchases;\n }\n } catch {\n // Keep the original purchase response as the source of truth.\n }\n }\n\n ensureSuccessful(\n 'purchase',\n response,\n 'Failed to complete Amazon Vega purchase',\n sku,\n );\n cachedUserData = response.userData ?? cachedUserData;\n\n if (!response.receipt) return [];\n const purchase = mapReceipt(\n response.receipt,\n fallbackProductType,\n sku,\n response.userData ?? cachedUserData,\n );\n emit('purchase-updated', purchase);\n return [purchase];\n } catch (error) {\n emit(\n 'purchase-error',\n toPurchaseErrorPayload(\n error,\n 'Failed to complete Amazon Vega purchase',\n sku,\n ),\n );\n throw error;\n }\n },\n getAvailableItems,\n async getActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<ActiveSubscription[]> {\n const requestedIds = new Set(subscriptionIds ?? []);\n const purchases = await getAvailableItems({\n includeSuspendedAndroid: false,\n });\n return purchases\n .filter(\n (purchase) =>\n purchase.isAutoRenewing &&\n (requestedIds.size === 0 || requestedIds.has(purchase.productId)),\n )\n .map((purchase) => ({\n productId: purchase.productId,\n isActive: true,\n transactionId: purchase.transactionId ?? purchase.id,\n purchaseToken: purchase.purchaseToken ?? null,\n transactionDate: purchase.transactionDate,\n expirationDateIOS: null,\n environmentIOS: null,\n daysUntilExpirationIOS: null,\n renewalInfoIOS: null,\n autoRenewingAndroid:\n (\n purchase as Purchase & {\n autoRenewingAndroid?: boolean | null;\n }\n ).autoRenewingAndroid ?? null,\n basePlanIdAndroid: purchase.currentPlanId ?? purchase.productId,\n currentPlanId: purchase.currentPlanId ?? purchase.productId,\n purchaseTokenAndroid: purchase.purchaseToken ?? null,\n }));\n },\n async hasActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<boolean> {\n const subscriptions =\n await vegaModule.getActiveSubscriptions(subscriptionIds);\n return subscriptions.length > 0;\n },\n async acknowledgePurchaseAndroid(purchaseToken): Promise<void> {\n await finishReceipt(purchaseToken);\n },\n async consumePurchaseAndroid(purchaseToken): Promise<void> {\n await finishReceipt(purchaseToken);\n },\n async getStorefront(): Promise<string> {\n return getStorefront();\n },\n async verifyPurchaseWithProvider(options) {\n return verifyWithIapkit(options);\n },\n addListener(eventName, listener) {\n const listeners = listenersByEventName.get(eventName) ?? new Set();\n listeners.add(listener);\n listenersByEventName.set(eventName, listeners);\n return {\n remove: () => {\n listeners.delete(listener);\n },\n };\n },\n removeListener(eventName, listener): void {\n listenersByEventName.get(eventName)?.delete(listener);\n },\n };\n\n return vegaModule;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"vega-adapter.js","sourceRoot":"","sources":["../src/vega-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import {ErrorCode} from './types';\nimport type {\n ActiveSubscription,\n IapkitPurchaseState,\n Product,\n ProductSubscription,\n Purchase,\n PurchaseOptions,\n RequestVerifyPurchaseWithIapkitResult,\n SubResponseCodeAndroid,\n VerifyPurchaseWithProviderProps,\n VerifyPurchaseWithProviderResult,\n} from './types';\n\ntype ResponseOperation =\n | 'product-data'\n | 'purchase'\n | 'purchase-updates'\n | 'user-data'\n | 'notify-fulfillment';\n\nconst IAPKIT_VERIFY_TIMEOUT_MS = 10_000;\nconst MAX_IAPKIT_ERROR_DEPTH = 5;\nconst MAX_PRODUCT_DATA_BATCH_SIZE = 100;\nconst MAX_PURCHASE_UPDATE_PAGES = 100;\nconst NOTIFY_FULFILLMENT_ATTEMPT_TIMEOUT_MS = 2_000;\nconst NOTIFY_FULFILLMENT_MAX_ATTEMPTS = 15;\nconst NOTIFY_FULFILLMENT_RETRY_DELAY_MS = 1_000;\nconst PURCHASE_UPDATES_MAX_ATTEMPTS = 5;\nconst PURCHASE_UPDATES_RETRY_DELAY_MS = 1_000;\nconst PURCHASE_RECOVERY_CLOCK_SKEW_MS = 5_000;\n\ntype VegaListener = (payload: any) => void;\n\ninterface VegaPurchaseErrorPayload {\n code: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n message: string;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n}\n\ninterface RecoverPurchasesOptions {\n minPurchaseDateMs?: number;\n}\n\ninterface VegaPrice {\n priceCurrencyCode?: string | null;\n priceStr?: string | null;\n valueInMicros?: bigint | number | string | null;\n}\n\ninterface VegaProduct {\n description?: string | null;\n freeTrialPeriod?: string | null;\n itemType?: unknown;\n price?: VegaPrice | number | string | null;\n productType?: unknown;\n sku?: string | null;\n subscriptionBase?: string | null;\n subscriptionParent?: string | null;\n subscriptionPeriod?: string | null;\n term?: string | null;\n title?: string | null;\n}\n\ninterface VegaReceipt {\n cancelDate?: Date | number | string | null;\n deferredDate?: Date | number | string | null;\n deferredSku?: string | null;\n isCancelled?: boolean | null;\n isDeferred?: boolean | null;\n productType?: unknown;\n purchaseDate?: Date | number | string | null;\n receiptId?: string | null;\n sku?: string | null;\n termSku?: string | null;\n}\n\ninterface VegaUserData {\n countryCode?: string | null;\n marketplace?: string | null;\n userId?: string | null;\n}\n\ninterface VegaResponse {\n responseCode?: unknown;\n}\n\ninterface VegaProductDataResponse extends VegaResponse {\n productData?: Map<string, VegaProduct> | Record<string, VegaProduct> | null;\n}\n\ninterface VegaPurchaseResponse extends VegaResponse {\n receipt?: VegaReceipt | null;\n userData?: VegaUserData | null;\n}\n\ninterface VegaPurchaseUpdatesResponse extends VegaResponse {\n hasMore?: boolean | null;\n receiptList?: VegaReceipt[] | null;\n userData?: VegaUserData | null;\n}\n\ninterface VegaUserDataResponse extends VegaResponse {\n userData?: VegaUserData | null;\n}\n\ninterface VegaUserDataRequest {\n fetchUserProfileAccessConsentStatus: boolean;\n}\n\nexport interface VegaPurchasingService {\n getProductData(request: {skus: string[]}): Promise<VegaProductDataResponse>;\n getPurchaseUpdates(request: {\n reset: boolean;\n }): Promise<VegaPurchaseUpdatesResponse>;\n getUserData(request: VegaUserDataRequest): Promise<VegaUserDataResponse>;\n notifyFulfillment(request: {\n fulfillmentResult: number;\n receiptId: string;\n }): Promise<VegaResponse>;\n purchase(request: {sku: string}): Promise<VegaPurchaseResponse>;\n}\n\nexport interface ExpoIapVegaModule {\n ERROR_CODES: Record<string, string>;\n acknowledgePurchaseAndroid(purchaseToken: string): Promise<void>;\n addListener(eventName: string, listener: VegaListener): {remove: () => void};\n consumePurchaseAndroid(purchaseToken: string): Promise<void>;\n endConnection(): Promise<boolean>;\n fetchProducts(\n type: string,\n skus: string[],\n ): Promise<(Product | ProductSubscription)[]>;\n getActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<ActiveSubscription[]>;\n getAvailableItems(options?: PurchaseOptions): Promise<Purchase[]>;\n getStorefront(): Promise<string>;\n hasActiveSubscriptions(subscriptionIds?: string[] | null): Promise<boolean>;\n initConnection(config?: unknown): Promise<boolean>;\n removeListener(eventName: string, listener: VegaListener): void;\n requestPurchase(params: {\n skus?: string[];\n type?: string;\n }): Promise<Purchase[]>;\n verifyPurchaseWithProvider(\n options: VerifyPurchaseWithProviderProps,\n ): Promise<VerifyPurchaseWithProviderResult>;\n}\n\nconst PRODUCT_TYPE_SUBSCRIPTION = 3;\nconst FULFILLMENT_RESULT_FULFILLED = 1;\nconst RESPONSE_SUCCESS = 1;\nconst PURCHASE_RESPONSE_SUCCESS = 0;\nconst IAPKIT_DEFAULT_BASE_URL = 'https://kit.openiap.dev';\nconst IAPKIT_VERIFY_PATH = '/v1/purchase/verify';\nconst VEGA_PARSER_ERROR_MESSAGES = [\n 'Cannot convert undefined value to object',\n 'userId is not found while parsing Json',\n];\n\nfunction createVegaError(\n code: ErrorCode,\n message: string,\n responseCode?: unknown,\n productId?: string,\n): Error {\n const error = new Error(message) as Error & {\n code?: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n };\n error.code = code;\n error.debugMessage = message;\n error.productId = productId;\n if (typeof responseCode === 'number') {\n error.responseCode = responseCode;\n }\n return error;\n}\n\nfunction isValidIpv4Address(address: string): boolean {\n const octets = address.split('.');\n return (\n octets.length === 4 &&\n octets.every(\n (octet) => /^(?:0|[1-9]\\d{0,2})$/.test(octet) && Number(octet) <= 255,\n )\n );\n}\n\nfunction isValidIpv6Address(address: string): boolean {\n let ipv6Part = address;\n let ipv4GroupCount = 0;\n\n if (address.includes('.')) {\n const lastColon = address.lastIndexOf(':');\n if (lastColon < 0 || !isValidIpv4Address(address.slice(lastColon + 1))) {\n return false;\n }\n const ipv6Prefix = address.slice(0, lastColon);\n ipv6Part = ipv6Prefix.endsWith(':') ? `${ipv6Prefix}:` : ipv6Prefix;\n ipv4GroupCount = 2;\n }\n\n if (\n !ipv6Part.includes(':') ||\n !/^[0-9a-f:]+$/i.test(ipv6Part) ||\n ipv6Part.includes(':::')\n ) {\n return false;\n }\n\n const compressionIndex = ipv6Part.indexOf('::');\n const hasCompression = compressionIndex >= 0;\n if (\n (hasCompression && ipv6Part.indexOf('::', compressionIndex + 2) >= 0) ||\n (!hasCompression && (ipv6Part.startsWith(':') || ipv6Part.endsWith(':')))\n ) {\n return false;\n }\n\n const sections = hasCompression ? ipv6Part.split('::') : [ipv6Part];\n const groups: string[] = [];\n for (const section of sections) {\n if (section.length > 0) groups.push(...section.split(':'));\n }\n if (!groups.every((group) => /^[0-9a-f]{1,4}$/i.test(group))) {\n return false;\n }\n\n const groupCount = groups.length + ipv4GroupCount;\n return hasCompression ? groupCount < 8 : groupCount === 8;\n}\n\nfunction isValidHostname(hostname: string): boolean {\n if (/^[0-9.]+$/.test(hostname)) {\n return isValidIpv4Address(hostname);\n }\n\n const normalizedHostname = hostname.endsWith('.')\n ? hostname.slice(0, -1)\n : hostname;\n if (normalizedHostname.length === 0 || normalizedHostname.length > 253) {\n return false;\n }\n const hostnameLabels = normalizedHostname.split('.');\n const lastLabel = hostnameLabels[hostnameLabels.length - 1]!;\n if (/^(?:[0-9]+|0x[0-9a-f]+)$/i.test(lastLabel)) {\n return false;\n }\n\n return normalizedHostname\n .split('.')\n .every(\n (label) =>\n label.length <= 63 && /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(label),\n );\n}\n\nfunction getIapkitVerifyUrl(baseUrl?: string | null): string {\n const requestedBaseUrl =\n typeof baseUrl === 'string' && baseUrl.trim().length > 0\n ? baseUrl.trim()\n : IAPKIT_DEFAULT_BASE_URL;\n const normalizedBaseUrl = requestedBaseUrl.replace(/\\/+$/, '');\n // Kepler's URL polyfill throws for standard getters such as protocol,\n // host, and pathname. Parse the small origin-only contract directly.\n const originMatch = /^(https?):\\/\\/([^/?#@\\s\\\\]+)$/i.exec(normalizedBaseUrl);\n if (!originMatch) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'IAPKit baseUrl must be a valid HTTP(S) origin',\n );\n }\n\n const authority = originMatch[2]!;\n const isBracketedIpv6 = authority.startsWith('[');\n const authorityMatch = isBracketedIpv6\n ? /^\\[([^\\]]+)\\](?::([0-9]+))?$/.exec(authority)\n : /^([^:]+)(?::([0-9]+))?$/.exec(authority);\n const host = authorityMatch?.[1];\n const requestedPort = authorityMatch?.[2];\n const portNumber = requestedPort ? Number(requestedPort) : null;\n const hasValidHost =\n typeof host === 'string' &&\n (isBracketedIpv6 ? isValidIpv6Address(host) : isValidHostname(host));\n const hasValidPort =\n portNumber === null ||\n (Number.isInteger(portNumber) && portNumber >= 1 && portNumber <= 65535);\n if (!authorityMatch || !hasValidHost || !hasValidPort) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'IAPKit baseUrl must be a valid HTTP(S) origin',\n );\n }\n\n const scheme = originMatch[1]!.toLowerCase();\n const serializedHost = isBracketedIpv6 ? `[${host!}]` : host!;\n const port = requestedPort ? `:${requestedPort}` : '';\n return `${scheme}://${serializedHost}${port}${IAPKIT_VERIFY_PATH}`;\n}\n\nfunction toPurchaseErrorPayload(\n error: unknown,\n fallbackMessage: string,\n productId?: string,\n): VegaPurchaseErrorPayload {\n if (error instanceof Error) {\n const errorWithFields = error as Error & {\n code?: ErrorCode;\n debugMessage?: string;\n isEmptyProductList?: boolean;\n productId?: string;\n productIds?: string[];\n productType?: string;\n responseCode?: number;\n subResponseCodeAndroid?: SubResponseCodeAndroid;\n };\n return {\n code: errorWithFields.code ?? ErrorCode.PurchaseError,\n debugMessage: errorWithFields.debugMessage,\n isEmptyProductList: errorWithFields.isEmptyProductList,\n message: error.message || fallbackMessage,\n productId: errorWithFields.productId ?? productId,\n productIds: errorWithFields.productIds,\n productType: errorWithFields.productType,\n responseCode: errorWithFields.responseCode,\n subResponseCodeAndroid: errorWithFields.subResponseCodeAndroid,\n };\n }\n\n return {\n code: ErrorCode.PurchaseError,\n message: fallbackMessage,\n productId,\n };\n}\n\nfunction responseCodeName(responseCode: unknown): string {\n return typeof responseCode === 'string' ? responseCode.toUpperCase() : '';\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction withTimeout<T>(\n operation: Promise<T>,\n timeoutMs: number,\n timeoutError: Error,\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => reject(timeoutError), timeoutMs);\n operation.then(\n (value) => {\n clearTimeout(timeoutId);\n resolve(value);\n },\n (error) => {\n clearTimeout(timeoutId);\n reject(error);\n },\n );\n });\n}\n\nfunction isSuccess(\n operation: ResponseOperation,\n responseCode: unknown,\n): boolean {\n if (typeof responseCode === 'number') {\n return operation === 'purchase'\n ? responseCode === PURCHASE_RESPONSE_SUCCESS\n : responseCode === RESPONSE_SUCCESS;\n }\n\n const name = responseCodeName(responseCode);\n return name === 'SUCCESSFUL' || name === 'SUCCESS' || name === 'OK';\n}\n\nfunction mapErrorCode(\n operation: ResponseOperation,\n responseCode: unknown,\n): ErrorCode {\n const name = responseCodeName(responseCode);\n if (name.includes('ALREADY_PURCHASED')) return ErrorCode.AlreadyOwned;\n if (name.includes('INVALID_SKU')) return ErrorCode.SkuNotFound;\n if (name.includes('NOT_SUPPORTED')) return ErrorCode.FeatureNotSupported;\n if (name.includes('PENDING')) return ErrorCode.Pending;\n if (name.includes('FAILED')) {\n return operation === 'purchase'\n ? ErrorCode.UserCancelled\n : ErrorCode.ServiceError;\n }\n\n if (typeof responseCode === 'number') {\n if (operation === 'purchase') {\n if (responseCode === 1) return ErrorCode.AlreadyOwned;\n if (responseCode === 2) return ErrorCode.SkuNotFound;\n if (responseCode === 3) return ErrorCode.FeatureNotSupported;\n if (responseCode === 4) return ErrorCode.UserCancelled;\n }\n if (operation !== 'purchase' && responseCode === 2) {\n return ErrorCode.FeatureNotSupported;\n }\n if (operation !== 'purchase' && responseCode === 3) {\n return ErrorCode.ServiceError;\n }\n if (operation !== 'purchase' && responseCode === 4) {\n return ErrorCode.ServiceError;\n }\n }\n\n if (operation === 'product-data') return ErrorCode.QueryProduct;\n if (operation === 'user-data') return ErrorCode.InitConnection;\n return ErrorCode.PurchaseError;\n}\n\nfunction shouldRetryResponse(\n operation: ResponseOperation,\n responseCode: unknown,\n): boolean {\n if (isSuccess(operation, responseCode)) return false;\n if (operation === 'purchase') return false;\n if (typeof responseCode === 'number') return responseCode === 3;\n return responseCodeName(responseCode).includes('FAILED');\n}\n\nfunction shouldRecoverPurchaseResponse(responseCode: unknown): boolean {\n if (typeof responseCode === 'number') {\n return responseCode === 1 || responseCode === 4;\n }\n const name = responseCodeName(responseCode);\n return name.includes('ALREADY_PURCHASED') || name.includes('FAILED');\n}\n\nfunction ensureSuccessful(\n operation: ResponseOperation,\n response: VegaResponse | null | undefined,\n message: string,\n productId?: string,\n): void {\n const responseCode = response?.responseCode;\n if (isSuccess(operation, responseCode)) return;\n throw createVegaError(\n mapErrorCode(operation, responseCode),\n `${message}. Amazon Vega responseCode=${String(responseCode ?? 'unknown')}`,\n responseCode,\n productId,\n );\n}\n\nfunction toTimestamp(value: unknown): number {\n if (value instanceof Date) return value.getTime();\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value === 'string') {\n const timestamp = Date.parse(value);\n return Number.isFinite(timestamp) ? timestamp : 0;\n }\n return 0;\n}\n\nfunction priceNumberToMicros(value: number): number {\n return Math.trunc(Math.abs(value) < 10_000 ? value * 1_000_000 : value);\n}\n\nfunction toPriceAmountMicros(value: unknown): string {\n if (typeof value === 'bigint') return value.toString();\n if (typeof value === 'number' && Number.isFinite(value)) {\n return Math.trunc(value).toString();\n }\n if (typeof value === 'string' && value.length > 0) return value;\n return '0';\n}\n\nfunction getPriceObject(product: VegaProduct): VegaPrice {\n return product.price != null &&\n typeof product.price === 'object' &&\n !Array.isArray(product.price)\n ? product.price\n : {};\n}\n\nfunction getPriceAmountMicros(product: VegaProduct): unknown {\n if (typeof product.price === 'number' && Number.isFinite(product.price)) {\n return priceNumberToMicros(product.price);\n }\n return getPriceObject(product).valueInMicros;\n}\n\nfunction microsToPrice(value: unknown): number | null {\n const micros =\n typeof value === 'bigint' ? Number(value) : Number(value ?? Number.NaN);\n if (!Number.isFinite(micros)) return null;\n return micros / 1_000_000;\n}\n\nfunction getPrice(product: VegaProduct): number | null {\n if (typeof product.price === 'number' && Number.isFinite(product.price)) {\n return Math.abs(product.price) < 10_000\n ? product.price\n : product.price / 1_000_000;\n }\n return microsToPrice(getPriceObject(product).valueInMicros);\n}\n\nfunction getDisplayPrice(product: VegaProduct): string {\n const price = product.price;\n if (typeof price === 'number' && Number.isFinite(price)) {\n const value = Math.abs(price) < 10_000 ? price : price / 1_000_000;\n return value.toFixed(2);\n }\n if (typeof price === 'string') return price;\n return getPriceObject(product).priceStr ?? '';\n}\n\nfunction getCurrency(product: VegaProduct): string {\n return getPriceObject(product).priceCurrencyCode ?? '';\n}\n\nfunction isSubscription(productType: unknown): boolean {\n if (typeof productType === 'number')\n return productType === PRODUCT_TYPE_SUBSCRIPTION;\n if (typeof productType === 'string') {\n return productType.toUpperCase().includes('SUBSCRIPTION');\n }\n return false;\n}\n\nfunction productTypeToOpenIap(productType: unknown): 'in-app' | 'subs' {\n return isSubscription(productType) ? 'subs' : 'in-app';\n}\n\nfunction getProductType(product: VegaProduct): unknown {\n return product.productType ?? product.itemType;\n}\n\nfunction getSubscriptionPeriod(product: VegaProduct): string {\n if (product.subscriptionPeriod) return product.subscriptionPeriod;\n\n const term = product.term?.toLowerCase() ?? '';\n if (term.includes('year')) return 'P1Y';\n if (term.includes('month')) return 'P1M';\n if (term.includes('week')) return 'P1W';\n if (term.includes('day')) return 'P1D';\n return '';\n}\n\nfunction nonBlankString(value: unknown): string | null {\n if (typeof value !== 'string') return null;\n return value.trim().length > 0 ? value : null;\n}\n\nfunction getReceiptSku(receipt: VegaReceipt): string {\n return nonBlankString(receipt.sku) ?? nonBlankString(receipt.termSku) ?? '';\n}\n\nfunction getCachedProductType(\n receipt: VegaReceipt,\n productTypesBySku: Map<string, unknown>,\n fallbackSku?: string,\n): unknown {\n const sku = getReceiptSku(receipt) || fallbackSku || '';\n return sku ? productTypesBySku.get(sku) : undefined;\n}\n\nfunction productDataToArray(\n productData?: Map<string, VegaProduct> | Record<string, VegaProduct> | null,\n): VegaProduct[] {\n if (!productData) return [];\n if (productData instanceof Map) {\n return Array.from(productData.entries()).map(([sku, product]) => ({\n ...product,\n sku: product.sku ?? sku,\n }));\n }\n return Object.entries(productData).map(([sku, product]) => ({\n ...product,\n sku: product.sku ?? sku,\n }));\n}\n\nfunction chunkArray<T>(items: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += size) {\n chunks.push(items.slice(index, index + size));\n }\n return chunks;\n}\n\nfunction createUserDataRequest(): VegaUserDataRequest {\n return {\n fetchUserProfileAccessConsentStatus: false,\n };\n}\n\nfunction isVegaParserError(error: unknown): boolean {\n return (\n error instanceof Error &&\n VEGA_PARSER_ERROR_MESSAGES.some((message) =>\n error.message.includes(message),\n )\n );\n}\n\nfunction malformedVegaResponse(error: unknown, operation: string): Error {\n const detail = error instanceof Error ? error.message : String(error);\n return createVegaError(\n ErrorCode.BillingResponseJsonParseError,\n `${operation} returned a malformed response: ${detail}`,\n );\n}\n\nfunction createPricingPhase(product: VegaProduct) {\n return {\n billingCycleCount: 0,\n billingPeriod: getSubscriptionPeriod(product),\n formattedPrice: getDisplayPrice(product),\n priceAmountMicros: toPriceAmountMicros(getPriceAmountMicros(product)),\n priceCurrencyCode: getCurrency(product),\n recurrenceMode: 1,\n };\n}\n\nfunction createStandardizedSubscriptionOffer(product: VegaProduct) {\n const pricingPhase = createPricingPhase(product);\n const sku = product.sku ?? '';\n return {\n basePlanIdAndroid: sku,\n currency: getCurrency(product),\n displayPrice: getDisplayPrice(product),\n id: sku,\n offerTagsAndroid: [],\n offerTokenAndroid: '',\n paymentMode: 'pay-as-you-go' as const,\n period: null,\n price: getPrice(product) ?? 0,\n pricingPhasesAndroid: {\n pricingPhaseList: [pricingPhase],\n },\n type: 'introductory' as const,\n };\n}\n\nfunction mapProduct(product: VegaProduct): Product | ProductSubscription {\n const sku = product.sku ?? '';\n const type = productTypeToOpenIap(getProductType(product));\n const base = {\n id: sku,\n title: product.title ?? sku,\n description: product.description ?? '',\n displayName: product.title ?? sku,\n displayPrice: getDisplayPrice(product),\n currency: getCurrency(product),\n price: getPrice(product),\n debugDescription: null,\n platform: 'android' as const,\n nameAndroid: product.title ?? sku,\n productStatusAndroid: 'ok' as const,\n discountOffers: null,\n };\n\n if (type === 'subs') {\n return {\n ...base,\n type,\n subscriptionOffers: [createStandardizedSubscriptionOffer(product)],\n };\n }\n\n return {\n ...base,\n type,\n subscriptionOffers: null,\n };\n}\n\nfunction mapReceipt(\n receipt: VegaReceipt,\n fallbackProductType?: unknown,\n productIdOverride?: string,\n userData?: VegaUserData | null,\n): Purchase {\n const receiptId = receipt.receiptId ?? '';\n const productId = productIdOverride ?? getReceiptSku(receipt);\n const type = productTypeToOpenIap(receipt.productType ?? fallbackProductType);\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n const isActive = !isCanceled;\n const deferredSku = nonBlankString(receipt.deferredSku);\n\n return {\n id: receiptId,\n productId,\n transactionDate: toTimestamp(receipt.purchaseDate),\n purchaseToken: receiptId,\n currentPlanId:\n type === 'subs' ? (nonBlankString(receipt.termSku) ?? productId) : null,\n ids: productId ? [productId] : [],\n store: 'amazon',\n quantity: 1,\n purchaseState: isActive ? 'purchased' : 'unknown',\n isAutoRenewing: type === 'subs' && isActive,\n transactionId: receiptId,\n autoRenewingAndroid: type === 'subs' && isActive,\n dataAndroid: JSON.stringify(receipt),\n signatureAndroid: null,\n isAcknowledgedAndroid: false,\n packageNameAndroid: null,\n obfuscatedAccountIdAndroid: null,\n obfuscatedProfileIdAndroid: null,\n developerPayloadAndroid: null,\n isSuspendedAndroid: false,\n pendingPurchaseUpdateAndroid:\n receipt.isDeferred && deferredSku\n ? {products: [deferredSku], purchaseToken: receiptId}\n : null,\n userIdAmazon: nonBlankString(userData?.userId),\n userMarketplaceAmazon: nonBlankString(userData?.marketplace),\n };\n}\n\nexport function createExpoIapVegaModule(\n service: VegaPurchasingService,\n): ExpoIapVegaModule {\n const productTypesBySku = new Map<string, unknown>();\n const subscriptionBasesBySku = new Map<string, string>();\n const subscriptionParentsBySku = new Map<string, string>();\n const listenersByEventName = new Map<string, Set<VegaListener>>();\n let cachedUserData: VegaUserData | null = null;\n\n const emit = (eventName: string, payload: unknown): void => {\n for (const listener of listenersByEventName.get(eventName) ?? []) {\n listener(payload);\n }\n };\n\n const cacheProductMetadata = (product: VegaProduct): void => {\n if (!product.sku) return;\n\n const productType = getProductType(product);\n productTypesBySku.set(product.sku, productType);\n\n if (product.subscriptionBase) {\n subscriptionBasesBySku.set(product.sku, product.subscriptionBase);\n productTypesBySku.set(product.subscriptionBase, productType);\n }\n if (product.subscriptionParent) {\n subscriptionParentsBySku.set(product.sku, product.subscriptionParent);\n productTypesBySku.set(product.subscriptionParent, productType);\n }\n };\n\n const receiptMatchesRequestedSku = (\n receipt: VegaReceipt,\n sku: string,\n ): boolean => {\n const receiptSku = getReceiptSku(receipt);\n if (!receiptSku) return false;\n if (receiptSku === sku || receipt.termSku === sku) return true;\n if (receiptSku === subscriptionBasesBySku.get(sku)) return true;\n if (receiptSku === subscriptionParentsBySku.get(sku)) return true;\n return receiptSku === `${sku}.base`;\n };\n\n const resolveReceiptProductId = (\n receipt: VegaReceipt,\n productIdOverride?: string,\n ): string => {\n if (productIdOverride) return productIdOverride;\n\n const receiptSku = getReceiptSku(receipt);\n if (!receiptSku) return '';\n\n for (const [productSku, subscriptionBase] of subscriptionBasesBySku) {\n if (receiptSku === subscriptionBase) return productSku;\n }\n\n for (const [productSku, subscriptionParent] of subscriptionParentsBySku) {\n if (receiptSku === subscriptionParent) return productSku;\n }\n\n if (receiptSku.endsWith('.base')) {\n const parentSku = receiptSku.slice(0, -'.base'.length);\n if (productTypesBySku.has(parentSku)) return parentSku;\n }\n\n return receiptSku;\n };\n\n const getUserData = async (): Promise<VegaUserData | null> => {\n let response: VegaUserDataResponse;\n try {\n response = await service.getUserData(createUserDataRequest());\n } catch (error) {\n if (isVegaParserError(error)) {\n return null;\n }\n throw error;\n }\n ensureSuccessful('user-data', response, 'Failed to fetch Amazon user data');\n cachedUserData = response.userData ?? null;\n return cachedUserData;\n };\n\n const getStorefront = async (): Promise<string> => {\n try {\n const userData = await getUserData();\n const storefront = userData?.marketplace ?? userData?.countryCode;\n if (typeof storefront !== 'string' || storefront.trim().length === 0) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega storefront lookup returned no country code.',\n );\n }\n return storefront;\n } catch (error) {\n const errorCode =\n error instanceof Error\n ? (error as Error & {code?: unknown}).code\n : undefined;\n if (\n typeof errorCode === 'string' &&\n Object.values(ErrorCode).includes(errorCode as ErrorCode)\n ) {\n throw error;\n }\n throw createVegaError(\n ErrorCode.ServiceError,\n `Failed to get Amazon Vega storefront: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n };\n\n const getPurchaseUpdateReceipts = async (): Promise<VegaReceipt[]> => {\n const receipts: VegaReceipt[] = [];\n let reset = true;\n let hasMore = false;\n let pageCount = 0;\n\n do {\n if (pageCount >= MAX_PURCHASE_UPDATE_PAGES) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega purchase updates exceeded the pagination limit.',\n );\n }\n pageCount++;\n\n let response: VegaPurchaseUpdatesResponse | null = null;\n for (\n let attempt = 1;\n attempt <= PURCHASE_UPDATES_MAX_ATTEMPTS;\n attempt += 1\n ) {\n try {\n response = await service.getPurchaseUpdates({reset});\n } catch (error) {\n if (isVegaParserError(error)) {\n throw malformedVegaResponse(error, 'Amazon Vega purchase updates');\n }\n throw error;\n }\n\n if (\n !response ||\n !shouldRetryResponse('purchase-updates', response.responseCode) ||\n attempt === PURCHASE_UPDATES_MAX_ATTEMPTS\n ) {\n break;\n }\n await delay(PURCHASE_UPDATES_RETRY_DELAY_MS);\n }\n if (!response) {\n throw createVegaError(\n ErrorCode.ServiceError,\n 'Amazon Vega purchase updates returned no response.',\n );\n }\n ensureSuccessful(\n 'purchase-updates',\n response,\n 'Failed to fetch Amazon purchase updates',\n );\n cachedUserData = response.userData ?? cachedUserData;\n receipts.push(...(response.receiptList ?? []));\n hasMore = Boolean(response.hasMore);\n reset = false;\n } while (hasMore);\n\n return receipts;\n };\n\n const getProductData = async (\n skus: string[],\n message: string,\n ): Promise<VegaProduct[]> => {\n const products: VegaProduct[] = [];\n for (const batch of chunkArray(skus, MAX_PRODUCT_DATA_BATCH_SIZE)) {\n const response = await service.getProductData({skus: batch});\n ensureSuccessful('product-data', response, message);\n products.push(...productDataToArray(response.productData));\n }\n return products;\n };\n\n const hydrateProductTypesForReceipts = async (\n receipts: VegaReceipt[],\n ): Promise<void> => {\n const missingSkus = new Set<string>();\n\n for (const receipt of receipts) {\n const sku = getReceiptSku(receipt);\n if (!sku) continue;\n if (receipt.productType != null) {\n productTypesBySku.set(sku, receipt.productType);\n continue;\n }\n\n const resolvedSku = resolveReceiptProductId(receipt);\n const resolvedProductType = productTypesBySku.get(resolvedSku);\n if (resolvedProductType != null) {\n productTypesBySku.set(sku, resolvedProductType);\n } else if (!productTypesBySku.has(sku)) {\n missingSkus.add(sku);\n }\n }\n\n if (missingSkus.size === 0) return;\n\n let products: VegaProduct[];\n try {\n products = await getProductData(\n Array.from(missingSkus),\n 'Failed to fetch Amazon Vega product data for purchase updates',\n );\n } catch (error) {\n if (isVegaParserError(error)) {\n throw malformedVegaResponse(\n error,\n 'Amazon Vega purchase product metadata',\n );\n }\n throw error;\n }\n\n for (const product of products) {\n cacheProductMetadata(product);\n }\n };\n\n const getAvailableItems = async (\n _options?: PurchaseOptions,\n ): Promise<Purchase[]> => {\n const receipts = await getPurchaseUpdateReceipts();\n await hydrateProductTypesForReceipts(receipts);\n return receipts\n .filter((receipt) => {\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n return !isCanceled;\n })\n .map((receipt) =>\n mapReceipt(\n receipt,\n getCachedProductType(receipt, productTypesBySku),\n resolveReceiptProductId(receipt),\n cachedUserData,\n ),\n );\n };\n\n const finishReceipt = async (purchaseToken: string): Promise<void> => {\n if (!purchaseToken) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'purchaseToken is required to finish an Amazon Vega transaction.',\n );\n }\n\n let lastResponse: VegaResponse | null = null;\n for (\n let attempt = 1;\n attempt <= NOTIFY_FULFILLMENT_MAX_ATTEMPTS;\n attempt += 1\n ) {\n const response = await withTimeout(\n service.notifyFulfillment({\n fulfillmentResult: FULFILLMENT_RESULT_FULFILLED,\n receiptId: purchaseToken,\n }),\n NOTIFY_FULFILLMENT_ATTEMPT_TIMEOUT_MS,\n createVegaError(\n ErrorCode.ServiceTimeout,\n 'Amazon Vega notifyFulfillment timed out.',\n ),\n );\n if (isSuccess('notify-fulfillment', response?.responseCode)) return;\n lastResponse = response;\n if (attempt < NOTIFY_FULFILLMENT_MAX_ATTEMPTS) {\n await delay(NOTIFY_FULFILLMENT_RETRY_DELAY_MS);\n }\n }\n\n ensureSuccessful(\n 'notify-fulfillment',\n lastResponse,\n 'Failed to notify Amazon Vega fulfillment',\n );\n };\n\n const recoverFulfillablePurchases = async (\n sku: string,\n fallbackProductType?: unknown,\n options?: RecoverPurchasesOptions,\n ): Promise<{requestedPurchases: Purchase[]}> => {\n const receipts = await getPurchaseUpdateReceipts();\n await hydrateProductTypesForReceipts(receipts);\n const requestedPurchases: Purchase[] = [];\n\n for (const receipt of receipts) {\n const isCanceled = Boolean(receipt.isCancelled || receipt.cancelDate);\n if (isCanceled) continue;\n\n const purchaseTimestamp = toTimestamp(receipt.purchaseDate);\n if (\n options?.minPurchaseDateMs != null &&\n (purchaseTimestamp === 0 ||\n purchaseTimestamp < options.minPurchaseDateMs)\n ) {\n continue;\n }\n\n const matchesRequestedSku = receiptMatchesRequestedSku(receipt, sku);\n if (!matchesRequestedSku) {\n continue;\n }\n\n const purchase = mapReceipt(\n receipt,\n receipt.productType ??\n getCachedProductType(receipt, productTypesBySku, sku) ??\n fallbackProductType,\n resolveReceiptProductId(receipt, sku),\n cachedUserData,\n );\n requestedPurchases.push(purchase);\n emit('purchase-updated', purchase);\n }\n\n return {requestedPurchases};\n };\n\n const verifyWithIapkit = async (\n options: VerifyPurchaseWithProviderProps,\n ): Promise<VerifyPurchaseWithProviderResult> => {\n function normalizeIapkitState(state: unknown): IapkitPurchaseState {\n const normalized =\n typeof state === 'string'\n ? state.toLowerCase().replace(/_/g, '-')\n : 'unknown';\n const states = new Set<IapkitPurchaseState>([\n 'entitled',\n 'pending-acknowledgment',\n 'pending',\n 'canceled',\n 'expired',\n 'ready-to-consume',\n 'consumed',\n 'unknown',\n 'inauthentic',\n ]);\n return states.has(normalized as IapkitPurchaseState)\n ? (normalized as IapkitPurchaseState)\n : 'unknown';\n }\n\n function extractIapkitErrorMessage(\n json: unknown,\n depth = 0,\n ): string | null {\n if (depth > MAX_IAPKIT_ERROR_DEPTH) return null;\n if (!json || typeof json !== 'object') return null;\n const record = json as Record<string, unknown>;\n function extractStringMessage(value: string): string {\n if (depth >= MAX_IAPKIT_ERROR_DEPTH) return value;\n try {\n const parsed = JSON.parse(value);\n return parsed && typeof parsed === 'object'\n ? (extractIapkitErrorMessage(parsed, depth + 1) ?? value)\n : value;\n } catch {\n return value;\n }\n }\n\n const details = record.details;\n if (details && typeof details === 'object') {\n const originalError = (details as Record<string, unknown>)\n .originalError;\n if (typeof originalError === 'string') {\n return extractStringMessage(originalError);\n }\n }\n\n const errors = record.errors;\n if (Array.isArray(errors) && errors.length > 0) {\n const firstError = errors[0];\n return typeof firstError === 'string'\n ? extractStringMessage(firstError)\n : extractIapkitErrorMessage(firstError, depth + 1);\n }\n\n if (typeof record.message === 'string') {\n return extractStringMessage(record.message);\n }\n if (typeof record.error === 'string') {\n return extractStringMessage(record.error);\n }\n return null;\n }\n\n function parseIapkitJsonResponse(text: string): unknown | null {\n if (!text.trim()) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n }\n\n function isIapkitResultObject(\n json: unknown,\n ): json is Record<string, unknown> {\n return Boolean(json) && typeof json === 'object' && !Array.isArray(json);\n }\n\n function hasIapkitErrors(json: unknown): boolean {\n if (!isIapkitResultObject(json)) return false;\n const errors = json.errors;\n return Array.isArray(errors) && errors.length > 0;\n }\n\n function readIapkitResult(\n json: Record<string, unknown>,\n status: number,\n ): RequestVerifyPurchaseWithIapkitResult {\n if (\n typeof json.isValid !== 'boolean' ||\n typeof json.state !== 'string' ||\n json.store !== 'amazon'\n ) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${status}).`,\n );\n }\n\n const productId = json.productId;\n if (productId != null && typeof productId !== 'string') {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${status}).`,\n );\n }\n const environment = json.environment;\n if (\n environment != null &&\n (typeof environment !== 'string' ||\n (environment !== 'Sandbox' && environment !== 'Production'))\n ) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${status}).`,\n );\n }\n\n return {\n ...(environment == null ? {} : {environment}),\n isValid: json.isValid,\n ...(productId == null ? {} : {productId}),\n state: normalizeIapkitState(json.state),\n store: 'amazon',\n };\n }\n\n if (options.provider !== 'iapkit') {\n throw createVegaError(\n ErrorCode.FeatureNotSupported,\n `Unsupported purchase verification provider: ${options.provider}.`,\n );\n }\n\n const iapkit = options.iapkit;\n const payloadCount =\n Number(Boolean(iapkit?.amazon)) +\n Number(Boolean(iapkit?.apple)) +\n Number(Boolean(iapkit?.google));\n const amazon = iapkit?.amazon;\n if (payloadCount !== 1 || !amazon) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification requires exactly one amazon payload.',\n );\n }\n\n const receiptId =\n typeof amazon.receiptId === 'string' ? amazon.receiptId.trim() : '';\n if (!receiptId) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification requires amazon.receiptId.',\n );\n }\n\n let userId = typeof amazon.userId === 'string' ? amazon.userId.trim() : '';\n if (!userId) {\n await getUserData();\n userId = cachedUserData?.userId?.trim() ?? '';\n }\n if (!userId) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega IAPKit verification could not resolve userId.',\n );\n }\n\n const apiKey =\n typeof iapkit?.apiKey === 'string' ? iapkit.apiKey.trim() : '';\n const verificationUrl = getIapkitVerifyUrl(iapkit?.baseUrl);\n let response: Response;\n try {\n const controller = new AbortController();\n const timeout = setTimeout(\n () => controller.abort(),\n IAPKIT_VERIFY_TIMEOUT_MS,\n );\n response = await fetch(verificationUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(apiKey ? {Authorization: `Bearer ${apiKey}`} : {}),\n },\n body: JSON.stringify({\n store: 'amazon',\n userId,\n receiptId,\n ...(amazon.expectedProductId == null\n ? {}\n : {expectedProductId: amazon.expectedProductId}),\n ...(amazon.sandbox == null ? {} : {sandbox: amazon.sandbox}),\n }),\n signal: controller.signal,\n }).finally(() => clearTimeout(timeout));\n } catch (error) {\n throw createVegaError(\n ErrorCode.NetworkError,\n error instanceof Error\n ? error.message\n : 'Failed to reach IAPKit verification endpoint.',\n );\n }\n let text: string;\n try {\n text = await response.text();\n } catch (error) {\n throw createVegaError(\n ErrorCode.NetworkError,\n error instanceof Error\n ? error.message\n : 'Failed to read IAPKit verification response.',\n );\n }\n const json = parseIapkitJsonResponse(text);\n\n if (!response.ok) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n extractIapkitErrorMessage(json) ?? `HTTP ${response.status}`,\n );\n }\n\n if (json === null) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned non-JSON response (HTTP ${response.status}).`,\n );\n }\n\n if (!isIapkitResultObject(json)) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n `IAPKit returned malformed response (HTTP ${response.status}).`,\n );\n }\n\n if (hasIapkitErrors(json)) {\n throw createVegaError(\n ErrorCode.PurchaseVerificationFailed,\n extractIapkitErrorMessage(json) ?? 'IAPKit verification failed.',\n );\n }\n\n const result = readIapkitResult(json, response.status);\n return {\n provider: 'iapkit',\n iapkit: result,\n };\n };\n\n const vegaModule: ExpoIapVegaModule = {\n ERROR_CODES: ErrorCode,\n async initConnection(): Promise<boolean> {\n return true;\n },\n async endConnection(): Promise<boolean> {\n productTypesBySku.clear();\n subscriptionBasesBySku.clear();\n subscriptionParentsBySku.clear();\n cachedUserData = null;\n return true;\n },\n async fetchProducts(\n type: string,\n skus: string[],\n ): Promise<(Product | ProductSubscription)[]> {\n if (!Array.isArray(skus) || skus.length === 0) {\n throw createVegaError(ErrorCode.EmptySkuList, 'No SKUs provided');\n }\n\n const products = await getProductData(\n skus,\n 'Failed to fetch Amazon Vega products',\n );\n\n return products\n .filter((product) => {\n cacheProductMetadata(product);\n const openIapType = productTypeToOpenIap(getProductType(product));\n if (type === 'all') return true;\n if (type === 'subs') return openIapType === 'subs';\n return openIapType === 'in-app';\n })\n .map(mapProduct);\n },\n async requestPurchase(params): Promise<Purchase[]> {\n let sku: string | undefined;\n try {\n const skus = params.skus ?? [];\n if (skus.length !== 1) {\n throw createVegaError(\n ErrorCode.DeveloperError,\n 'Amazon Vega purchase expects exactly one SKU per request.',\n );\n }\n\n sku = skus[0]!;\n const fallbackProductType =\n params.type === 'subs'\n ? PRODUCT_TYPE_SUBSCRIPTION\n : productTypesBySku.get(sku);\n if (fallbackProductType != null) {\n productTypesBySku.set(sku, fallbackProductType);\n }\n let response: VegaPurchaseResponse;\n const purchaseStartedAtMs =\n Date.now() - PURCHASE_RECOVERY_CLOCK_SKEW_MS;\n try {\n response = await service.purchase({sku});\n } catch (error) {\n if (isVegaParserError(error)) {\n try {\n const recovered = await recoverFulfillablePurchases(\n sku,\n fallbackProductType,\n {minPurchaseDateMs: purchaseStartedAtMs},\n );\n if (recovered.requestedPurchases.length > 0) {\n return recovered.requestedPurchases;\n }\n } catch {\n // Keep the original parser error as the source of truth.\n }\n }\n throw error;\n }\n\n if (\n !isSuccess('purchase', response.responseCode) &&\n shouldRecoverPurchaseResponse(response.responseCode)\n ) {\n try {\n const recovered = await recoverFulfillablePurchases(\n sku,\n fallbackProductType,\n );\n if (recovered.requestedPurchases.length > 0) {\n return recovered.requestedPurchases;\n }\n } catch {\n // Keep the original purchase response as the source of truth.\n }\n }\n\n ensureSuccessful(\n 'purchase',\n response,\n 'Failed to complete Amazon Vega purchase',\n sku,\n );\n cachedUserData = response.userData ?? cachedUserData;\n\n if (!response.receipt) return [];\n const purchase = mapReceipt(\n response.receipt,\n fallbackProductType,\n sku,\n response.userData ?? cachedUserData,\n );\n emit('purchase-updated', purchase);\n return [purchase];\n } catch (error) {\n emit(\n 'purchase-error',\n toPurchaseErrorPayload(\n error,\n 'Failed to complete Amazon Vega purchase',\n sku,\n ),\n );\n throw error;\n }\n },\n getAvailableItems,\n async getActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<ActiveSubscription[]> {\n const requestedIds = new Set(subscriptionIds ?? []);\n const purchases = await getAvailableItems({\n includeSuspendedAndroid: false,\n });\n return purchases\n .filter(\n (purchase) =>\n purchase.isAutoRenewing &&\n (requestedIds.size === 0 || requestedIds.has(purchase.productId)),\n )\n .map((purchase) => ({\n productId: purchase.productId,\n isActive: true,\n transactionId: purchase.transactionId ?? purchase.id,\n purchaseToken: purchase.purchaseToken ?? null,\n transactionDate: purchase.transactionDate,\n expirationDateIOS: null,\n environmentIOS: null,\n daysUntilExpirationIOS: null,\n renewalInfoIOS: null,\n autoRenewingAndroid:\n (\n purchase as Purchase & {\n autoRenewingAndroid?: boolean | null;\n }\n ).autoRenewingAndroid ?? null,\n basePlanIdAndroid: purchase.currentPlanId ?? purchase.productId,\n currentPlanId: purchase.currentPlanId ?? purchase.productId,\n purchaseTokenAndroid: purchase.purchaseToken ?? null,\n }));\n },\n async hasActiveSubscriptions(\n subscriptionIds?: string[] | null,\n ): Promise<boolean> {\n const subscriptions =\n await vegaModule.getActiveSubscriptions(subscriptionIds);\n return subscriptions.length > 0;\n },\n async acknowledgePurchaseAndroid(purchaseToken): Promise<void> {\n await finishReceipt(purchaseToken);\n },\n async consumePurchaseAndroid(purchaseToken): Promise<void> {\n await finishReceipt(purchaseToken);\n },\n async getStorefront(): Promise<string> {\n return getStorefront();\n },\n async verifyPurchaseWithProvider(options) {\n return verifyWithIapkit(options);\n },\n addListener(eventName, listener) {\n const listeners = listenersByEventName.get(eventName) ?? new Set();\n listeners.add(listener);\n listenersByEventName.set(eventName, listeners);\n return {\n remove: () => {\n listeners.delete(listener);\n },\n };\n },\n removeListener(eventName, listener): void {\n listenersByEventName.get(eventName)?.delete(listener);\n },\n };\n\n return vegaModule;\n}\n"]}
|
package/openiap-versions.json
CHANGED
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -1296,9 +1296,11 @@ export const verifyPurchase: MutationField<'verifyPurchase'> = async (
|
|
|
1296
1296
|
* // apple: { jws: purchase.purchaseToken },
|
|
1297
1297
|
* // google: { purchaseToken: purchase.purchaseToken },
|
|
1298
1298
|
* amazon: {
|
|
1299
|
+
* expectedProductId: purchase.productId,
|
|
1299
1300
|
* userId: amazonUserId,
|
|
1300
1301
|
* receiptId: purchase.purchaseToken,
|
|
1301
|
-
*
|
|
1302
|
+
* // Enable only for App Tester after the IAPKit project opt-in.
|
|
1303
|
+
* sandbox: amazonSandboxEnabled,
|
|
1302
1304
|
* }
|
|
1303
1305
|
* }
|
|
1304
1306
|
* });
|
package/src/kit-api.ts
CHANGED
|
@@ -121,19 +121,19 @@ type CachedClientPayload = KitClientPayloadResponse & {
|
|
|
121
121
|
etag?: string;
|
|
122
122
|
};
|
|
123
123
|
|
|
124
|
+
type InternalRequestInit = Omit<RequestInit, "headers"> & {
|
|
125
|
+
headers?: Record<string, string>;
|
|
126
|
+
};
|
|
127
|
+
|
|
124
128
|
const DEFAULT_BASE_URL = "https://kit.openiap.dev";
|
|
125
129
|
|
|
126
|
-
// Merge
|
|
127
|
-
// optionally `content-type`). When
|
|
128
|
-
//
|
|
129
|
-
// `Headers`
|
|
130
|
-
//
|
|
131
|
-
// the operator wires up `fetchImpl` without a `Headers` polyfill —
|
|
132
|
-
// we fall back to a case-insensitive merge into a plain record so
|
|
133
|
-
// the request still goes through. Either way, caller-set values take
|
|
134
|
-
// precedence over kit defaults.
|
|
130
|
+
// Merge the request's internal headers with kit defaults (`accept`,
|
|
131
|
+
// optionally `content-type`). When `Headers` is missing — older React
|
|
132
|
+
// Native builds where the operator wires up `fetchImpl` without a
|
|
133
|
+
// `Headers` polyfill — the internal request sites use plain records,
|
|
134
|
+
// so a small case-insensitive merge is sufficient.
|
|
135
135
|
function mergeHeaders(
|
|
136
|
-
callerHeaders:
|
|
136
|
+
callerHeaders: Record<string, string> | undefined,
|
|
137
137
|
hasBody: boolean,
|
|
138
138
|
): HeadersInit {
|
|
139
139
|
if (typeof Headers === "function") {
|
|
@@ -144,41 +144,16 @@ function mergeHeaders(
|
|
|
144
144
|
}
|
|
145
145
|
return merged;
|
|
146
146
|
}
|
|
147
|
-
// Plain-object fallback path. Build a case-insensitive name map
|
|
148
|
-
//
|
|
149
|
-
// or plain record) and re-emit as a record `fetchImpl` accepts.
|
|
147
|
+
// Plain-object fallback path. Build a case-insensitive name map and
|
|
148
|
+
// re-emit it as a record `fetchImpl` accepts.
|
|
150
149
|
const lower = new Map<string, { name: string; value: string }>();
|
|
151
150
|
const setIfAbsent = (name: string, value: string) => {
|
|
152
151
|
const key = name.toLowerCase();
|
|
153
152
|
if (!lower.has(key)) lower.set(key, { name, value });
|
|
154
153
|
};
|
|
155
|
-
const setForce = (name: string, value: string) => {
|
|
156
|
-
const key = name.toLowerCase();
|
|
157
|
-
lower.set(key, { name, value });
|
|
158
|
-
};
|
|
159
154
|
if (callerHeaders) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
} else if (
|
|
163
|
-
typeof (callerHeaders as { forEach?: unknown }).forEach === "function"
|
|
164
|
-
) {
|
|
165
|
-
// `Headers`-like (without being our `typeof Headers === "function"`
|
|
166
|
-
// global). RN polyfills sometimes attach `Headers` only to
|
|
167
|
-
// request/response instances rather than the global scope.
|
|
168
|
-
// Standard signature is `forEach((value, key, parent))`; we
|
|
169
|
-
// bind the first two positionally so a polyfill that omits
|
|
170
|
-
// the third argument still works. `key` is the header name.
|
|
171
|
-
(
|
|
172
|
-
callerHeaders as {
|
|
173
|
-
forEach: (cb: (value: string, key: string) => void) => void;
|
|
174
|
-
}
|
|
175
|
-
).forEach((value, key) => setForce(key, value));
|
|
176
|
-
} else {
|
|
177
|
-
for (const [name, value] of Object.entries(
|
|
178
|
-
callerHeaders as Record<string, string>,
|
|
179
|
-
)) {
|
|
180
|
-
setForce(name, value);
|
|
181
|
-
}
|
|
155
|
+
for (const [name, value] of Object.entries(callerHeaders)) {
|
|
156
|
+
lower.set(name.toLowerCase(), { name, value });
|
|
182
157
|
}
|
|
183
158
|
}
|
|
184
159
|
setIfAbsent("accept", "application/json");
|
|
@@ -212,16 +187,18 @@ export function kitApi(options: KitApiOptions) {
|
|
|
212
187
|
);
|
|
213
188
|
})();
|
|
214
189
|
|
|
215
|
-
async function request(
|
|
190
|
+
async function request(
|
|
191
|
+
path: string,
|
|
192
|
+
init?: InternalRequestInit,
|
|
193
|
+
): Promise<Response> {
|
|
216
194
|
// Normalize headers without depending on a global `Headers`
|
|
217
195
|
// constructor: older React Native runtimes ship `fetch` (or a
|
|
218
196
|
// polyfill via `fetchImpl`) without exposing `Headers` globally.
|
|
219
197
|
// The prior implementation crashed before the first request on
|
|
220
|
-
// those runtimes. We use `new Headers()` when available
|
|
221
|
-
//
|
|
222
|
-
//
|
|
223
|
-
//
|
|
224
|
-
// the same name.
|
|
198
|
+
// those runtimes. We use `new Headers()` when available and
|
|
199
|
+
// otherwise fall back to a small case-insensitive merge into a
|
|
200
|
+
// plain record. Either way, kit defaults only apply when the
|
|
201
|
+
// internal request hasn't set the same name.
|
|
225
202
|
const headers = mergeHeaders(init?.headers, init?.body != null);
|
|
226
203
|
// Prepend a leading slash if `path` is missing one. Today's
|
|
227
204
|
// call sites all hard-code the leading "/", but normalizing here
|
|
@@ -278,7 +255,7 @@ export function kitApi(options: KitApiOptions) {
|
|
|
278
255
|
return parsed as T;
|
|
279
256
|
}
|
|
280
257
|
|
|
281
|
-
async function call<T>(path: string, init?:
|
|
258
|
+
async function call<T>(path: string, init?: InternalRequestInit): Promise<T> {
|
|
282
259
|
return parseResponse<T>(await request(path, init), path);
|
|
283
260
|
}
|
|
284
261
|
|
package/src/types.ts
CHANGED
|
@@ -1791,6 +1791,11 @@ export interface RequestSubscriptionPropsByPlatforms {
|
|
|
1791
1791
|
}
|
|
1792
1792
|
|
|
1793
1793
|
export interface RequestVerifyPurchaseWithIapkitAmazonProps {
|
|
1794
|
+
/**
|
|
1795
|
+
* Available in OpenIAP Spec 3.2.0 / openiap-apple 3.2.0 / openiap-google 3.3.0.
|
|
1796
|
+
* Optional Amazon product id that must match the product id verified by RVS.
|
|
1797
|
+
*/
|
|
1798
|
+
expectedProductId?: (string | null);
|
|
1794
1799
|
/** Amazon Appstore receipt id returned by PurchaseResponse.getReceipt().getReceiptId(). */
|
|
1795
1800
|
receiptId: string;
|
|
1796
1801
|
/** Use Amazon RVS Cloud Sandbox for App Tester receipts. */
|
|
@@ -1848,6 +1853,12 @@ export interface RequestVerifyPurchaseWithIapkitResult {
|
|
|
1848
1853
|
* Apple or Google receipt is valid, and a payload exists for that product.
|
|
1849
1854
|
*/
|
|
1850
1855
|
clientPayload?: (IapkitProductClientPayload | null);
|
|
1856
|
+
/**
|
|
1857
|
+
* Available in OpenIAP Spec 3.2.0 / openiap-apple 3.2.0 / openiap-google 3.3.0.
|
|
1858
|
+
* Amazon RVS environment selected by IAPKit. Present as `Sandbox` or
|
|
1859
|
+
* `Production` on handled Amazon verification results.
|
|
1860
|
+
*/
|
|
1861
|
+
environment?: (string | null);
|
|
1851
1862
|
/**
|
|
1852
1863
|
* True when the purchase is valid and actionable.
|
|
1853
1864
|
* Only entitled, pending-acknowledgment, or ready-to-consume return true.
|
package/src/vega-adapter.ts
CHANGED
|
@@ -1177,8 +1177,20 @@ export function createExpoIapVegaModule(
|
|
|
1177
1177
|
`IAPKit returned malformed response (HTTP ${status}).`,
|
|
1178
1178
|
);
|
|
1179
1179
|
}
|
|
1180
|
+
const environment = json.environment;
|
|
1181
|
+
if (
|
|
1182
|
+
environment != null &&
|
|
1183
|
+
(typeof environment !== 'string' ||
|
|
1184
|
+
(environment !== 'Sandbox' && environment !== 'Production'))
|
|
1185
|
+
) {
|
|
1186
|
+
throw createVegaError(
|
|
1187
|
+
ErrorCode.PurchaseVerificationFailed,
|
|
1188
|
+
`IAPKit returned malformed response (HTTP ${status}).`,
|
|
1189
|
+
);
|
|
1190
|
+
}
|
|
1180
1191
|
|
|
1181
1192
|
return {
|
|
1193
|
+
...(environment == null ? {} : {environment}),
|
|
1182
1194
|
isValid: json.isValid,
|
|
1183
1195
|
...(productId == null ? {} : {productId}),
|
|
1184
1196
|
state: normalizeIapkitState(json.state),
|
|
@@ -1247,6 +1259,9 @@ export function createExpoIapVegaModule(
|
|
|
1247
1259
|
store: 'amazon',
|
|
1248
1260
|
userId,
|
|
1249
1261
|
receiptId,
|
|
1262
|
+
...(amazon.expectedProductId == null
|
|
1263
|
+
? {}
|
|
1264
|
+
: {expectedProductId: amazon.expectedProductId}),
|
|
1250
1265
|
...(amazon.sandbox == null ? {} : {sandbox: amazon.sandbox}),
|
|
1251
1266
|
}),
|
|
1252
1267
|
signal: controller.signal,
|