fake-toss-payments-server
Version:
Fake toss-payments server for testing
590 lines • 374 kB
JavaScript
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FakeTossPaymentsController = void 0;
var __nestia_core_transform_isFormatDateTime = __importStar(require("typia/lib/internal/_isFormatDateTime.js"));
var __nestia_core_transform_isFormatDate = __importStar(require("typia/lib/internal/_isFormatDate.js"));
var __nestia_core_transform_isFormatUri = __importStar(require("typia/lib/internal/_isFormatUri.js"));
var __nestia_core_transform_assertGuard = __importStar(require("typia/lib/internal/_assertGuard.js"));
var __nestia_core_transform_jsonStringifyString = __importStar(require("typia/lib/internal/_jsonStringifyString.js"));
var __nestia_core_transform_throwTypeGuardError = __importStar(require("typia/lib/internal/_throwTypeGuardError.js"));
var __nestia_core_transform_httpParameterReadString = __importStar(require("typia/lib/internal/_httpParameterReadString.js"));
var __nestia_core_transform_isFormatEmail = __importStar(require("typia/lib/internal/_isFormatEmail.js"));
var __nestia_core_transform_validateReport = __importStar(require("typia/lib/internal/_validateReport.js"));
var core_1 = __importDefault(require("@nestia/core"));
var common_1 = require("@nestjs/common");
var FakeTossUserAuth_1 = require("../decorators/FakeTossUserAuth");
var FakeTossPaymentProvider_1 = require("../providers/FakeTossPaymentProvider");
var FakeTossStorage_1 = require("../providers/FakeTossStorage");
var FakeTossWebhookProvider_1 = require("../providers/FakeTossWebhookProvider");
var FakeTossPaymentsController = /** @class */ (function () {
function FakeTossPaymentsController() {
}
/**
* 결제 정보 조회하기.
*
* `payments.at` 은 결제 정보를 조회하는 함수이다.
*
* 주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는
* 경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `paymentKey` 등 극히 일부의
* 식별자 정보만을 전달해주어, 상세 결제 정보가 필요할 때 사용한다.
*
* 참고로 토스 페이먼츠는 다른 결제 PG 사들과 다르게, 클라이언트 어플리케이션에서 토스
* 페이먼츠의 결제 창을 이용하여 진행한 결제가 바로 확정되는 것은 아니다. 귀사의 백엔드
* 서버가 현재의 `payments.at` 을 통하여 해당 결제 정보를 확인하고, {@link approve} 를
* 호출하여 직접 승인하기 전까지, 해당 결제는 확정되지 않으니, 이 점에 유의하기 바란다.
*
* @param paymentKey 결제 정보의 {@link ITossPayment.paymentKey}
* @returns 결제 정보
*
* @author Samchon
*/
FakeTossPaymentsController.prototype.at = function (_0, paymentKey) {
return FakeTossStorage_1.FakeTossStorage.payments.get(paymentKey);
};
/**
* 카드로 결제하기.
*
* `payments.key_in` 은 카드를 이용한 결제를 할 때 호출되는 API 함수이다.
*
* 참고로 `payments.key_in` 는 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로
* 제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는
* 일은 없을 것이다. 다만, 고객이 카드를 통하여 결제하는 상황을 시뮬레이션하기 위하여,
* 테스트 자동화 프로그램 수준에서 사용될 수는 있다.
*
* 그리고 귀하의 백엔드 서버가 `payments.key-in` 을 직접 호출하는 경우, 토스 페이먼츠
* 서버는 이를 완전히 승인된 결제로 보고 바로 확정한다. 때문에 `payments.key-in` 을
* 직접 호출하는 경우, 토스 페이먼츠의 결제 창을 이용하여 별도의 {@link approve} 가
* 필요한 때 대비, 훨씬 더 세심한 주의가 요구된다.
*
* 더하여 만약 귀하의 백엔드 서버가 `fake-toss-payments-server` 를 이용하여 고객의
* 카드 결제를 시뮬레이션하는 경우, {@link ITossCardPayment.ICreate.__approved} 값을
* `false` 로 하여 카드 결제의 확정을 고의로 회피할 수 있다. 이를 통하여 토스
* 페이먼츠의 결제 창을 이용한 카드 결제의 경우, 별도의 {@link approve} 가 필요한
* 상황을 시뮬레이션 할 수 있다.
*
* @param input 카드 결제 입력 정보
* @returns 카드 결제 정보
*
* @security basic
* @author Samchon
*/
FakeTossPaymentsController.prototype.key_in = function (_0, input) {
var payment = __assign(__assign({}, FakeTossPaymentProvider_1.FakeTossPaymentProvider.get_common_props(input)), { method: "카드", type: "NORMAL", status: input.__approved !== false ? "DONE" : "IN_PROGRESS", approvedAt: input.__approved !== false ? new Date().toISOString() : null, discount: null, card: {
company: "신한카드",
number: input.cardNumber,
installmentPlanMonths: input.cardInstallmentPlan || 0,
isInterestFree: true,
approveNo: "temporary-card-approval-number",
useCardPoint: false,
cardType: "신용",
ownerType: "개인",
acquireStatus: "READY",
receiptUrl: "https://github.com/samchon/fake-toss-payments-server",
}, easyPay: null });
FakeTossStorage_1.FakeTossStorage.payments.set(payment.paymentKey, payment);
return payment;
};
/**
* 결제 승인하기.
*
* 토스 페이먼츠는 귀사의 백엔드에서 일어난 결제가 아닌 프론트 어플리케이션의 결제 창에서
* 이루어진 결제의 경우, 해당 서비스으 백엔드 서버로부터 결제를 승인받기 전까지, 이를
* 확정하지 않는다. `payments.approve` 는 바로 이러한 상황에서, 해당 결제를 승인해주는
* 함수이다.
*
* 만일 귀하가 `fake-toss-payments-server` 를 이용하여 결제를 시뮬레이션하는 경우라면,
* 결제 관련 API 를 호출함에 있어 {@link ITossCardPayment.ICreate.__approved} 내지
* {@link ITossVirtualAccountPayment.ICreate.__approved} 를 `false` 로 함으로써, 별도
* 승인이 필요한 이러한 상황을 시뮬레이션 할 수 있다.
*
* @param paymentKey 대상 결제의 {@link ITossPayment.paymentKey}
* @param input 주문 정보 확인
* @returns 승인된 결제 정보
*
* @security basic
* @author Samchon
*/
FakeTossPaymentsController.prototype.approve = function (_0, paymentKey, input) {
var payment = FakeTossStorage_1.FakeTossStorage.payments.get(paymentKey);
if (payment.orderId !== input.orderId)
throw new common_1.UnprocessableEntityException("Wrong orderId");
else if (payment.totalAmount !== input.amount)
throw new common_1.UnprocessableEntityException("Wrong price.");
payment.approvedAt = new Date().toISOString();
if (payment.method !== "가상계좌" && payment.method !== "계좌이체")
payment.status = "DONE";
return payment;
};
/**
* 결제 취소하기.
*
* `payments.cancel` 은 결제를 취소하는 API 이다.
*
* 결제 취소 입력 정보 {@link ITossPaymentCancel.ICreate} 에는 취소 사유를 비롯하여,
* 고객에게 환불해 줄 금액과 부가세 및 필요시 환불 계좌 정보 등을 입력하게 되어있다.
*
* @param paymentKey 결제 정보의 {@link ITossPayment.paymentKey}
* @param input 취소 입력 정보
* @returns 취소된 결제 정보
*
* @security basic
* @author Samchon
*/
FakeTossPaymentsController.prototype.cancel = function (_0, paymentKey, input) {
var _a, _b, _c, _d, _e;
var payment = FakeTossStorage_1.FakeTossStorage.payments.get(paymentKey);
var amount = (_a = input.cancelAmount) !== null && _a !== void 0 ? _a : payment.totalAmount;
if (payment.balanceAmount < amount)
throw new common_1.UnprocessableEntityException("Balance amount is not enough.");
payment.status = "CANCELED";
(_b = payment.cancels) !== null && _b !== void 0 ? _b : (payment.cancels = []);
payment.cancels.push({
cancelAmount: amount,
cancelReason: input.cancelReason,
taxFreeAmount: (_c = input.taxFreeAmount) !== null && _c !== void 0 ? _c : 0,
taxAmount: (_d = input.taxAmount) !== null && _d !== void 0 ? _d : 0,
refundableAmount: (_e = input.refundableAmount) !== null && _e !== void 0 ? _e : payment.totalAmount,
canceledAt: new Date().toISOString(),
});
payment.balanceAmount -= amount;
FakeTossWebhookProvider_1.FakeTossWebhookProvider.webhook({
eventType: "PAYMENT_STATUS_CHANGED",
data: {
paymentKey: payment.paymentKey,
orderId: payment.orderId,
status: payment.balanceAmount === 0 ? "CANCELED" : "PARTIAL_CANCELED",
},
}).catch(function () { });
return payment;
};
__decorate([
core_1.default.TypedRoute.Get(":paymentKey", { type: "assert", assert: (function () { var _io0 = function (input) { return "object" === typeof input.giftCertificate && null !== input.giftCertificate && _io1(input.giftCertificate) && "\uC0C1\uD488\uAD8C" === input.method && "NORMAL" === input.type && ("READY" === input.status || "IN_PROGRESS" === input.status || "WAITING_FOR_DEPOSIT" === input.status || "DONE" === input.status || "CANCELED" === input.status || "PARTIAL_CANCELED" === input.status || "ABORTED" === input.status || "EXPIRED" === input.status) && "string" === typeof input.mId && "string" === typeof input.version && "string" === typeof input.paymentKey && "string" === typeof input.orderId && "string" === typeof input.transactionKey && "string" === typeof input.orderName && "string" === typeof input.currency && ("number" === typeof input.totalAmount && !Number.isNaN(input.totalAmount)) && ("number" === typeof input.balanceAmount && !Number.isNaN(input.balanceAmount)) && ("number" === typeof input.suppliedAmount && !Number.isNaN(input.suppliedAmount)) && ("number" === typeof input.taxFreeAmount && !Number.isNaN(input.taxFreeAmount)) && ("number" === typeof input.vat && !Number.isNaN(input.vat)) && "boolean" === typeof input.useEscrow && "boolean" === typeof input.cultureExpense && ("string" === typeof input.requestedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.requestedAt)) && (null === input.approvedAt || "string" === typeof input.approvedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.approvedAt)) && (null === input.cancels || Array.isArray(input.cancels) && input.cancels.every(function (elem) { return "object" === typeof elem && null !== elem && _io2(elem); })) && (null === input.cashReceipt || "object" === typeof input.cashReceipt && null !== input.cashReceipt && _io3(input.cashReceipt)); }; var _io1 = function (input) { return "string" === typeof input.approveNo && ("COMPLETE" === input.settlementStatus || "INCOMPLETE" === input.settlementStatus); }; var _io2 = function (input) { return "number" === typeof input.cancelAmount && !Number.isNaN(input.cancelAmount) && "string" === typeof input.cancelReason && ("number" === typeof input.taxFreeAmount && !Number.isNaN(input.taxFreeAmount)) && ("number" === typeof input.taxAmount && !Number.isNaN(input.taxAmount)) && ("number" === typeof input.refundableAmount && !Number.isNaN(input.refundableAmount)) && ("string" === typeof input.canceledAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.canceledAt)); }; var _io3 = function (input) { return ("\uC18C\uB4DD\uACF5\uC81C" === input.type || "\uC9C0\uCD9C\uC99D\uBE59" === input.type) && ("number" === typeof input.amount && !Number.isNaN(input.amount)) && ("number" === typeof input.taxFreeAmount && !Number.isNaN(input.taxFreeAmount)) && "string" === typeof input.issueNumber && "string" === typeof input.receiptUrl; }; var _io4 = function (input) { return "object" === typeof input.mobilePhone && null !== input.mobilePhone && _io5(input.mobilePhone) && "\uD734\uB300\uD3F0" === input.method && "NORMAL" === input.type && ("READY" === input.status || "IN_PROGRESS" === input.status || "WAITING_FOR_DEPOSIT" === input.status || "DONE" === input.status || "CANCELED" === input.status || "PARTIAL_CANCELED" === input.status || "ABORTED" === input.status || "EXPIRED" === input.status) && "string" === typeof input.mId && "string" === typeof input.version && "string" === typeof input.paymentKey && "string" === typeof input.orderId && "string" === typeof input.transactionKey && "string" === typeof input.orderName && "string" === typeof input.currency && ("number" === typeof input.totalAmount && !Number.isNaN(input.totalAmount)) && ("number" === typeof input.balanceAmount && !Number.isNaN(input.balanceAmount)) && ("number" === typeof input.suppliedAmount && !Number.isNaN(input.suppliedAmount)) && ("number" === typeof input.taxFreeAmount && !Number.isNaN(input.taxFreeAmount)) && ("number" === typeof input.vat && !Number.isNaN(input.vat)) && "boolean" === typeof input.useEscrow && "boolean" === typeof input.cultureExpense && ("string" === typeof input.requestedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.requestedAt)) && (null === input.approvedAt || "string" === typeof input.approvedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.approvedAt)) && (null === input.cancels || Array.isArray(input.cancels) && input.cancels.every(function (elem) { return "object" === typeof elem && null !== elem && _io2(elem); })) && (null === input.cashReceipt || "object" === typeof input.cashReceipt && null !== input.cashReceipt && _io3(input.cashReceipt)); }; var _io5 = function (input) { return "string" === typeof input.carrier && "string" === typeof input.customerMobilePhone && ("INCOMPLETED" === input.settlementStatus || "COMPLETED" === input.settlementStatus); }; var _io6 = function (input) { return "object" === typeof input.transfer && null !== input.transfer && _io7(input.transfer) && "\uACC4\uC88C\uC774\uCCB4" === input.method && "NORMAL" === input.type && ("READY" === input.status || "IN_PROGRESS" === input.status || "WAITING_FOR_DEPOSIT" === input.status || "DONE" === input.status || "CANCELED" === input.status || "PARTIAL_CANCELED" === input.status || "ABORTED" === input.status || "EXPIRED" === input.status) && "string" === typeof input.mId && "string" === typeof input.version && "string" === typeof input.paymentKey && "string" === typeof input.orderId && "string" === typeof input.transactionKey && "string" === typeof input.orderName && "string" === typeof input.currency && ("number" === typeof input.totalAmount && !Number.isNaN(input.totalAmount)) && ("number" === typeof input.balanceAmount && !Number.isNaN(input.balanceAmount)) && ("number" === typeof input.suppliedAmount && !Number.isNaN(input.suppliedAmount)) && ("number" === typeof input.taxFreeAmount && !Number.isNaN(input.taxFreeAmount)) && ("number" === typeof input.vat && !Number.isNaN(input.vat)) && "boolean" === typeof input.useEscrow && "boolean" === typeof input.cultureExpense && ("string" === typeof input.requestedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.requestedAt)) && (null === input.approvedAt || "string" === typeof input.approvedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.approvedAt)) && (null === input.cancels || Array.isArray(input.cancels) && input.cancels.every(function (elem) { return "object" === typeof elem && null !== elem && _io2(elem); })) && (null === input.cashReceipt || "object" === typeof input.cashReceipt && null !== input.cashReceipt && _io3(input.cashReceipt)); }; var _io7 = function (input) { return "string" === typeof input.bank && ("INCOMPLETED" === input.settlementStatus || "COMPLETED" === input.settlementStatus); }; var _io8 = function (input) { return "string" === typeof input.secret && ("object" === typeof input.virtualAccount && null !== input.virtualAccount && _io9(input.virtualAccount)) && "\uAC00\uC0C1\uACC4\uC88C" === input.method && "NORMAL" === input.type && ("READY" === input.status || "IN_PROGRESS" === input.status || "WAITING_FOR_DEPOSIT" === input.status || "DONE" === input.status || "CANCELED" === input.status || "PARTIAL_CANCELED" === input.status || "ABORTED" === input.status || "EXPIRED" === input.status) && "string" === typeof input.mId && "string" === typeof input.version && "string" === typeof input.paymentKey && "string" === typeof input.orderId && "string" === typeof input.transactionKey && "string" === typeof input.orderName && "string" === typeof input.currency && ("number" === typeof input.totalAmount && !Number.isNaN(input.totalAmount)) && ("number" === typeof input.balanceAmount && !Number.isNaN(input.balanceAmount)) && ("number" === typeof input.suppliedAmount && !Number.isNaN(input.suppliedAmount)) && ("number" === typeof input.taxFreeAmount && !Number.isNaN(input.taxFreeAmount)) && ("number" === typeof input.vat && !Number.isNaN(input.vat)) && "boolean" === typeof input.useEscrow && "boolean" === typeof input.cultureExpense && ("string" === typeof input.requestedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.requestedAt)) && (null === input.approvedAt || "string" === typeof input.approvedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.approvedAt)) && (null === input.cancels || Array.isArray(input.cancels) && input.cancels.every(function (elem) { return "object" === typeof elem && null !== elem && _io2(elem); })) && (null === input.cashReceipt || "object" === typeof input.cashReceipt && null !== input.cashReceipt && _io3(input.cashReceipt)); }; var _io9 = function (input) { return "string" === typeof input.accountNumber && ("\uC77C\uBC18" === input.accountType || "\uACE0\uC815" === input.accountType) && "string" === typeof input.bank && "string" === typeof input.customerName && ("string" === typeof input.dueDate && __nestia_core_transform_isFormatDate._isFormatDate(input.dueDate)) && "boolean" === typeof input.expired && ("INCOMPLETED" === input.settlementStatus || "COMPLETED" === input.settlementStatus) && ("COMPLETED" === input.refundStatus || "NONE" === input.refundStatus || "FAILED" === input.refundStatus || "PENDING" === input.refundStatus || "PARTIAL_FAILED" === input.refundStatus); }; var _io10 = function (input) { return "object" === typeof input.card && null !== input.card && _io11(input.card) && (null === input.discount || "object" === typeof input.discount && null !== input.discount && _io12(input.discount)) && (null === input.easyPay || "\uD1A0\uC2A4\uACB0\uC81C" === input.easyPay || "\uD398\uC774\uCF54" === input.easyPay || "\uC0BC\uC131\uD398\uC774" === input.easyPay) && "\uCE74\uB4DC" === input.method && ("NORMAL" === input.type || "BILLING" === input.type) && ("READY" === input.status || "IN_PROGRESS" === input.status || "WAITING_FOR_DEPOSIT" === input.status || "DONE" === input.status || "CANCELED" === input.status || "PARTIAL_CANCELED" === input.status || "ABORTED" === input.status || "EXPIRED" === input.status) && "string" === typeof input.mId && "string" === typeof input.version && "string" === typeof input.paymentKey && "string" === typeof input.orderId && "string" === typeof input.transactionKey && "string" === typeof input.orderName && "string" === typeof input.currency && ("number" === typeof input.totalAmount && !Number.isNaN(input.totalAmount)) && ("number" === typeof input.balanceAmount && !Number.isNaN(input.balanceAmount)) && ("number" === typeof input.suppliedAmount && !Number.isNaN(input.suppliedAmount)) && ("number" === typeof input.taxFreeAmount && !Number.isNaN(input.taxFreeAmount)) && ("number" === typeof input.vat && !Number.isNaN(input.vat)) && "boolean" === typeof input.useEscrow && "boolean" === typeof input.cultureExpense && ("string" === typeof input.requestedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.requestedAt)) && (null === input.approvedAt || "string" === typeof input.approvedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.approvedAt)) && (null === input.cancels || Array.isArray(input.cancels) && input.cancels.every(function (elem) { return "object" === typeof elem && null !== elem && _io2(elem); })) && (null === input.cashReceipt || "object" === typeof input.cashReceipt && null !== input.cashReceipt && _io3(input.cashReceipt)); }; var _io11 = function (input) { return "string" === typeof input.company && ("string" === typeof input.number && RegExp("[0-9]{16}").test(input.number)) && ("number" === typeof input.installmentPlanMonths && !Number.isNaN(input.installmentPlanMonths)) && "boolean" === typeof input.isInterestFree && "string" === typeof input.approveNo && false === input.useCardPoint && ("\uC2E0\uC6A9" === input.cardType || "\uCCB4\uD06C" === input.cardType || "\uAE30\uD504\uD2B8" === input.cardType) && ("\uAC1C\uC778" === input.ownerType || "\uBC95\uC778" === input.ownerType) && ("READY" === input.acquireStatus || "CANCELED" === input.acquireStatus || "COMPLETED" === input.acquireStatus || "REQUESTED" === input.acquireStatus || "CANCEL_REQUESTED" === input.acquireStatus) && ("string" === typeof input.receiptUrl && __nestia_core_transform_isFormatUri._isFormatUri(input.receiptUrl)); }; var _io12 = function (input) { return "number" === typeof input.amount && !Number.isNaN(input.amount); }; var _iu0 = function (input) { return (function () {
if ("\uC0C1\uD488\uAD8C" === input.method)
return _io0(input);
else if ("\uD734\uB300\uD3F0" === input.method)
return _io4(input);
else if ("\uACC4\uC88C\uC774\uCCB4" === input.method)
return _io6(input);
else if ("\uAC00\uC0C1\uACC4\uC88C" === input.method)
return _io8(input);
else if (undefined !== input.easyPay)
return _io10(input);
else
return false;
})(); }; var _ao0 = function (input, _path, _exceptionable) {
if (_exceptionable === void 0) { _exceptionable = true; }
return (("object" === typeof input.giftCertificate && null !== input.giftCertificate || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".giftCertificate",
expected: "ITossGiftCertificatePayment.IGiftCertificate",
value: input.giftCertificate
}, _errorFactory)) && _ao1(input.giftCertificate, _path + ".giftCertificate", true && _exceptionable) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".giftCertificate",
expected: "ITossGiftCertificatePayment.IGiftCertificate",
value: input.giftCertificate
}, _errorFactory)) && ("\uC0C1\uD488\uAD8C" === input.method || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".method",
expected: "\"\uC0C1\uD488\uAD8C\"",
value: input.method
}, _errorFactory)) && ("NORMAL" === input.type || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".type",
expected: "\"NORMAL\"",
value: input.type
}, _errorFactory)) && ("READY" === input.status || "IN_PROGRESS" === input.status || "WAITING_FOR_DEPOSIT" === input.status || "DONE" === input.status || "CANCELED" === input.status || "PARTIAL_CANCELED" === input.status || "ABORTED" === input.status || "EXPIRED" === input.status || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".status",
expected: "(\"ABORTED\" | \"CANCELED\" | \"DONE\" | \"EXPIRED\" | \"IN_PROGRESS\" | \"PARTIAL_CANCELED\" | \"READY\" | \"WAITING_FOR_DEPOSIT\")",
value: input.status
}, _errorFactory)) && ("string" === typeof input.mId || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".mId",
expected: "string",
value: input.mId
}, _errorFactory)) && ("string" === typeof input.version || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".version",
expected: "string",
value: input.version
}, _errorFactory)) && ("string" === typeof input.paymentKey || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".paymentKey",
expected: "string",
value: input.paymentKey
}, _errorFactory)) && ("string" === typeof input.orderId || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".orderId",
expected: "string",
value: input.orderId
}, _errorFactory)) && ("string" === typeof input.transactionKey || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".transactionKey",
expected: "string",
value: input.transactionKey
}, _errorFactory)) && ("string" === typeof input.orderName || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".orderName",
expected: "string",
value: input.orderName
}, _errorFactory)) && ("string" === typeof input.currency || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".currency",
expected: "string",
value: input.currency
}, _errorFactory)) && ("number" === typeof input.totalAmount && !Number.isNaN(input.totalAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".totalAmount",
expected: "number",
value: input.totalAmount
}, _errorFactory)) && ("number" === typeof input.balanceAmount && !Number.isNaN(input.balanceAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".balanceAmount",
expected: "number",
value: input.balanceAmount
}, _errorFactory)) && ("number" === typeof input.suppliedAmount && !Number.isNaN(input.suppliedAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".suppliedAmount",
expected: "number",
value: input.suppliedAmount
}, _errorFactory)) && ("number" === typeof input.taxFreeAmount && !Number.isNaN(input.taxFreeAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".taxFreeAmount",
expected: "number",
value: input.taxFreeAmount
}, _errorFactory)) && ("number" === typeof input.vat && !Number.isNaN(input.vat) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".vat",
expected: "number",
value: input.vat
}, _errorFactory)) && ("boolean" === typeof input.useEscrow || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".useEscrow",
expected: "boolean",
value: input.useEscrow
}, _errorFactory)) && ("boolean" === typeof input.cultureExpense || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cultureExpense",
expected: "boolean",
value: input.cultureExpense
}, _errorFactory)) && ("string" === typeof input.requestedAt && (__nestia_core_transform_isFormatDateTime._isFormatDateTime(input.requestedAt) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".requestedAt",
expected: "string & Format<\"date-time\">",
value: input.requestedAt
}, _errorFactory)) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".requestedAt",
expected: "(string & Format<\"date-time\">)",
value: input.requestedAt
}, _errorFactory)) && (null === input.approvedAt || "string" === typeof input.approvedAt && (__nestia_core_transform_isFormatDateTime._isFormatDateTime(input.approvedAt) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".approvedAt",
expected: "string & Format<\"date-time\">",
value: input.approvedAt
}, _errorFactory)) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".approvedAt",
expected: "((string & Format<\"date-time\">) | null)",
value: input.approvedAt
}, _errorFactory)) && (null === input.cancels || (Array.isArray(input.cancels) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cancels",
expected: "(Array<ITossPaymentCancel> | null)",
value: input.cancels
}, _errorFactory)) && input.cancels.every(function (elem, _index6) { return ("object" === typeof elem && null !== elem || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cancels[" + _index6 + "]",
expected: "ITossPaymentCancel",
value: elem
}, _errorFactory)) && _ao2(elem, _path + ".cancels[" + _index6 + "]", true && _exceptionable) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cancels[" + _index6 + "]",
expected: "ITossPaymentCancel",
value: elem
}, _errorFactory); }) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cancels",
expected: "(Array<ITossPaymentCancel> | null)",
value: input.cancels
}, _errorFactory)) && (null === input.cashReceipt || ("object" === typeof input.cashReceipt && null !== input.cashReceipt || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cashReceipt",
expected: "(ITossCashReceipt.ISummary | null)",
value: input.cashReceipt
}, _errorFactory)) && _ao3(input.cashReceipt, _path + ".cashReceipt", true && _exceptionable) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cashReceipt",
expected: "(ITossCashReceipt.ISummary | null)",
value: input.cashReceipt
}, _errorFactory));
}; var _ao1 = function (input, _path, _exceptionable) {
if (_exceptionable === void 0) { _exceptionable = true; }
return ("string" === typeof input.approveNo || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".approveNo",
expected: "string",
value: input.approveNo
}, _errorFactory)) && ("COMPLETE" === input.settlementStatus || "INCOMPLETE" === input.settlementStatus || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".settlementStatus",
expected: "(\"COMPLETE\" | \"INCOMPLETE\")",
value: input.settlementStatus
}, _errorFactory));
}; var _ao2 = function (input, _path, _exceptionable) {
if (_exceptionable === void 0) { _exceptionable = true; }
return ("number" === typeof input.cancelAmount && !Number.isNaN(input.cancelAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cancelAmount",
expected: "number",
value: input.cancelAmount
}, _errorFactory)) && ("string" === typeof input.cancelReason || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cancelReason",
expected: "string",
value: input.cancelReason
}, _errorFactory)) && ("number" === typeof input.taxFreeAmount && !Number.isNaN(input.taxFreeAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".taxFreeAmount",
expected: "number",
value: input.taxFreeAmount
}, _errorFactory)) && ("number" === typeof input.taxAmount && !Number.isNaN(input.taxAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".taxAmount",
expected: "number",
value: input.taxAmount
}, _errorFactory)) && ("number" === typeof input.refundableAmount && !Number.isNaN(input.refundableAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".refundableAmount",
expected: "number",
value: input.refundableAmount
}, _errorFactory)) && ("string" === typeof input.canceledAt && (__nestia_core_transform_isFormatDateTime._isFormatDateTime(input.canceledAt) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".canceledAt",
expected: "string & Format<\"date-time\">",
value: input.canceledAt
}, _errorFactory)) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".canceledAt",
expected: "(string & Format<\"date-time\">)",
value: input.canceledAt
}, _errorFactory));
}; var _ao3 = function (input, _path, _exceptionable) {
if (_exceptionable === void 0) { _exceptionable = true; }
return ("\uC18C\uB4DD\uACF5\uC81C" === input.type || "\uC9C0\uCD9C\uC99D\uBE59" === input.type || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".type",
expected: "(\"\uC18C\uB4DD\uACF5\uC81C\" | \"\uC9C0\uCD9C\uC99D\uBE59\")",
value: input.type
}, _errorFactory)) && ("number" === typeof input.amount && !Number.isNaN(input.amount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".amount",
expected: "number",
value: input.amount
}, _errorFactory)) && ("number" === typeof input.taxFreeAmount && !Number.isNaN(input.taxFreeAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".taxFreeAmount",
expected: "number",
value: input.taxFreeAmount
}, _errorFactory)) && ("string" === typeof input.issueNumber || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".issueNumber",
expected: "string",
value: input.issueNumber
}, _errorFactory)) && ("string" === typeof input.receiptUrl || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".receiptUrl",
expected: "string",
value: input.receiptUrl
}, _errorFactory));
}; var _ao4 = function (input, _path, _exceptionable) {
if (_exceptionable === void 0) { _exceptionable = true; }
return (("object" === typeof input.mobilePhone && null !== input.mobilePhone || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".mobilePhone",
expected: "ITossMobilePhonePayment.IMobilePhone",
value: input.mobilePhone
}, _errorFactory)) && _ao5(input.mobilePhone, _path + ".mobilePhone", true && _exceptionable) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".mobilePhone",
expected: "ITossMobilePhonePayment.IMobilePhone",
value: input.mobilePhone
}, _errorFactory)) && ("\uD734\uB300\uD3F0" === input.method || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".method",
expected: "\"\uD734\uB300\uD3F0\"",
value: input.method
}, _errorFactory)) && ("NORMAL" === input.type || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".type",
expected: "\"NORMAL\"",
value: input.type
}, _errorFactory)) && ("READY" === input.status || "IN_PROGRESS" === input.status || "WAITING_FOR_DEPOSIT" === input.status || "DONE" === input.status || "CANCELED" === input.status || "PARTIAL_CANCELED" === input.status || "ABORTED" === input.status || "EXPIRED" === input.status || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".status",
expected: "(\"ABORTED\" | \"CANCELED\" | \"DONE\" | \"EXPIRED\" | \"IN_PROGRESS\" | \"PARTIAL_CANCELED\" | \"READY\" | \"WAITING_FOR_DEPOSIT\")",
value: input.status
}, _errorFactory)) && ("string" === typeof input.mId || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".mId",
expected: "string",
value: input.mId
}, _errorFactory)) && ("string" === typeof input.version || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".version",
expected: "string",
value: input.version
}, _errorFactory)) && ("string" === typeof input.paymentKey || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".paymentKey",
expected: "string",
value: input.paymentKey
}, _errorFactory)) && ("string" === typeof input.orderId || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".orderId",
expected: "string",
value: input.orderId
}, _errorFactory)) && ("string" === typeof input.transactionKey || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".transactionKey",
expected: "string",
value: input.transactionKey
}, _errorFactory)) && ("string" === typeof input.orderName || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".orderName",
expected: "string",
value: input.orderName
}, _errorFactory)) && ("string" === typeof input.currency || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".currency",
expected: "string",
value: input.currency
}, _errorFactory)) && ("number" === typeof input.totalAmount && !Number.isNaN(input.totalAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".totalAmount",
expected: "number",
value: input.totalAmount
}, _errorFactory)) && ("number" === typeof input.balanceAmount && !Number.isNaN(input.balanceAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".balanceAmount",
expected: "number",
value: input.balanceAmount
}, _errorFactory)) && ("number" === typeof input.suppliedAmount && !Number.isNaN(input.suppliedAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".suppliedAmount",
expected: "number",
value: input.suppliedAmount
}, _errorFactory)) && ("number" === typeof input.taxFreeAmount && !Number.isNaN(input.taxFreeAmount) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".taxFreeAmount",
expected: "number",
value: input.taxFreeAmount
}, _errorFactory)) && ("number" === typeof input.vat && !Number.isNaN(input.vat) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".vat",
expected: "number",
value: input.vat
}, _errorFactory)) && ("boolean" === typeof input.useEscrow || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".useEscrow",
expected: "boolean",
value: input.useEscrow
}, _errorFactory)) && ("boolean" === typeof input.cultureExpense || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cultureExpense",
expected: "boolean",
value: input.cultureExpense
}, _errorFactory)) && ("string" === typeof input.requestedAt && (__nestia_core_transform_isFormatDateTime._isFormatDateTime(input.requestedAt) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".requestedAt",
expected: "string & Format<\"date-time\">",
value: input.requestedAt
}, _errorFactory)) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".requestedAt",
expected: "(string & Format<\"date-time\">)",
value: input.requestedAt
}, _errorFactory)) && (null === input.approvedAt || "string" === typeof input.approvedAt && (__nestia_core_transform_isFormatDateTime._isFormatDateTime(input.approvedAt) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".approvedAt",
expected: "string & Format<\"date-time\">",
value: input.approvedAt
}, _errorFactory)) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".approvedAt",
expected: "((string & Format<\"date-time\">) | null)",
value: input.approvedAt
}, _errorFactory)) && (null === input.cancels || (Array.isArray(input.cancels) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cancels",
expected: "(Array<ITossPaymentCancel> | null)",
value: input.cancels
}, _errorFactory)) && input.cancels.every(function (elem, _index7) { return ("object" === typeof elem && null !== elem || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cancels[" + _index7 + "]",
expected: "ITossPaymentCancel",
value: elem
}, _errorFactory)) && _ao2(elem, _path + ".cancels[" + _index7 + "]", true && _exceptionable) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cancels[" + _index7 + "]",
expected: "ITossPaymentCancel",
value: elem
}, _errorFactory); }) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cancels",
expected: "(Array<ITossPaymentCancel> | null)",
value: input.cancels
}, _errorFactory)) && (null === input.cashReceipt || ("object" === typeof input.cashReceipt && null !== input.cashReceipt || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, {
method: "core.TypedRoute.Get",
path: _path + ".cashReceipt",
expected: "(ITossCashReceipt.ISummary | nul