nativescript-payments
Version:
A NativeScript plugin for in-app payments
325 lines • 14.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
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 _productRequest;
var _productRequestDelegate;
var _paymentTransactionObserver;
function init() {
if (!_paymentTransactionObserver) {
payments_common_1._payments$.next({
context: payments_common_1.EventContext.CONNECTING_STORE,
result: payments_common_1.EventResult.STARTED,
payload: null,
});
_paymentTransactionObserver = new SKPaymentTransactionObserverImpl();
payments_common_1._payments$.next({
context: payments_common_1.EventContext.CONNECTING_STORE,
result: payments_common_1.EventResult.PENDING,
payload: null,
});
try {
SKPaymentQueue.defaultQueue().addTransactionObserver(_paymentTransactionObserver);
payments_common_1._payments$.next({
context: payments_common_1.EventContext.CONNECTING_STORE,
result: payments_common_1.EventResult.SUCCESS,
payload: null,
});
}
catch (e) {
var errorPayload = typeof e === 'object' ? e.message : e;
console.error(new Error("Init failed: " + errorPayload));
payments_common_1._payments$.next({
context: payments_common_1.EventContext.CONNECTING_STORE,
result: payments_common_1.EventResult.FAILURE,
payload: null,
});
}
}
}
exports.init = init;
function tearDown() {
if (_paymentTransactionObserver) {
SKPaymentQueue.defaultQueue().removeTransactionObserver(_paymentTransactionObserver);
}
_paymentTransactionObserver = null;
}
exports.tearDown = tearDown;
function fetchItems(itemIds) {
payments_common_1._payments$.next({
context: payments_common_1.EventContext.RETRIEVING_ITEMS,
result: payments_common_1.EventResult.STARTED,
payload: itemIds,
});
var productIds = NSMutableSet.alloc().init();
itemIds.forEach(function (value) { return productIds.addObject(value); });
_productRequest = SKProductsRequest.alloc().initWithProductIdentifiers(productIds);
_productRequestDelegate = new SKProductRequestDelegateImpl();
_productRequest.delegate = _productRequestDelegate;
_productRequest.start();
payments_common_1._payments$.next({
context: payments_common_1.EventContext.RETRIEVING_ITEMS,
result: payments_common_1.EventResult.PENDING,
payload: itemIds,
});
}
exports.fetchItems = fetchItems;
function buyItem(item, userData) {
if (SKPaymentQueue.defaultQueue().transactions) {
var pendingCount = SKPaymentQueue.defaultQueue().transactions.count;
if (!pendingCount) {
payments_common_1._payments$.next({
context: payments_common_1.EventContext.PROCESSING_ORDER,
result: payments_common_1.EventResult.PENDING,
payload: pendingCount + 1,
});
var payment = SKMutablePayment.paymentWithProduct(item.nativeValue);
if (userData) {
payment.applicationUsername = userData;
}
try {
SKPaymentQueue.defaultQueue().addPayment(payment);
payments_common_1._payments$.next({
context: payments_common_1.EventContext.PROCESSING_ORDER,
result: payments_common_1.EventResult.STARTED,
payload: item,
});
}
catch (e) {
var errorPayload = typeof e === 'object' ? e.message : e;
console.error(new Error("Error while adding payment: " + errorPayload));
payments_common_1._payments$.next({
context: payments_common_1.EventContext.PROCESSING_ORDER,
result: payments_common_1.EventResult.FAILURE,
payload: null,
});
}
}
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('SKPaymentQueue.defaultQueue().transactions missing.'));
}
}
exports.buyItem = buyItem;
function finalizeOrder(order) {
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) {
try {
SKPaymentQueue.defaultQueue().finishTransaction(order.nativeValue);
payments_common_1._payments$.next({
context: payments_common_1.EventContext.FINALIZING_ORDER,
result: payments_common_1.EventResult.PENDING,
payload: order,
});
}
catch (e) {
var errorPayload = typeof e === 'object' ? e.message : e;
console.error(new Error("Error while finalizing order: " + errorPayload));
payments_common_1._payments$.next({
context: payments_common_1.EventContext.FINALIZING_ORDER,
result: payments_common_1.EventResult.FAILURE,
payload: null,
});
}
}
else {
payments_common_1._payments$.next({
context: payments_common_1.EventContext.FINALIZING_ORDER,
result: payments_common_1.EventResult.FAILURE,
payload: new failure_1.Failure(999),
});
}
}
exports.finalizeOrder = finalizeOrder;
function restoreOrders() {
payments_common_1._payments$.next({
context: payments_common_1.EventContext.RESTORING_ORDERS,
result: payments_common_1.EventResult.STARTED,
payload: null,
});
try {
SKPaymentQueue.defaultQueue().restoreCompletedTransactions();
}
catch (e) {
var errorPayload = typeof e === 'object' ? e.message : e;
console.error(new Error("Error while restoring order: " + errorPayload));
payments_common_1._payments$.next({
context: payments_common_1.EventContext.RESTORING_ORDERS,
result: payments_common_1.EventResult.FAILURE,
payload: null,
});
}
}
exports.restoreOrders = restoreOrders;
function canMakePayments() {
return SKPaymentQueue.canMakePayments();
}
exports.canMakePayments = canMakePayments;
var SKProductRequestDelegateImpl = (function (_super) {
__extends(SKProductRequestDelegateImpl, _super);
function SKProductRequestDelegateImpl() {
return _super !== null && _super.apply(this, arguments) || this;
}
SKProductRequestDelegateImpl.prototype.productsRequestDidReceiveResponse = function (request, response) {
var products = response.products;
console.log('Invalid product identifiers: ' + JSON.stringify(response.invalidProductIdentifiers.componentsJoinedByString(', ')));
var result = [];
for (var i = 0; i < products.count; i++) {
result.push(new item_1.Item(products.objectAtIndex(i)));
}
payments_common_1._payments$.next({
context: payments_common_1.EventContext.RETRIEVING_ITEMS,
result: payments_common_1.EventResult.SUCCESS,
payload: result,
});
this._cleanup();
};
SKProductRequestDelegateImpl.prototype.requestDidFailWithError = function (request, error) {
payments_common_1._payments$.next({
context: payments_common_1.EventContext.RETRIEVING_ITEMS,
result: payments_common_1.EventResult.FAILURE,
payload: new failure_1.Failure(error.code),
});
this._cleanup();
};
SKProductRequestDelegateImpl.prototype._cleanup = function () {
_productRequestDelegate = null;
_productRequest = null;
};
SKProductRequestDelegateImpl.ObjCProtocols = [SKProductsRequestDelegate];
return SKProductRequestDelegateImpl;
}(NSObject));
var SKPaymentTransactionObserverImpl = (function (_super) {
__extends(SKPaymentTransactionObserverImpl, _super);
function SKPaymentTransactionObserverImpl() {
return _super !== null && _super.apply(this, arguments) || this;
}
SKPaymentTransactionObserverImpl.prototype.paymentQueueUpdatedTransactions = function (queue, transactions) {
_transactionHandler(queue, transactions);
};
SKPaymentTransactionObserverImpl.prototype.paymentQueueRestoreCompletedTransactionsFinished = function (queue) {
payments_common_1._payments$.next({
context: payments_common_1.EventContext.RESTORING_ORDERS,
result: payments_common_1.EventResult.SUCCESS,
payload: null,
});
};
SKPaymentTransactionObserverImpl.prototype.paymentQueueRestoreCompletedTransactionsFailedWithError = function (queue, error) {
payments_common_1._payments$.next({
context: payments_common_1.EventContext.RESTORING_ORDERS,
result: payments_common_1.EventResult.FAILURE,
payload: new failure_1.Failure(error.code),
});
};
SKPaymentTransactionObserverImpl.prototype.paymentQueueRemovedTransactions = function (queue, transactions) {
if (transactions && transactions.count) {
for (var i = 0; i < transactions.count; i++) {
var transaction = transactions.objectAtIndex(i);
if (transaction.transactionState === 1) {
payments_common_1._payments$.next({
context: payments_common_1.EventContext.FINALIZING_ORDER,
result: payments_common_1.EventResult.SUCCESS,
payload: new order_1.Order(transaction),
});
}
}
}
payments_common_1._payments$.next({
context: payments_common_1.EventContext.PROCESSING_ORDER,
result: payments_common_1.EventResult.PENDING,
payload: queue.transactions ? queue.transactions.count : 0,
});
};
SKPaymentTransactionObserverImpl.prototype.paymentQueueShouldAddStorePaymentForProduct = function (queue, payment, product) {
return true;
};
SKPaymentTransactionObserverImpl.prototype.paymentQueueUpdatedDownloads = function (queue, downloads) {
console.log('paymentQueueUpdatedDownloads called. Not implemented.');
};
SKPaymentTransactionObserverImpl.ObjCProtocols = [SKPaymentTransactionObserver];
return SKPaymentTransactionObserverImpl;
}(NSObject));
function _transactionHandler(queue, transactions) {
payments_common_1._payments$.next({
context: payments_common_1.EventContext.PROCESSING_ORDER,
result: payments_common_1.EventResult.PENDING,
payload: queue.transactions ? queue.transactions.count : 0,
});
if (transactions && transactions.count) {
for (var i = 0; i < transactions.count; i++) {
var transaction = transactions.objectAtIndex(i);
switch (transaction.transactionState) {
case 1:
payments_common_1._payments$.next({
context: payments_common_1.EventContext.PROCESSING_ORDER,
result: payments_common_1.EventResult.SUCCESS,
payload: new order_1.Order(transaction),
});
break;
case 2:
payments_common_1._payments$.next({
context: payments_common_1.EventContext.PROCESSING_ORDER,
result: payments_common_1.EventResult.FAILURE,
payload: new failure_1.Failure(transaction.error.code),
});
try {
queue.finishTransaction(transaction);
}
catch (e) {
var errorPayload = typeof e === 'object' ? e.message : e;
console.error(new Error("Error while finalizing failed order: " + errorPayload));
}
break;
case 3:
payments_common_1._payments$.next({
context: payments_common_1.EventContext.PROCESSING_ORDER,
result: payments_common_1.EventResult.SUCCESS,
payload: new order_1.Order(transaction.originalTransaction, true),
});
payments_common_1._payments$.next({
context: payments_common_1.EventContext.RESTORING_ORDERS,
result: payments_common_1.EventResult.PENDING,
payload: new order_1.Order(transaction.originalTransaction, true),
});
try {
queue.finishTransaction(transaction);
}
catch (e) {
var errorPayload = typeof e === 'object' ? e.message : e;
console.error(new Error("Error while finalizing restored order: " + errorPayload));
}
break;
case 0:
case 4:
break;
default:
console.error(new Error('Missing or unknown transaction state.'));
break;
}
}
}
payments_common_1._payments$.next({
context: payments_common_1.EventContext.PROCESSING_ORDER,
result: payments_common_1.EventResult.PENDING,
payload: queue.transactions ? queue.transactions.count : 0,
});
}
//# sourceMappingURL=payments.ios.js.map