nativescript-payments
Version:
A NativeScript plugin for in-app payments
314 lines • 14.8 kB
JavaScript
"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