UNPKG

nativescript-payments

Version:
314 lines 14.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var TnsApplication = require("tns-core-modules/application"); var failure_1 = require("./failure"); var item_1 = require("./item"); var order_1 = require("./order"); var order_common_1 = require("./order/order.common"); var payments_common_1 = require("./payments.common"); var payments_common_2 = require("./payments.common"); exports.EventContext = payments_common_2.EventContext; exports.EventResult = payments_common_2.EventResult; exports.payments$ = payments_common_2.payments$; var _billingClient; function init() { if (!_billingClient) { payments_common_1._payments$.next({ context: payments_common_1.EventContext.CONNECTING_STORE, result: payments_common_1.EventResult.STARTED, payload: null, }); if (TnsApplication.android && TnsApplication.android.context) { _billingClient = com.android.billingclient.api.BillingClient.newBuilder(TnsApplication.android.context) .setListener(new com.android.billingclient.api.PurchasesUpdatedListener({ onPurchasesUpdated: function (responseCode, purchases) { _purchaseHandler(responseCode, purchases); }, })) .build(); payments_common_1._payments$.next({ context: payments_common_1.EventContext.CONNECTING_STORE, result: payments_common_1.EventResult.PENDING, payload: null, }); _billingClient.startConnection(new com.android.billingclient.api.BillingClientStateListener({ onBillingSetupFinished: function (resultCode) { if (_billingClient) { if (resultCode === com.android.billingclient.api.BillingClient.BillingResponse.OK) { var purchaseResult = _billingClient.queryPurchases(com.android.billingclient.api.BillingClient.SkuType.INAPP); _purchaseHandler(purchaseResult.getResponseCode(), purchaseResult.getPurchasesList()); payments_common_1._payments$.next({ context: payments_common_1.EventContext.CONNECTING_STORE, result: payments_common_1.EventResult.SUCCESS, payload: null, }); } else { console.error(new Error('Init failed with code: ' + resultCode)); payments_common_1._payments$.next({ context: payments_common_1.EventContext.CONNECTING_STORE, result: payments_common_1.EventResult.FAILURE, payload: new failure_1.Failure(resultCode), }); } } else { console.error(new Error('BillingClient missing.')); } }, onBillingServiceDisconnected: function () { console.log('Billing Service disconnected.'); }, })); } else { console.error(new Error('Application context missing.')); } } } exports.init = init; function tearDown() { if (_billingClient) { _billingClient.endConnection(); } _billingClient = null; } exports.tearDown = tearDown; function fetchItems(itemIds) { if (_billingClient) { payments_common_1._payments$.next({ context: payments_common_1.EventContext.RETRIEVING_ITEMS, result: payments_common_1.EventResult.STARTED, payload: itemIds, }); var _skuList_1 = new java.util.ArrayList(); itemIds.forEach(function (value) { return _skuList_1.add(value); }); var params = com.android.billingclient.api.SkuDetailsParams.newBuilder(); params.setSkusList(_skuList_1).setType(com.android.billingclient.api.BillingClient.SkuType.INAPP); _billingClient.querySkuDetailsAsync(params.build(), new com.android.billingclient.api.SkuDetailsResponseListener({ onSkuDetailsResponse: function (responseCode, skuDetailsList) { if (responseCode === com.android.billingclient.api.BillingClient.BillingResponse.OK) { var products = []; for (var i = 0; i < skuDetailsList.size(); i++) { products.push(new item_1.Item(skuDetailsList.get(i))); } payments_common_1._payments$.next({ context: payments_common_1.EventContext.RETRIEVING_ITEMS, result: payments_common_1.EventResult.SUCCESS, payload: products, }); } else { payments_common_1._payments$.next({ context: payments_common_1.EventContext.RETRIEVING_ITEMS, result: payments_common_1.EventResult.FAILURE, payload: new failure_1.Failure(responseCode), }); } }, })); payments_common_1._payments$.next({ context: payments_common_1.EventContext.RETRIEVING_ITEMS, result: payments_common_1.EventResult.PENDING, payload: itemIds, }); } else { console.error(new Error('BillingClient missing.')); } } exports.fetchItems = fetchItems; function buyItem(item, userData) { if (_billingClient) { var pendingCount = _billingClient.queryPurchases(com.android.billingclient.api.BillingClient.SkuType.INAPP) .getPurchasesList().size(); if (!pendingCount) { payments_common_1._payments$.next({ context: payments_common_1.EventContext.PROCESSING_ORDER, result: payments_common_1.EventResult.PENDING, payload: pendingCount + 1, }); var paramsBuilder = com.android.billingclient.api.BillingFlowParams.newBuilder() .setSku(item.itemId) .setType(com.android.billingclient.api.BillingClient.SkuType.INAPP); if (userData) { paramsBuilder.setAccountId(userData); } var responseCode = _billingClient.launchBillingFlow(TnsApplication.android.foregroundActivity, paramsBuilder.build()); if (responseCode === com.android.billingclient.api.BillingClient.BillingResponse.OK) { payments_common_1._payments$.next({ context: payments_common_1.EventContext.PROCESSING_ORDER, result: payments_common_1.EventResult.STARTED, payload: item, }); } else { payments_common_1._payments$.next({ context: payments_common_1.EventContext.PROCESSING_ORDER, result: payments_common_1.EventResult.FAILURE, payload: new failure_1.Failure(responseCode), }); } } else { payments_common_1._payments$.next({ context: payments_common_1.EventContext.PROCESSING_ORDER, result: payments_common_1.EventResult.PENDING, payload: pendingCount, }); } } else { console.error(new Error('BillingClient missing.')); } } exports.buyItem = buyItem; function finalizeOrder(order) { if (_billingClient) { payments_common_1._payments$.next({ context: payments_common_1.EventContext.FINALIZING_ORDER, result: payments_common_1.EventResult.STARTED, payload: order, }); if (order.state === order_common_1.OrderState.VALID && !order.restored) { _billingClient.consumeAsync(order.receiptToken, new com.android.billingclient.api.ConsumeResponseListener({ onConsumeResponse: function (responseCode, purchaseToken) { if (_billingClient) { if (responseCode === com.android.billingclient.api.BillingClient.BillingResponse.OK) { payments_common_1._payments$.next({ context: payments_common_1.EventContext.FINALIZING_ORDER, result: payments_common_1.EventResult.SUCCESS, payload: new order_1.Order(order.nativeValue), }); } else { payments_common_1._payments$.next({ context: payments_common_1.EventContext.FINALIZING_ORDER, result: payments_common_1.EventResult.FAILURE, payload: new failure_1.Failure(responseCode), }); } var pending = _billingClient.queryPurchases(com.android.billingclient.api.BillingClient.SkuType.INAPP) .getPurchasesList(); payments_common_1._payments$.next({ context: payments_common_1.EventContext.PROCESSING_ORDER, result: payments_common_1.EventResult.PENDING, payload: pending ? pending.size() : 0, }); } else { console.error(new Error('BillingClient missing.')); } }, })); payments_common_1._payments$.next({ context: payments_common_1.EventContext.FINALIZING_ORDER, result: payments_common_1.EventResult.PENDING, payload: order, }); } else { payments_common_1._payments$.next({ context: payments_common_1.EventContext.FINALIZING_ORDER, result: payments_common_1.EventResult.FAILURE, payload: new failure_1.Failure(8), }); } } else { console.error(new Error('BillingClient missing.')); } } exports.finalizeOrder = finalizeOrder; function restoreOrders() { if (_billingClient) { payments_common_1._payments$.next({ context: payments_common_1.EventContext.RESTORING_ORDERS, result: payments_common_1.EventResult.STARTED, payload: null, }); _billingClient.queryPurchaseHistoryAsync(com.android.billingclient.api.BillingClient.SkuType.INAPP, new com.android.billingclient.api.PurchaseHistoryResponseListener({ onPurchaseHistoryResponse: function (responseCode, purchasesList) { if (responseCode === com.android.billingclient.api.BillingClient.BillingResponse.OK) { for (var i = 0; i < purchasesList.size(); i++) { var purchase = purchasesList.get(i); if (purchase) { payments_common_1._payments$.next({ context: payments_common_1.EventContext.PROCESSING_ORDER, result: payments_common_1.EventResult.SUCCESS, payload: new order_1.Order(purchase, true), }); payments_common_1._payments$.next({ context: payments_common_1.EventContext.RESTORING_ORDERS, result: payments_common_1.EventResult.PENDING, payload: new order_1.Order(purchase, true), }); } } payments_common_1._payments$.next({ context: payments_common_1.EventContext.RESTORING_ORDERS, result: payments_common_1.EventResult.SUCCESS, payload: null, }); } else { payments_common_1._payments$.next({ context: payments_common_1.EventContext.RESTORING_ORDERS, result: payments_common_1.EventResult.FAILURE, payload: new failure_1.Failure(responseCode), }); } }, })); } else { console.error(new Error('BillingClient missing.')); } } exports.restoreOrders = restoreOrders; function canMakePayments() { return true; } exports.canMakePayments = canMakePayments; function _purchaseHandler(responseCode, purchases) { if (_billingClient) { var pending = void 0; pending = _billingClient.queryPurchases(com.android.billingclient.api.BillingClient.SkuType.INAPP).getPurchasesList(); payments_common_1._payments$.next({ context: payments_common_1.EventContext.PROCESSING_ORDER, result: payments_common_1.EventResult.PENDING, payload: pending ? pending.size() : 0, }); if (responseCode === com.android.billingclient.api.BillingClient.BillingResponse.OK) { if (purchases && purchases.size()) { for (var i = 0; i < purchases.size(); i++) { var purchase = purchases.get(i); if (purchase) { payments_common_1._payments$.next({ context: payments_common_1.EventContext.PROCESSING_ORDER, result: payments_common_1.EventResult.SUCCESS, payload: new order_1.Order(purchase), }); } } } } else { payments_common_1._payments$.next({ context: payments_common_1.EventContext.PROCESSING_ORDER, result: payments_common_1.EventResult.FAILURE, payload: new failure_1.Failure(responseCode), }); } pending = _billingClient.queryPurchases(com.android.billingclient.api.BillingClient.SkuType.INAPP).getPurchasesList(); payments_common_1._payments$.next({ context: payments_common_1.EventContext.PROCESSING_ORDER, result: payments_common_1.EventResult.PENDING, payload: pending ? pending.size() : 0, }); } else { console.error(new Error('BillingClient missing.')); } } //# sourceMappingURL=payments.android.js.map