UNPKG

fake-toss-payments-server

Version:
569 lines 141 kB
"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.FakeTossBillingController = void 0; var __nestia_core_transform_isFormatDateTime = __importStar(require("typia/lib/internal/_isFormatDateTime.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_isFormatEmail = __importStar(require("typia/lib/internal/_isFormatEmail.js")); var __nestia_core_transform_validateReport = __importStar(require("typia/lib/internal/_validateReport.js")); var __nestia_core_transform_httpParameterReadString = __importStar(require("typia/lib/internal/_httpParameterReadString.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_throwTypeGuardError = __importStar(require("typia/lib/internal/_throwTypeGuardError.js")); var core_1 = __importDefault(require("@nestia/core")); var common_1 = require("@nestjs/common"); var uuid_1 = require("uuid"); var FakeTossUserAuth_1 = require("../decorators/FakeTossUserAuth"); var FakeTossPaymentProvider_1 = require("../providers/FakeTossPaymentProvider"); var FakeTossStorage_1 = require("../providers/FakeTossStorage"); var FakeTossBillingController = /** @class */ (function () { function FakeTossBillingController() { } /** * 간편 결제 카드 등록하기. * * `billing.authorizations.card.create` 는 고객이 자신의 신록 카드를 서버에 등록해두고, * 매번 결제가 필요할 때마다 카드 정보를 반복 입력하는 일 없이 간편하게 결제를 * 진행하고자 할 때, 호출되는 API 함수이다. * * 참고로 `billing.authorizations.card.create` 는 클라이언트 어플리케이션이 토스 * 페이먼츠가 제공하는 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 * 실 서비스에서 호출하는 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 * 상황을 시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다. * * @param input 간편 결제 카드 등록 정보 * @returns 간편 결제 카드 정보 * * @security basic * @author Samchon */ FakeTossBillingController.prototype.create = function (_0, input) { var billing = { mId: "tosspyaments", method: "카드", billingKey: (0, uuid_1.v4)(), customerKey: input.customerKey, cardCompany: "신한", cardNumber: input.cardNumber, authenticatedAt: new Date().toISOString(), }; FakeTossStorage_1.FakeTossStorage.billings.set(billing.billingKey, [billing, input]); return billing; }; /** * 간편 결제로 등록한 수단 조회하기. * * `billing.authorizations.at` 은 고객이 간편 결제를 위하여 토스 페이먼츠 서버에 * 등록한 결제 수단을 조회하는 함수이다. * * 주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는 * 경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `billingKey` 와` customerKey` * 만을 전달해주어, 상세 간편 결제 수단 정보가 필요할 때 사용한다. * * @param billingKey 대상 정보의 {@link ITossBilling.billingKey} * @param input 고객 식별자 키 * @returns 간편 결제 수단 정보 * * @security basic * @author Samchon */ FakeTossBillingController.prototype.at = function (_0, billingKey, input) { var tuple = FakeTossStorage_1.FakeTossStorage.billings.get(billingKey); if (tuple[0].customerKey !== input.customerKey) throw new common_1.ForbiddenException("Different customer."); return tuple[0]; }; /** * 간편 결제에 등록한 수단으로 결제하기. * * `billing.pay` 는 간편 결제에 등록한 수단으로 결제를 진행하고자 할 때 호출하는 API * 함수이다. * * 그리고 `billing.pay` 는 결제 수단 중 유일하게, 클라이언트 어플리케이션이 토스 * 페이먼츠가 제공하는 결제 창을 사용할 수 없어, 귀하의 백엔드 서버가 토스 페이먼츠의 * API 함수를 직접 호출해야 하는 경우에 해당한다. 따라서 간편 결제에 관련하여 토스 * 페이먼츠와 연동하는 백엔드 서버 및 프론트 어플리케이션을 개발할 때, 반드시 이 상황에 * 대한 별도의 설계 및 개발이 필요하니, 이 점을 염두에 두기 바란다. * * 더하여 `billing.pay` 는 철저히 귀사 백엔드 서버의 판단 아래 호출되는 API 함수인지라, * 이를 통하여 이루어지는 결제는 일절 {@link payments.approve} 가 필요 없다. 다만 * `billing.pay` 는 이처럼 부차적인 승인 과정 필요없이 그 즉시로 결제가 완성되니, 이를 * 호출하는 상황에 대하여 세심히 주의를 기울일 필요가 있다 * * @param billingKey 간편 결제에 등록한 수단의 {@link ITossBilling.billingKey} * @param input 주문 정보 * @returns 결제 정보 * * @security basic * @author Samchon */ FakeTossBillingController.prototype.pay = function (_0, billingKey, input) { var tuple = FakeTossStorage_1.FakeTossStorage.billings.get(billingKey); var card = tuple[1]; var payment = __assign(__assign({}, FakeTossPaymentProvider_1.FakeTossPaymentProvider.get_common_props(input)), { method: "카드", type: "NORMAL", status: "DONE", approvedAt: new Date().toISOString(), discount: null, card: { company: "신한카드", number: card.cardNumber, installmentPlanMonths: 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; }; __decorate([ core_1.default.TypedRoute.Post("authorizations/card", { type: "assert", assert: (function () { var _io0 = function (input) { return "string" === typeof input.mId && "string" === typeof input.billingKey && "\uCE74\uB4DC" === input.method && "string" === typeof input.cardCompany && ("string" === typeof input.cardNumber && RegExp("[0-9]{16}").test(input.cardNumber)) && ("string" === typeof input.authenticatedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.authenticatedAt)) && "string" === typeof input.customerKey; }; var _ao0 = function (input, _path, _exceptionable) { if (_exceptionable === void 0) { _exceptionable = true; } return ("string" === typeof input.mId || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".mId", expected: "string", value: input.mId }, _errorFactory)) && ("string" === typeof input.billingKey || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".billingKey", expected: "string", value: input.billingKey }, _errorFactory)) && ("\uCE74\uB4DC" === input.method || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".method", expected: "\"\uCE74\uB4DC\"", value: input.method }, _errorFactory)) && ("string" === typeof input.cardCompany || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".cardCompany", expected: "string", value: input.cardCompany }, _errorFactory)) && ("string" === typeof input.cardNumber && (RegExp("[0-9]{16}").test(input.cardNumber) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".cardNumber", expected: "string & Pattern<\"[0-9]{16}\">", value: input.cardNumber }, _errorFactory)) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".cardNumber", expected: "(string & Pattern<\"[0-9]{16}\">)", value: input.cardNumber }, _errorFactory)) && ("string" === typeof input.authenticatedAt && (__nestia_core_transform_isFormatDateTime._isFormatDateTime(input.authenticatedAt) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".authenticatedAt", expected: "string & Format<\"date-time\">", value: input.authenticatedAt }, _errorFactory)) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".authenticatedAt", expected: "(string & Format<\"date-time\">)", value: input.authenticatedAt }, _errorFactory)) && ("string" === typeof input.customerKey || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".customerKey", expected: "string", value: input.customerKey }, _errorFactory)); }; var _so0 = function (input) { return "{\"mId\":".concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.mId), ",\"billingKey\":").concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.billingKey), ",\"method\":").concat("\"" + input.method + "\"", ",\"cardCompany\":").concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.cardCompany), ",\"cardNumber\":").concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.cardNumber), ",\"authenticatedAt\":").concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.authenticatedAt), ",\"customerKey\":").concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.customerKey), "}"); }; var __is = function (input) { return "object" === typeof input && null !== input && _io0(input); }; var _errorFactory; var __assert = function (input, errorFactory) { if (false === __is(input)) { _errorFactory = errorFactory; (function (input, _path, _exceptionable) { if (_exceptionable === void 0) { _exceptionable = true; } return ("object" === typeof input && null !== input || __nestia_core_transform_assertGuard._assertGuard(true, { method: "core.TypedRoute.Post", path: _path + "", expected: "ITossBilling", value: input }, _errorFactory)) && _ao0(input, _path + "", true) || __nestia_core_transform_assertGuard._assertGuard(true, { method: "core.TypedRoute.Post", path: _path + "", expected: "ITossBilling", value: input }, _errorFactory); })(input, "$input", true); } return input; }; var __stringify = function (input) { return _so0(input); }; return function (input, errorFactory) { __assert(input, errorFactory); return __stringify(input); }; })() }), __param(0, (0, FakeTossUserAuth_1.FakeTossUserAuth)()), __param(1, core_1.default.TypedBody({ type: "validate", validate: (function () { var _io0 = function (input) { return "string" === typeof input.cardNumber && RegExp("[0-9]{16}").test(input.cardNumber) && ("string" === typeof input.cardExpirationYear && RegExp("\\d{2}").test(input.cardExpirationYear)) && ("string" === typeof input.cardExpirationMonth && RegExp("^(0[1-9]|1[012])$").test(input.cardExpirationMonth)) && "string" === typeof input.cardPassword && ("string" === typeof input.customerBirthday && RegExp("^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$").test(input.customerBirthday)) && (undefined === input.consumerName || "string" === typeof input.consumerName) && (undefined === input.customerEmail || "string" === typeof input.customerEmail && __nestia_core_transform_isFormatEmail._isFormatEmail(input.customerEmail)) && (undefined === input.vbv || "object" === typeof input.vbv && null !== input.vbv && _io1(input.vbv)) && "string" === typeof input.customerKey; }; var _io1 = function (input) { return "string" === typeof input.cavv && "string" === typeof input.xid && "string" === typeof input.eci; }; var _vo0 = function (input, _path, _exceptionable) { if (_exceptionable === void 0) { _exceptionable = true; } return ["string" === typeof input.cardNumber && (RegExp("[0-9]{16}").test(input.cardNumber) || _report(_exceptionable, { path: _path + ".cardNumber", expected: "string & Pattern<\"[0-9]{16}\">", value: input.cardNumber })) || _report(_exceptionable, { path: _path + ".cardNumber", expected: "(string & Pattern<\"[0-9]{16}\">)", value: input.cardNumber }), "string" === typeof input.cardExpirationYear && (RegExp("\\d{2}").test(input.cardExpirationYear) || _report(_exceptionable, { path: _path + ".cardExpirationYear", expected: "string & Pattern<\"\\\\d{2}\">", value: input.cardExpirationYear })) || _report(_exceptionable, { path: _path + ".cardExpirationYear", expected: "(string & Pattern<\"\\\\d{2}\">)", value: input.cardExpirationYear }), "string" === typeof input.cardExpirationMonth && (RegExp("^(0[1-9]|1[012])$").test(input.cardExpirationMonth) || _report(_exceptionable, { path: _path + ".cardExpirationMonth", expected: "string & Pattern<\"^(0[1-9]|1[012])$\">", value: input.cardExpirationMonth })) || _report(_exceptionable, { path: _path + ".cardExpirationMonth", expected: "(string & Pattern<\"^(0[1-9]|1[012])$\">)", value: input.cardExpirationMonth }), "string" === typeof input.cardPassword || _report(_exceptionable, { path: _path + ".cardPassword", expected: "string", value: input.cardPassword }), "string" === typeof input.customerBirthday && (RegExp("^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$").test(input.customerBirthday) || _report(_exceptionable, { path: _path + ".customerBirthday", expected: "string & Pattern<\"^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$\">", value: input.customerBirthday })) || _report(_exceptionable, { path: _path + ".customerBirthday", expected: "(string & Pattern<\"^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$\">)", value: input.customerBirthday }), undefined === input.consumerName || "string" === typeof input.consumerName || _report(_exceptionable, { path: _path + ".consumerName", expected: "(string | undefined)", value: input.consumerName }), undefined === input.customerEmail || "string" === typeof input.customerEmail && (__nestia_core_transform_isFormatEmail._isFormatEmail(input.customerEmail) || _report(_exceptionable, { path: _path + ".customerEmail", expected: "string & Format<\"email\">", value: input.customerEmail })) || _report(_exceptionable, { path: _path + ".customerEmail", expected: "((string & Format<\"email\">) | undefined)", value: input.customerEmail }), undefined === input.vbv || ("object" === typeof input.vbv && null !== input.vbv || _report(_exceptionable, { path: _path + ".vbv", expected: "(__type | undefined)", value: input.vbv })) && _vo1(input.vbv, _path + ".vbv", true && _exceptionable) || _report(_exceptionable, { path: _path + ".vbv", expected: "(__type | undefined)", value: input.vbv }), "string" === typeof input.customerKey || _report(_exceptionable, { path: _path + ".customerKey", expected: "string", value: input.customerKey })].every(function (flag) { return flag; }); }; var _vo1 = function (input, _path, _exceptionable) { if (_exceptionable === void 0) { _exceptionable = true; } return ["string" === typeof input.cavv || _report(_exceptionable, { path: _path + ".cavv", expected: "string", value: input.cavv }), "string" === typeof input.xid || _report(_exceptionable, { path: _path + ".xid", expected: "string", value: input.xid }), "string" === typeof input.eci || _report(_exceptionable, { path: _path + ".eci", expected: "string", value: input.eci })].every(function (flag) { return flag; }); }; var __is = function (input) { return "object" === typeof input && null !== input && _io0(input); }; var errors; var _report; return function (input) { if (false === __is(input)) { errors = []; _report = __nestia_core_transform_validateReport._validateReport(errors); (function (input, _path, _exceptionable) { if (_exceptionable === void 0) { _exceptionable = true; } return ("object" === typeof input && null !== input || _report(true, { path: _path + "", expected: "ITossBilling.ICreate", value: input })) && _vo0(input, _path + "", true) || _report(true, { path: _path + "", expected: "ITossBilling.ICreate", value: input }); })(input, "$input", true); var success = 0 === errors.length; return success ? { success: success, data: input } : { success: success, errors: errors, data: input }; } return { success: true, data: input }; }; })() })), __metadata("design:type", Function), __metadata("design:paramtypes", [void 0, Object]), __metadata("design:returntype", Object) ], FakeTossBillingController.prototype, "create", null); __decorate([ core_1.default.TypedRoute.Post("authorizations/:billingKey", { type: "assert", assert: (function () { var _io0 = function (input) { return "string" === typeof input.mId && "string" === typeof input.billingKey && "\uCE74\uB4DC" === input.method && "string" === typeof input.cardCompany && ("string" === typeof input.cardNumber && RegExp("[0-9]{16}").test(input.cardNumber)) && ("string" === typeof input.authenticatedAt && __nestia_core_transform_isFormatDateTime._isFormatDateTime(input.authenticatedAt)) && "string" === typeof input.customerKey; }; var _ao0 = function (input, _path, _exceptionable) { if (_exceptionable === void 0) { _exceptionable = true; } return ("string" === typeof input.mId || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".mId", expected: "string", value: input.mId }, _errorFactory)) && ("string" === typeof input.billingKey || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".billingKey", expected: "string", value: input.billingKey }, _errorFactory)) && ("\uCE74\uB4DC" === input.method || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".method", expected: "\"\uCE74\uB4DC\"", value: input.method }, _errorFactory)) && ("string" === typeof input.cardCompany || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".cardCompany", expected: "string", value: input.cardCompany }, _errorFactory)) && ("string" === typeof input.cardNumber && (RegExp("[0-9]{16}").test(input.cardNumber) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".cardNumber", expected: "string & Pattern<\"[0-9]{16}\">", value: input.cardNumber }, _errorFactory)) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".cardNumber", expected: "(string & Pattern<\"[0-9]{16}\">)", value: input.cardNumber }, _errorFactory)) && ("string" === typeof input.authenticatedAt && (__nestia_core_transform_isFormatDateTime._isFormatDateTime(input.authenticatedAt) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".authenticatedAt", expected: "string & Format<\"date-time\">", value: input.authenticatedAt }, _errorFactory)) || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".authenticatedAt", expected: "(string & Format<\"date-time\">)", value: input.authenticatedAt }, _errorFactory)) && ("string" === typeof input.customerKey || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".customerKey", expected: "string", value: input.customerKey }, _errorFactory)); }; var _so0 = function (input) { return "{\"mId\":".concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.mId), ",\"billingKey\":").concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.billingKey), ",\"method\":").concat("\"" + input.method + "\"", ",\"cardCompany\":").concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.cardCompany), ",\"cardNumber\":").concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.cardNumber), ",\"authenticatedAt\":").concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.authenticatedAt), ",\"customerKey\":").concat(__nestia_core_transform_jsonStringifyString._jsonStringifyString(input.customerKey), "}"); }; var __is = function (input) { return "object" === typeof input && null !== input && _io0(input); }; var _errorFactory; var __assert = function (input, errorFactory) { if (false === __is(input)) { _errorFactory = errorFactory; (function (input, _path, _exceptionable) { if (_exceptionable === void 0) { _exceptionable = true; } return ("object" === typeof input && null !== input || __nestia_core_transform_assertGuard._assertGuard(true, { method: "core.TypedRoute.Post", path: _path + "", expected: "ITossBilling", value: input }, _errorFactory)) && _ao0(input, _path + "", true) || __nestia_core_transform_assertGuard._assertGuard(true, { method: "core.TypedRoute.Post", path: _path + "", expected: "ITossBilling", value: input }, _errorFactory); })(input, "$input", true); } return input; }; var __stringify = function (input) { return _so0(input); }; return function (input, errorFactory) { __assert(input, errorFactory); return __stringify(input); }; })() }), __param(0, (0, FakeTossUserAuth_1.FakeTossUserAuth)()), __param(1, core_1.default.TypedParam("billingKey", function (input) { var assert = (function () { var __is = function (input) { return "string" === typeof input; }; var _errorFactory; return function (input, errorFactory) { if (false === __is(input)) { _errorFactory = errorFactory; (function (input, _path, _exceptionable) { if (_exceptionable === void 0) { _exceptionable = true; } return "string" === typeof input || __nestia_core_transform_assertGuard._assertGuard(true, { method: "core.TypedParam", path: _path + "", expected: "string", value: input }, _errorFactory); })(input, "$input", true); } return input; }; })(); var value = __nestia_core_transform_httpParameterReadString._httpParameterReadString(input); return assert(value); })), __param(2, core_1.default.TypedBody({ type: "validate", validate: (function () { var _io0 = function (input) { return "string" === typeof input.customerKey; }; var _vo0 = function (input, _path, _exceptionable) { if (_exceptionable === void 0) { _exceptionable = true; } return ["string" === typeof input.customerKey || _report(_exceptionable, { path: _path + ".customerKey", expected: "string", value: input.customerKey })].every(function (flag) { return flag; }); }; var __is = function (input) { return "object" === typeof input && null !== input && _io0(input); }; var errors; var _report; return function (input) { if (false === __is(input)) { errors = []; _report = __nestia_core_transform_validateReport._validateReport(errors); (function (input, _path, _exceptionable) { if (_exceptionable === void 0) { _exceptionable = true; } return ("object" === typeof input && null !== input || _report(true, { path: _path + "", expected: "ITossBilling.ICustomerKey", value: input })) && _vo0(input, _path + "", true) || _report(true, { path: _path + "", expected: "ITossBilling.ICustomerKey", value: input }); })(input, "$input", true); var success = 0 === errors.length; return success ? { success: success, data: input } : { success: success, errors: errors, data: input }; } return { success: true, data: input }; }; })() })), __metadata("design:type", Function), __metadata("design:paramtypes", [void 0, String, Object]), __metadata("design:returntype", Object) ], FakeTossBillingController.prototype, "at", null); __decorate([ core_1.default.TypedRoute.Post(":billingKey", { 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.Post", 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.Post", path: _path + ".giftCertificate", expected: "ITossGiftCertificatePayment.IGiftCertificate", value: input.giftCertificate }, _errorFactory)) && ("\uC0C1\uD488\uAD8C" === input.method || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".method", expected: "\"\uC0C1\uD488\uAD8C\"", value: input.method }, _errorFactory)) && ("NORMAL" === input.type || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", 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.Post", 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.Post", path: _path + ".mId", expected: "string", value: input.mId }, _errorFactory)) && ("string" === typeof input.version || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".version", expected: "string", value: input.version }, _errorFactory)) && ("string" === typeof input.paymentKey || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".paymentKey", expected: "string", value: input.paymentKey }, _errorFactory)) && ("string" === typeof input.orderId || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".orderId", expected: "string", value: input.orderId }, _errorFactory)) && ("string" === typeof input.transactionKey || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".transactionKey", expected: "string", value: input.transactionKey }, _errorFactory)) && ("string" === typeof input.orderName || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", path: _path + ".orderName", expected: "string", value: input.orderName }, _errorFactory)) && ("string" === typeof input.currency || __nestia_core_transform_assertGuard._assertGuard(_exceptionable, { method: "core.TypedRoute.Post", 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.Post", 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.Typed