react-native-nami-sdk
Version:
React Native Module for Nami - Easy subscriptions & in-app purchases, with powerful built-in paywalls and A/B testing.
54 lines (49 loc) • 1.62 kB
text/typescript
import {
NativeModules,
NativeEventEmitter,
Platform,
EmitterSubscription,
} from 'react-native';
import { NamiEntitlement } from './types';
export const { RNNamiEntitlementManager } = NativeModules;
export enum NamiEntitlementManagerEvents {
EntitlementsChanged = 'EntitlementsChanged',
}
export interface INamiEntitlementManager {
emitter: NativeEventEmitter;
active: () => Promise<Array<NamiEntitlement>>;
isEntitlementActive: (label?: string) => boolean;
refresh: (
resultCallback?: (entitlements?: NamiEntitlement[]) => void,
) => void;
registerActiveEntitlementsHandler: (
callback: (activeEntitlements: NamiEntitlement[]) => void,
) => EmitterSubscription['remove'];
clearProvisionalEntitlementGrants: () => void;
}
export const NamiEntitlementManager: INamiEntitlementManager = {
...RNNamiEntitlementManager,
emitter: new NativeEventEmitter(RNNamiEntitlementManager),
refresh: (resultCallback?: (entitlements?: NamiEntitlement[]) => void) => {
if (Platform.OS === 'android') {
RNNamiEntitlementManager.refresh(resultCallback ?? (() => {}));
} else {
RNNamiEntitlementManager.refresh();
}
},
registerActiveEntitlementsHandler: (
callback: (activeEntitlements: NamiEntitlement[]) => void,
) => {
let subscription: EmitterSubscription =
NamiEntitlementManager.emitter.addListener(
NamiEntitlementManagerEvents.EntitlementsChanged,
callback,
);
RNNamiEntitlementManager.registerActiveEntitlementsHandler();
return () => {
if (subscription) {
subscription.remove();
}
};
},
};