react-native-nami-sdk
Version:
React Native SDK for Nami - No-code paywall and onboarding flows with A/B testing.
42 lines (35 loc) • 1.22 kB
text/typescript
import type { NamiEntitlement, NamiPurchase, NamiSKUType } from './types';
import { NamiPaywallAction } from './types';
export function parsePurchaseDates(purchase: any): NamiPurchase {
return {
...purchase,
purchaseInitiatedTimestamp: new Date(purchase.purchaseInitiatedTimestamp),
expires: purchase.expires ? new Date(purchase.expires) : undefined,
};
}
const validSkuTypes: NamiSKUType[] = [
'unknown',
'one_time_purchase',
'subscription',
];
export function coerceSkuType(raw: string): NamiSKUType {
return validSkuTypes.includes(raw as NamiSKUType)
? (raw as NamiSKUType)
: 'unknown';
}
const validPaywallActions = new Set(
Object.values(NamiPaywallAction) as NamiPaywallAction[],
);
export function mapToNamiPaywallAction(action: string): NamiPaywallAction {
return validPaywallActions.has(action as NamiPaywallAction)
? (action as NamiPaywallAction)
: NamiPaywallAction.UNKNOWN;
}
export function parseEntitlements(entitlements: any[]): NamiEntitlement[] {
return entitlements.map((ent) => ({
...ent,
activePurchases: ent.activePurchases.map(parsePurchaseDates),
relatedSkus: ent.relatedSkus ?? [],
purchasedSkus: ent.purchasedSkus ?? [],
}));
}