in typescript/src/pubsub/apple-common.ts [414:518]
function parseNotification(
payload: unknown,
): Result<string, StatusUpdateNotification> {
if (!isObject(payload)) {
return err("The notification from Apple didn't have any data we can parse");
}
console.log(`[cc92c1a6] ${JSON.stringify(payload)}`);
const unifiedReceipt = parseUnifiedReceipt(payload.unified_receipt);
console.log(`[23666f1f] ${JSON.stringify(payload)}`);
if (unifiedReceipt.kind === ResultKind.Err) {
return unifiedReceipt;
}
const extractPromotionalOfferId = (
unifiedReceipt: UnifiedReceiptInfo,
): string | null => {
if (unifiedReceipt.latest_receipt_info.length > 0) {
return unifiedReceipt.latest_receipt_info[0].promotional_offer_id || null;
}
return null;
};
const extractPromotionalOfferName = (
unifiedReceipt: UnifiedReceiptInfo,
): string | null => {
// essentially return the first product id and empty string if it could not be found
// This should be corrected, but I cannot see a promotional offer name
if (unifiedReceipt.latest_receipt_info.length > 0) {
return unifiedReceipt.latest_receipt_info[0].offer_code_ref_name || null;
}
return null;
};
const extractProductId = (unifiedReceipt: UnifiedReceiptInfo): string => {
// essentially return the first product id and empty string if it could not be found
// This should be corrected, but I cannot see a promotional offer name
if (unifiedReceipt.latest_receipt_info.length > 0) {
return unifiedReceipt.latest_receipt_info[0].product_id;
}
return '';
};
const purchaseDateMs = (unifiedReceipt: UnifiedReceiptInfo): number => {
if (unifiedReceipt.latest_receipt_info.length > 0) {
return Number(
unifiedReceipt.latest_receipt_info[0].purchase_date_ms || '0',
);
}
return 0;
};
const expiresDateMs = (unifiedReceipt: UnifiedReceiptInfo): number => {
if (unifiedReceipt.latest_receipt_info.length > 0) {
return Number(
unifiedReceipt.latest_receipt_info[0].purchase_date_ms || '0',
);
}
return 0;
};
if (
typeof payload.environment === 'string' &&
typeof payload.bid === 'string' &&
typeof payload.bvrs === 'string' &&
typeof payload.notification_type === 'string' &&
(typeof payload.original_transaction_id === 'string' ||
typeof payload.original_transaction_id === 'undefined' ||
typeof payload.original_transaction_id === 'number') &&
(typeof payload.cancellation_date === 'string' ||
typeof payload.cancellation_date === 'undefined') &&
(typeof payload.web_order_line_item_id === 'string' ||
typeof payload.web_order_line_item_id === 'undefined') &&
typeof payload.auto_renew_status === 'string' &&
(typeof payload.auto_renew_adam_id === 'string' ||
typeof payload.auto_renew_adam_id === 'undefined') &&
typeof payload.auto_renew_product_id === 'string' &&
(typeof payload.expiration_intent === 'string' ||
typeof payload.expiration_intent === 'undefined')
) {
return ok({
environment: payload.environment,
bid: payload.bid,
bvrs: payload.bvrs,
notification_type: payload.notification_type,
original_transaction_id:
typeof payload.original_transaction_id === 'number'
? payload.original_transaction_id.toString()
: payload.original_transaction_id,
cancellation_date: payload.cancellation_date,
web_order_line_item_id: payload.web_order_line_item_id,
auto_renew_status: payload.auto_renew_status,
auto_renew_adam_id: payload.auto_renew_adam_id,
auto_renew_product_id: payload.auto_renew_product_id,
expiration_intent: payload.expiration_intent,
unified_receipt: unifiedReceipt.value,
promotional_offer_id: extractPromotionalOfferId(unifiedReceipt.value),
promotional_offer_name: extractPromotionalOfferName(unifiedReceipt.value),
product_id: extractProductId(unifiedReceipt.value),
purchase_date_ms: purchaseDateMs(unifiedReceipt.value),
expires_date_ms: expiresDateMs(unifiedReceipt.value),
});
}
return err('Notification from Apple cannot be parsed');
}