@cafebazaar/react-native-poolakey
Version:
ReactNative implementation of CafeBazaar's in-app payment SDK
70 lines (69 loc) • 2.04 kB
JavaScript
import { useEffect } from 'react';
import bridge from './bridge';
import { praseError, DisconnectedError, ItemNotFoundError, BazaarNotFoundError } from './exceptions';
let devConnected = 0;
let isConnected = false;
let isConnecting;
let initedRsaKey;
bridge.addDisconnectListener(() => {
isConnected = false;
});
function ensureConnected() {
if (!devConnected) {
return Promise.reject('SDK is not connected to bazaar!');
}
if (isConnected) {
return Promise.resolve();
}
if (!isConnecting) {
isConnecting = bridge.connect(initedRsaKey).then(() => {
isConnected = true;
isConnecting = undefined;
});
}
return isConnecting;
}
function wrapConn(fn) {
return async function () {
try {
await ensureConnected();
return await fn.apply(this, arguments);
} catch (e) {
throw praseError(new Error(e + ''));
}
};
}
const poolakey = {
connect(rsaKey) {
initedRsaKey = rsaKey || null;
devConnected++;
return ensureConnected().catch(praseError);
},
async disconnect() {
devConnected--;
if (!devConnected) {
await bridge.disconnect();
}
},
purchaseProduct: wrapConn(bridge.purchaseProduct),
consumePurchase: wrapConn(bridge.consumePurchase),
subscribeProduct: wrapConn(bridge.subscribeProduct),
getPurchasedProducts: wrapConn(bridge.getPurchasedProducts),
getSubscribedProducts: wrapConn(bridge.getSubscribedProducts),
queryPurchaseProduct: wrapConn(bridge.queryPurchaseProduct),
querySubscribeProduct: wrapConn(bridge.querySubscribeProduct),
getInAppSkuDetails: wrapConn(bridge.getInAppSkuDetails),
getSubscriptionSkuDetails: wrapConn(bridge.getSubscriptionSkuDetails)
};
export function useBazaar(rsaKey) {
useEffect(() => {
poolakey.connect(rsaKey);
return () => {
poolakey.disconnect();
};
}, []); // eslint-disable-line react-hooks/exhaustive-deps
return poolakey;
}
export default poolakey;
export { DisconnectedError, ItemNotFoundError, BazaarNotFoundError };
//# sourceMappingURL=index.js.map