function parsePendingRenewalInfo()

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');
}