in typescript/src/pubsub/apple-common.ts [324:374]
function parsePendingRenewalInfo(
payload: unknown,
): Result<string, PendingRenewalInfo> {
if (!isObject(payload)) {
return err(
"The apple pending renewal info field that Apple gave us isn't an object",
);
}
const autoRenewStatus = parseBinaryStatus(payload.auto_renew_status);
const billingRetryPeriod = parseBillingRetryPeriod(
payload.is_in_billing_retry_period,
);
const expirationIntent = parseExpirationIntent(payload.expiration_intent);
if (autoRenewStatus.kind === ResultKind.Err) {
return autoRenewStatus;
}
if (billingRetryPeriod.kind === ResultKind.Err) {
return billingRetryPeriod;
}
if (expirationIntent.kind === ResultKind.Err) {
return expirationIntent;
}
if (
(typeof payload.auto_renew_product_id === 'string' ||
typeof payload.auto_renew_product_id === 'undefined') &&
autoRenewStatus.kind === ResultKind.Ok &&
expirationIntent.kind === ResultKind.Ok &&
(typeof payload.grace_period_expires_date_ms === 'string' ||
typeof payload.grace_period_expires_date_ms === 'undefined') &&
billingRetryPeriod.kind === ResultKind.Ok &&
typeof payload.original_transaction_id === 'string' &&
typeof payload.product_id === 'string' &&
(typeof payload.price_consent_status === 'string' ||
typeof payload.price_consent_status === 'undefined') &&
(typeof payload.price_increase_status === 'string' ||
typeof payload.price_increase_status === 'undefined')
) {
return ok({
auto_renew_product_id: payload.auto_renew_product_id,
auto_renew_status: autoRenewStatus.value,
expiration_intent: expirationIntent.value,
grace_period_expires_date_ms: payload.grace_period_expires_date_ms,
is_in_billing_retry_period: billingRetryPeriod.value,
original_transaction_id: payload.original_transaction_id,
product_id: payload.product_id,
price_consent_status: payload.price_consent_status,
price_increase_status: payload.price_increase_status,
});
}
return err('Pending Renewal Info object from Apple cannot be parsed');
}