function parseUnifiedReceipt()

in typescript/src/pubsub/apple-common.ts [376:412]


function parseUnifiedReceipt(
  payload: unknown,
): Result<string, UnifiedReceiptInfo> {
  if (!isObject(payload)) {
    return err("The unified receipt object that Apple gave us isn't an object");
  }
  const latestReceiptInfo = parseArray(parseAppleReceiptInfo)(
    payload.latest_receipt_info,
  );
  const pendingRenewalInfo = parseArray(parsePendingRenewalInfo)(
    payload.pending_renewal_info,
  );
  if (latestReceiptInfo.kind === ResultKind.Err) {
    return latestReceiptInfo;
  }
  if (pendingRenewalInfo.kind === ResultKind.Err) {
    return pendingRenewalInfo;
  }

  if (typeof payload.environment !== 'string') {
    return err('parseUnifiedReceipt: missing field: environment');
  }
  if (typeof payload.latest_receipt !== 'string') {
    return err('parseUnifiedReceipt: missing field: latest_receipt');
  }
  if (typeof payload.status !== 'number') {
    return err('parseUnifiedReceipt: missing field: status');
  }

  return ok({
    environment: payload.environment,
    latest_receipt: payload.latest_receipt,
    status: payload.status,
    latest_receipt_info: latestReceiptInfo.value,
    pending_renewal_info: pendingRenewalInfo.value,
  });
}