diff --git a/deno_dist/base/index.ts b/deno_dist/base/index.ts index 92726e4..d418f55 100644 --- a/deno_dist/base/index.ts +++ b/deno_dist/base/index.ts @@ -6,6 +6,7 @@ import type { LoginContext, OTP, ReceiveLinkContext, + ResponseAnyone, ResponseBalance, ResponseBody, ResponseCreateLink, @@ -26,6 +27,8 @@ import { parseReceiveLink, parseRecoveryCode, unparseRecoveryCode, + parseResultMessage, + parseAny, } from '../utils/parse.ts' import { randomUUID } from '../utils/uuid.ts' @@ -400,16 +403,10 @@ export class PayPay { ) if (!response.ok) { - return { - success: false, - raw: result - } + return parseAny(result, false) } - return { - success: isSuccess(result), - raw: result - } + return parseAny(result, true) } async sendMoney(amount: number, external_id: string): Promise { @@ -445,24 +442,17 @@ export class PayPay { ) if (!response.ok) { - return { - success: false, - raw: result - } + return parseAny(result, false) } if (result.header.resultCode === 'S9999') { throw new PayPayError('You\'re not friends with user', 1).fire() } - return { - success: isSuccess(result), - ...result.payload, - raw: result - } + return parseAny(result, true) } - async request(path: 'getProfileDisplayInfo' | 'getPay2BalanceHistory' | 'getPaymentMethodList') { + async request(path: 'getProfileDisplayInfo' | 'getPay2BalanceHistory' | 'getPaymentMethodList'): Promise { if (!this.isLogged()) { throw new PayPayError('Do not logged in', 2).fire() } @@ -474,16 +464,10 @@ export class PayPay { }) if (!response.ok) { - return { - success: false, - raw: result - } + return parseAny(result, false) } - return { - success: isSuccess(result), - raw: result - } + return parseAny(result, true) } public getRecoveryCode(): string { diff --git a/deno_dist/status/index.test.ts b/deno_dist/status/index.test.ts new file mode 100644 index 0000000..3c02e6c --- /dev/null +++ b/deno_dist/status/index.test.ts @@ -0,0 +1,10 @@ +// PayPay Status Test +import { PayPayStatus } from './index.ts' + +describe('Status', () => { + test('not include space', () => { + for (const Status of Object.values(PayPayStatus)) { + expect(Status).not.toMatch(/\s/) + } + }) +}) diff --git a/deno_dist/types.ts b/deno_dist/types.ts index 522ac49..c074840 100644 --- a/deno_dist/types.ts +++ b/deno_dist/types.ts @@ -176,4 +176,18 @@ export type ResponseReceiveLink = { [key: string]: Anyone } } +} + +export type ResponseAnyone = { + success: boolean + message: string + raw: { + header: { + resultCode: string + resultMessage: string + } + payload: { + [key: string]: Anyone + } + } } \ No newline at end of file diff --git a/deno_dist/utils/is.test.ts b/deno_dist/utils/is.test.ts index 1bb2da4..8326111 100644 --- a/deno_dist/utils/is.test.ts +++ b/deno_dist/utils/is.test.ts @@ -1,4 +1,4 @@ -// PayPay Error Test +// PayPay is Test import * as util from './is.ts' describe('Util', () => { @@ -28,4 +28,31 @@ describe('Util', () => { expect(util.isUuid(invalidUuid)).toBeFalsy() expect(util.isUuid(invalidUuid2)).toBeFalsy() }) + + test('isSuccess', () => { + const validSuccess = { + header: { + resultCode: 'S0000', + resultMessage: 'Success', + }, + payload: { + paypay: 'resultCode', + oosugi: 'dounikashite' + } + } + + const invalidSuccess = { + header: { + resultCode: 'S0001', + resultMessage: 'Invalid anyone', + }, + payload: { + paypay: 'resultCode', + oosugi: 'dounikashite' + } + } + + expect(util.isSuccess(validSuccess)).toBeTruthy() + expect(util.isSuccess(invalidSuccess)).toBeFalsy() + }) }) diff --git a/deno_dist/utils/parse.test.ts b/deno_dist/utils/parse.test.ts index 4303c92..faf629b 100644 --- a/deno_dist/utils/parse.test.ts +++ b/deno_dist/utils/parse.test.ts @@ -1,4 +1,4 @@ -// PayPay Error Test +// PayPay Parse Test import * as util from './parse.ts' describe('Util', () => { diff --git a/deno_dist/utils/parse.ts b/deno_dist/utils/parse.ts index d4f29f2..ce6be05 100644 --- a/deno_dist/utils/parse.ts +++ b/deno_dist/utils/parse.ts @@ -1,5 +1,5 @@ import { PayPayError, isSuccess } from '../index.ts' -import type { Anyone, ResponseBalance, ResponseCreateLink, ResponseGetLink, ResponseReceiveLink, ResponseUserInfo } from '../types.ts' +import type { Anyone, ResponseAnyone, ResponseBalance, ResponseCreateLink, ResponseGetLink, ResponseReceiveLink, ResponseUserInfo } from '../types.ts' export function parseCookieFromMap(map: Map): string { return Array.from(map.entries()) @@ -221,4 +221,20 @@ export function parseReceiveLink(result: Anyone, success: boolean): ResponseRece raw: result, } } +} + +export function parseAny(result: Anyone, success: boolean): ResponseAnyone { + try { + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + raw: result, + } + } catch (_e) { + return { + success: false, + message: parseResultMessage(result), + raw: result, + } + } } \ No newline at end of file diff --git a/package.json b/package.json index 489dcfa..b677d8f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "paypax", - "version": "1.7.0", + "version": "1.7.2", "description": "Library for automate PayPay operations", "scripts": { "format": "prettier --write ./src/*.{ts,tsx} ./src/**/*.{ts,tsx}", diff --git a/src/base/index.ts b/src/base/index.ts index a24498c..6c02252 100644 --- a/src/base/index.ts +++ b/src/base/index.ts @@ -6,6 +6,7 @@ import type { LoginContext, OTP, ReceiveLinkContext, + ResponseAnyone, ResponseBalance, ResponseBody, ResponseCreateLink, @@ -26,6 +27,8 @@ import { parseReceiveLink, parseRecoveryCode, unparseRecoveryCode, + parseResultMessage, + parseAny, } from '../utils/parse' import { randomUUID } from '../utils/uuid' @@ -400,16 +403,10 @@ export class PayPay { ) if (!response.ok) { - return { - success: false, - raw: result - } + return parseAny(result, false) } - return { - success: isSuccess(result), - raw: result - } + return parseAny(result, true) } async sendMoney(amount: number, external_id: string): Promise { @@ -445,24 +442,17 @@ export class PayPay { ) if (!response.ok) { - return { - success: false, - raw: result - } + return parseAny(result, false) } if (result.header.resultCode === 'S9999') { throw new PayPayError('You\'re not friends with user', 1).fire() } - return { - success: isSuccess(result), - ...result.payload, - raw: result - } + return parseAny(result, true) } - async request(path: 'getProfileDisplayInfo' | 'getPay2BalanceHistory' | 'getPaymentMethodList') { + async request(path: 'getProfileDisplayInfo' | 'getPay2BalanceHistory' | 'getPaymentMethodList'): Promise { if (!this.isLogged()) { throw new PayPayError('Do not logged in', 2).fire() } @@ -474,16 +464,10 @@ export class PayPay { }) if (!response.ok) { - return { - success: false, - raw: result - } + return parseAny(result, false) } - return { - success: isSuccess(result), - raw: result - } + return parseAny(result, true) } public getRecoveryCode(): string { diff --git a/src/types.ts b/src/types.ts index e683211..545c4b0 100644 --- a/src/types.ts +++ b/src/types.ts @@ -176,4 +176,18 @@ export type ResponseReceiveLink = { [key: string]: Anyone } } +} + +export type ResponseAnyone = { + success: boolean + message: string + raw: { + header: { + resultCode: string + resultMessage: string + } + payload: { + [key: string]: Anyone + } + } } \ No newline at end of file diff --git a/src/utils/parse.ts b/src/utils/parse.ts index 95fe97f..0a2bce4 100644 --- a/src/utils/parse.ts +++ b/src/utils/parse.ts @@ -1,5 +1,5 @@ import { PayPayError, isSuccess } from '..' -import type { Anyone, ResponseBalance, ResponseCreateLink, ResponseGetLink, ResponseReceiveLink, ResponseUserInfo } from '../types' +import type { Anyone, ResponseAnyone, ResponseBalance, ResponseCreateLink, ResponseGetLink, ResponseReceiveLink, ResponseUserInfo } from '../types' export function parseCookieFromMap(map: Map): string { return Array.from(map.entries()) @@ -221,4 +221,20 @@ export function parseReceiveLink(result: Anyone, success: boolean): ResponseRece raw: result, } } +} + +export function parseAny(result: Anyone, success: boolean): ResponseAnyone { + try { + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + raw: result, + } + } catch (_e) { + return { + success: false, + message: parseResultMessage(result), + raw: result, + } + } } \ No newline at end of file