@chevre/domain
Version:
Chevre Domain Library for Node.js
56 lines (55 loc) • 3.03 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleAuthorizeError = handleAuthorizeError;
const createDebug = require("debug");
const http_status_1 = require("http-status");
const factory = require("../../../../factory");
const debug = createDebug('chevre-domain:service:payment');
function handleAuthorizeError(error) {
debug('handling creditCard authorizeError:', error);
let handledError = error;
if (error.name === 'GMOServiceBadRequestError') {
if (Array.isArray(error.errors) && error.errors.length > 0) {
const gmoErrors = error.errors;
// 流量制限オーバーエラーの場合
const serviceUnavailableError = gmoErrors.find((gmoError) => { var _a; return (_a = gmoError.info) === null || _a === void 0 ? void 0 : _a.match(/^E92000001|E92000002$/); });
// オーダーID重複エラーの場合
const duplicateError = gmoErrors.find((gmoError) => { var _a; return (_a = gmoError.info) === null || _a === void 0 ? void 0 : _a.match(/^E01040010$/); });
if (serviceUnavailableError !== undefined) {
handledError = new factory.errors.RateLimitExceeded(serviceUnavailableError.userMessage);
}
else if (duplicateError !== undefined) {
handledError = new factory.errors.AlreadyInUse('payment', ['orderId'], duplicateError.userMessage);
}
else {
const userMessages = gmoErrors.map((gmoError) => gmoError.userMessage)
.join(',');
handledError = new factory.errors.Argument('payment', userMessages);
}
}
else {
// その他の場合、なんらかのクライアントエラー
handledError = new factory.errors.Argument('payment', 'unexpected bad request');
}
}
else if (error.name === 'RequestError') {
// タイムアウト設定によって中止されたリクエストの場合
// const uri: string | undefined = error.requestOptions?.uri;
handledError = new factory.errors.GatewayTimeout(`Gateway Timeout. name:${error.name} type:${error.type} message:${error.message}`);
}
else if (error.name === 'AbortError') {
// タイムアウト設定によって中止されたリクエストの場合
// AbortErrorハンドリング(2024-03-27~)
// {
// "type": "aborted",
// "message": "The user aborted a request.",
// "name": "AbortError"
// }
handledError = new factory.errors.GatewayTimeout(`Gateway Timeout. name:${error.name} type:${error.type} message:${error.message}`);
}
// 決済代行側が4xxを返却した場合
if (typeof error.code === 'number' && error.code < http_status_1.INTERNAL_SERVER_ERROR) {
handledError = new factory.errors.Argument('payment', `bad request code:${error.code} message:${error.message}`);
}
return handledError;
}
;