From 152916db350c556a72804347238686db12c909ec Mon Sep 17 00:00:00 2001 From: EdamAme <121654029+EdamAme-x@users.noreply.github.com> Date: Sun, 21 Jan 2024 03:43:45 +0900 Subject: [PATCH] fix: resuleCode required & chore v1.7.0 --- CONTRIBUTING.md | 9 +- deno_dist/README.md | 10 ++ deno_dist/base/index.ts | 38 +++--- deno_dist/types.ts | 7 +- deno_dist/utils/parse.test.ts | 51 ++++++++ deno_dist/utils/parse.ts | 230 +++++++++++++++++++++++----------- docs/docs/index.md | 3 + package.json | 2 +- src/base/index.ts | 38 +++--- src/types.ts | 7 +- src/utils/parse.test.ts | 51 ++++++++ src/utils/parse.ts | 230 +++++++++++++++++++++++----------- 12 files changed, 502 insertions(+), 174 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8e075b5..a8693f3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1 +1,8 @@ -FREE!!! \ No newline at end of file +FREE!!! + +ただし以下の三つを守る場合に限る + +1. ちゃんとテストをする +テストが難しい場合は PullRequest でその旨を伝える +2. 他の形式に合わせる +Disscussion や twitter で聞いて良し \ No newline at end of file diff --git a/deno_dist/README.md b/deno_dist/README.md index 02c2291..846b6ae 100644 --- a/deno_dist/README.md +++ b/deno_dist/README.md @@ -1,3 +1,13 @@ +[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/EdamAme-x/paypax/test.yml?branch=main)](https://github.com/EdamAme-x/paypax/actions) +[![GitHub](https://img.shields.io/github/license/EdamAme-x/paypax)](https://github.com/EdamAme-x/paypax/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/paypax)](https://www.npmjs.com/package/paypax) +[![npm](https://img.shields.io/npm/dm/paypax)](https://www.npmjs.com/package/paypax) +[![npm type definitions](https://img.shields.io/npm/types/paypax)](https://www.npmjs.com/package/paypax) +[![GitHub commit activity](https://img.shields.io/github/commit-activity/m/EdamAme-x/paypax)](https://github.com/EdamAme-x/paypax/pulse) +[![GitHub last commit](https://img.shields.io/github/last-commit/EdamAme-x/paypax)](https://github.com/EdamAme-x/paypax/commits/main) +[![Deno badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fdeno-visualizer.danopia.net%2Fshields%2Flatest-version%2Fx%2Fpaypax%2Fmod.ts)](https://doc.deno.land/https/deno.land/x/paypax/mod.ts) +[![Discord badge](https://img.shields.io/discord/1115195558743781408?label=Discord&logo=Discord)](https://discord.gg/ctkpaarr) + # PayPax PayPay UnOffical api Rapper Library | Various PayPay operations can be automated, from login to balance transfer and confirmation. Open Source Software 🎁 diff --git a/deno_dist/base/index.ts b/deno_dist/base/index.ts index 6a4065f..92726e4 100644 --- a/deno_dist/base/index.ts +++ b/deno_dist/base/index.ts @@ -209,8 +209,7 @@ export class PayPay { 'resultMessage' in result['header'] ) { if ( - result['header']['resultCode'] === 'S0001' || - result['header']['resultCode'] === 'S9999' + result['header']['resultCode'] === 'S0001' ) { // Refresh await this.login({ @@ -239,10 +238,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Get balance failed', 1).fire() + return parseBalanceContext(result, false) } - return parseBalanceContext(result) + return parseBalanceContext(result, true) } async getUserInfo(): Promise { @@ -258,10 +257,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Get user info failed', 1).fire() + return parseUserInfoContext(result, false) } - return parseUserInfoContext(result) + return parseUserInfoContext(result, true) } async createLink(amount: number, passcode?: string): Promise { @@ -295,10 +294,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Create link failed', 1).fire() + return parseCreateLink(result, false) } - return parseCreateLink(result) + return parseCreateLink(result, true) } async getLink(link: string): Promise { @@ -320,10 +319,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Link is not found', 1).fire() + return parseGetLink(result, false) } - return parseGetLink(result) + return parseGetLink(result, true) } async receiveLink(link: string, passcode?: string): Promise { @@ -364,10 +363,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Receive link failed', 1).fire() + return parseReceiveLink(result, false) } - return parseReceiveLink(result) + return parseReceiveLink(result, true) }catch (_e) { throw new PayPayError('Invalid link', 1).fire() } @@ -401,7 +400,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Reject link failed', 1).fire() + return { + success: false, + raw: result + } } return { @@ -443,7 +445,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Send money failed', 1).fire() + return { + success: false, + raw: result + } } if (result.header.resultCode === 'S9999') { @@ -469,7 +474,10 @@ export class PayPay { }) if (!response.ok) { - throw new PayPayError('Request path failed', 1).fire() + return { + success: false, + raw: result + } } return { diff --git a/deno_dist/types.ts b/deno_dist/types.ts index 3fd6374..522ac49 100644 --- a/deno_dist/types.ts +++ b/deno_dist/types.ts @@ -75,6 +75,7 @@ export type ResponseFail = { export type ResponseBalance = { success: boolean + message: string total: number currency: 'JPY' | string updated_at: string @@ -91,6 +92,7 @@ export type ResponseBalance = { export type ResponseUserInfo = { success: boolean + message: string id: number user_id: string state: string @@ -115,8 +117,9 @@ export type ResponseUserInfo = { export type ResponseCreateLink = { success: boolean + message: string orderId: string - orderStatus: 'PENDING' + orderStatus: string link: string transactionAt: string expiry: string @@ -133,6 +136,7 @@ export type ResponseCreateLink = { export type ResponseGetLink = { success: boolean + message: string orderId: string orderType: string description: string @@ -159,6 +163,7 @@ export type ResponseGetLink = { export type ResponseReceiveLink = { success: boolean + message: string messageId: string chatRoomId: string orderStatus: string diff --git a/deno_dist/utils/parse.test.ts b/deno_dist/utils/parse.test.ts index a89b21f..4303c92 100644 --- a/deno_dist/utils/parse.test.ts +++ b/deno_dist/utils/parse.test.ts @@ -28,4 +28,55 @@ describe('Util', () => { expect(password).toBe('ctkpaarR2') expect(uuid).toBe('a9b3d5c6-7d8e-9f0a-bcde-fghijk') }) + + test('prase fail response', () => { + const failResponse = { + header: { + resultCode: 'S0001', + resultMessage: 'Invalid anyone', + }, + payload: { + paypay: 'resultCode', + oosugi: 'dounikashite' + } + } + + expect(util.parseBalanceContext(failResponse, false)).toStrictEqual({ + success: false, + message: 'Invalid anyone', + total: 0, + currency: 'JPY', + updated_at: new Date(0).toISOString(), + raw: failResponse + }) + }) + + test('parse resultMessage', () => { + const eg1 = { + header: { + resultCode: 'S0001', + resultMessage: 'Example 1', + }, + payload: { + paypay: 'resultCode', + oosugi: 'dounikashite' + } + } + + expect(util.parseResultMessage(eg1)).toBe('Example 1') + + const eg2 = { + header: {}, + payload: { + paypay: 'resultCode', + oosugi: 'dounikashite' + } + } + + expect(util.parseResultMessage(eg2)).toBe('unknown') + + const eg3 = {} + + expect(util.parseResultMessage(eg3)).toBe('unknown') + }) }) diff --git a/deno_dist/utils/parse.ts b/deno_dist/utils/parse.ts index ebab80a..d4f29f2 100644 --- a/deno_dist/utils/parse.ts +++ b/deno_dist/utils/parse.ts @@ -1,4 +1,5 @@ -import { PayPayError, type Anyone, type ResponseBalance, type ResponseCreateLink, type ResponseGetLink, type ResponseReceiveLink, type ResponseUserInfo, isSuccess } from '../index.ts' +import { PayPayError, isSuccess } from '../index.ts' +import type { Anyone, ResponseBalance, ResponseCreateLink, ResponseGetLink, ResponseReceiveLink, ResponseUserInfo } from '../types.ts' export function parseCookieFromMap(map: Map): string { return Array.from(map.entries()) @@ -43,92 +44,181 @@ export function unparseRecoveryCode(recoveryCode: string): { } } -export function parseBalanceContext(result: Anyone): ResponseBalance { - return { - success: isSuccess(result), - total: result.payload.walletSummary.allTotalBalanceInfo.balance, - currency: result.payload.walletSummary.allTotalBalanceInfo.currency, - updated_at: result.payload.updatedAt, - raw: result, +export function parseResultMessage(result: Anyone): string { + if ('header' in result && 'resultMessage' in result.header) { + return result.header.resultMessage ?? 'unknown' + } else { + return 'unknown' } } -export function parseUserInfoContext(result: Anyone): ResponseUserInfo { - return { - success: isSuccess(result), - id: result.payload.id, - user_id: result.payload.user_defined_id ?? 'unknown', - state: result.payload.state, - first_name: result.payload.first_name, - last_name: result.payload.last_name, - display_name: result.payload.display_name, - icon_url: result.payload.photo_url, - phone_number: result.payload.mobile, - email: result.payload.email, - date_of_birth: result.payload.date_of_birth, - external_id: result.payload.external_id, - raw: result, +export function parseBalanceContext(result: Anyone, success: boolean): ResponseBalance { + try { + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + total: result.payload.total ?? 0, + currency: result.payload.currency ?? 'JPY', + updated_at: new Date(0).toISOString(), + raw: result, + } + }catch (_e) { + return { + success: false, + message: parseResultMessage(result), + total: 0, + currency: 'JPY', + updated_at: new Date(0).toISOString(), + raw: result, + } } } -export function parseCreateLink(result: Anyone): ResponseCreateLink { - return { - success: isSuccess(result), - orderId: result.payload.orderId, - orderStatus: result.payload.orderStatus, - link: result.payload.link, - transactionAt: result.payload.transactionAt, - expiry: result.payload.expiry, - raw: result, +export function parseUserInfoContext(result: Anyone, success: boolean): ResponseUserInfo { + try { + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + id: result.payload.id ?? 0, + user_id: result.payload.user_defined_id ?? 'unknown', + state: result.payload.state ?? 'unknown', + first_name: result.payload.first_name ?? 'unknown', + last_name: result.payload.last_name ?? 'unknown', + display_name: result.payload.display_name ?? 'unknown', + icon_url: result.payload.photo_url ?? 'unknown', + phone_number: result.payload.mobile ?? 'unknown', + email: result.payload.email ?? 'unknown', + date_of_birth: result.payload.date_of_birth ?? 'unknown', + external_id: result.payload.external_id ?? 'unknown', + raw: result, + } + }catch (_e) { + return { + success: false, + message: parseResultMessage(result), + id: 0, + user_id: 'unknown', + state: 'unknown', + first_name: 'unknown', + last_name: 'unknown', + display_name: 'unknown', + icon_url: 'unknown', + phone_number: 'unknown', + email: 'unknown', + date_of_birth: 'unknown', + external_id: 'unknown', + raw: result, + } } } -export function parseGetLink(result: Anyone): ResponseGetLink { - if (!('pendingP2PInfo' in result.payload)) { +export function parseCreateLink(result: Anyone, success: boolean): ResponseCreateLink { + try { + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + orderId: result.payload.orderId ?? 'unknown', + orderStatus: result.payload.orderStatus ?? 'unknown', + link: result.payload.link ?? 'unknown', + transactionAt: result.payload.transactionAt ?? new Date(0).toISOString(), + expiry: result.payload.expiry ?? new Date(0).toISOString(), + raw: result, + } + }catch (_e) { return { success: false, - orderId: '', - orderType: '', - description: '', - imageUrl: '', - amount: 0, - link: '', - isSetPasscode: false, - createdAt: '', - acceptedAt: '', - money_type: '', - sender_name: '', - sender_external_id: '', - photo_url: '', + message: parseResultMessage(result), + orderId: 'unknown', + orderStatus: 'unknown', + link: 'unknown', + transactionAt: new Date(0).toISOString(), + expiry: new Date(0).toISOString(), raw: result, } } +} - return { - success: isSuccess(result), - orderId: result.payload.pendingP2PInfo.orderId, - orderType: result.payload.pendingP2PInfo.orderType, - description: result.payload.pendingP2PInfo.description, - imageUrl: result.payload.pendingP2PInfo.imageUrl, - amount: result.payload.pendingP2PInfo.amount, - link: result.payload.pendingP2PInfo.link, - isSetPasscode: result.payload.pendingP2PInfo.isSetPasscode, - createdAt: result.payload.pendingP2PInfo.createdAt, - acceptedAt: result.payload.pendingP2PInfo.acceptedAt, - money_type: result.payload.pendingP2PInfo.moneyPriorit, - sender_name: result.payload.sender.displayName, - sender_external_id: result.payload.sender.externalId, - photo_url: result.payload.sender.photoUrl, - raw: result, +export function parseGetLink(result: Anyone, success: boolean): ResponseGetLink { + try { + if (!('pendingP2PInfo' in result.payload)) { + return { + success: false, + message: parseResultMessage(result), + orderId: '', + orderType: '', + description: '', + imageUrl: '', + amount: 0, + link: '', + isSetPasscode: false, + createdAt: '', + acceptedAt: '', + money_type: '', + sender_name: '', + sender_external_id: '', + photo_url: '', + raw: result, + } + } + + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + orderId: result.payload.pendingP2PInfo.orderId ?? 'unknown', + orderType: result.payload.pendingP2PInfo.orderType ?? 'unknown', + description: result.payload.pendingP2PInfo.description ?? 'unknown', + imageUrl: result.payload.pendingP2PInfo.imageUrl ?? 'unknown', + amount: result.payload.pendingP2PInfo.amount ?? 0, + link: result.payload.pendingP2PInfo.link ?? 'unknown', + isSetPasscode: result.payload.pendingP2PInfo.isSetPasscode ?? false, + createdAt: result.payload.pendingP2PInfo.createdAt ?? new Date(0).toISOString(), + acceptedAt: result.payload.pendingP2PInfo.acceptedAt ?? new Date(0).toISOString(), + money_type: result.payload.pendingP2PInfo.moneyPriorit ?? 'unknown', + sender_name: result.payload.sender.displayName ?? 'unknown', + sender_external_id: result.payload.sender.externalId ?? 'unknown', + photo_url: result.payload.sender.photoUrl ?? 'unknown', + raw: result, + } + }catch (_e) { + return { + success: false, + message: parseResultMessage(result), + orderId: 'unknown', + orderType: 'unknown', + description: 'unknown', + imageUrl: 'unknown', + amount: 0, + link: 'unknown', + isSetPasscode: false, + createdAt: new Date(0).toISOString(), + acceptedAt: new Date(0).toISOString(), + money_type: 'unknown', + sender_name: 'unknown', + sender_external_id: 'unknown', + photo_url: 'unknown', + raw: result, + } } } -export function parseReceiveLink(result: Anyone): ResponseReceiveLink { - return { - success: isSuccess(result), - messageId: result.payload.messageId, - chatRoomId: result.payload.chatRoomId, - orderStatus: result.payload.orderStatus, - raw: result, +export function parseReceiveLink(result: Anyone, success: boolean): ResponseReceiveLink { + try { + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + messageId: result.payload.messageId ?? 'unknown', + chatRoomId: result.payload.chatRoomId ?? 'unknown', + orderStatus: result.payload.orderStatus ?? 'unknown', + raw: result, + } + } catch (_e) { + return { + success: false, + message: parseResultMessage(result), + messageId: 'unknown', + chatRoomId: 'unknown', + orderStatus: 'unknown', + raw: result, + } } } \ No newline at end of file diff --git a/docs/docs/index.md b/docs/docs/index.md index 9fa9dc0..bc9f72d 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -115,6 +115,9 @@ import { PayPayStatus } from 'paypax' ## どんなメソッドがあるの 大体のことが出来ます。 機能追加の **PR** や、要望は **disscus** まで。 +ただし、返り値の `success` プロパティを必ず確認してください。 +このプロパティには、 `boolean` で値が入っており、失敗したか成功したか一目瞭然です。 +`message` プロパティには、どのような結果になったかが入っています。 ### getBalance diff --git a/package.json b/package.json index 4026ac9..489dcfa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "paypax", - "version": "1.6.1", + "version": "1.7.0", "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 5bf6092..a24498c 100644 --- a/src/base/index.ts +++ b/src/base/index.ts @@ -209,8 +209,7 @@ export class PayPay { 'resultMessage' in result['header'] ) { if ( - result['header']['resultCode'] === 'S0001' || - result['header']['resultCode'] === 'S9999' + result['header']['resultCode'] === 'S0001' ) { // Refresh await this.login({ @@ -239,10 +238,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Get balance failed', 1).fire() + return parseBalanceContext(result, false) } - return parseBalanceContext(result) + return parseBalanceContext(result, true) } async getUserInfo(): Promise { @@ -258,10 +257,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Get user info failed', 1).fire() + return parseUserInfoContext(result, false) } - return parseUserInfoContext(result) + return parseUserInfoContext(result, true) } async createLink(amount: number, passcode?: string): Promise { @@ -295,10 +294,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Create link failed', 1).fire() + return parseCreateLink(result, false) } - return parseCreateLink(result) + return parseCreateLink(result, true) } async getLink(link: string): Promise { @@ -320,10 +319,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Link is not found', 1).fire() + return parseGetLink(result, false) } - return parseGetLink(result) + return parseGetLink(result, true) } async receiveLink(link: string, passcode?: string): Promise { @@ -364,10 +363,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Receive link failed', 1).fire() + return parseReceiveLink(result, false) } - return parseReceiveLink(result) + return parseReceiveLink(result, true) }catch (_e) { throw new PayPayError('Invalid link', 1).fire() } @@ -401,7 +400,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Reject link failed', 1).fire() + return { + success: false, + raw: result + } } return { @@ -443,7 +445,10 @@ export class PayPay { ) if (!response.ok) { - throw new PayPayError('Send money failed', 1).fire() + return { + success: false, + raw: result + } } if (result.header.resultCode === 'S9999') { @@ -469,7 +474,10 @@ export class PayPay { }) if (!response.ok) { - throw new PayPayError('Request path failed', 1).fire() + return { + success: false, + raw: result + } } return { diff --git a/src/types.ts b/src/types.ts index f06fdff..e683211 100644 --- a/src/types.ts +++ b/src/types.ts @@ -75,6 +75,7 @@ export type ResponseFail = { export type ResponseBalance = { success: boolean + message: string total: number currency: 'JPY' | string updated_at: string @@ -91,6 +92,7 @@ export type ResponseBalance = { export type ResponseUserInfo = { success: boolean + message: string id: number user_id: string state: string @@ -115,8 +117,9 @@ export type ResponseUserInfo = { export type ResponseCreateLink = { success: boolean + message: string orderId: string - orderStatus: 'PENDING' + orderStatus: string link: string transactionAt: string expiry: string @@ -133,6 +136,7 @@ export type ResponseCreateLink = { export type ResponseGetLink = { success: boolean + message: string orderId: string orderType: string description: string @@ -159,6 +163,7 @@ export type ResponseGetLink = { export type ResponseReceiveLink = { success: boolean + message: string messageId: string chatRoomId: string orderStatus: string diff --git a/src/utils/parse.test.ts b/src/utils/parse.test.ts index c0c1c09..e1057df 100644 --- a/src/utils/parse.test.ts +++ b/src/utils/parse.test.ts @@ -28,4 +28,55 @@ describe('Util', () => { expect(password).toBe('ctkpaarR2') expect(uuid).toBe('a9b3d5c6-7d8e-9f0a-bcde-fghijk') }) + + test('prase fail response', () => { + const failResponse = { + header: { + resultCode: 'S0001', + resultMessage: 'Invalid anyone', + }, + payload: { + paypay: 'resultCode', + oosugi: 'dounikashite' + } + } + + expect(util.parseBalanceContext(failResponse, false)).toStrictEqual({ + success: false, + message: 'Invalid anyone', + total: 0, + currency: 'JPY', + updated_at: new Date(0).toISOString(), + raw: failResponse + }) + }) + + test('parse resultMessage', () => { + const eg1 = { + header: { + resultCode: 'S0001', + resultMessage: 'Example 1', + }, + payload: { + paypay: 'resultCode', + oosugi: 'dounikashite' + } + } + + expect(util.parseResultMessage(eg1)).toBe('Example 1') + + const eg2 = { + header: {}, + payload: { + paypay: 'resultCode', + oosugi: 'dounikashite' + } + } + + expect(util.parseResultMessage(eg2)).toBe('unknown') + + const eg3 = {} + + expect(util.parseResultMessage(eg3)).toBe('unknown') + }) }) diff --git a/src/utils/parse.ts b/src/utils/parse.ts index 5dd3fc7..95fe97f 100644 --- a/src/utils/parse.ts +++ b/src/utils/parse.ts @@ -1,4 +1,5 @@ -import { PayPayError, type Anyone, type ResponseBalance, type ResponseCreateLink, type ResponseGetLink, type ResponseReceiveLink, type ResponseUserInfo, isSuccess } from '..' +import { PayPayError, isSuccess } from '..' +import type { Anyone, ResponseBalance, ResponseCreateLink, ResponseGetLink, ResponseReceiveLink, ResponseUserInfo } from '../types' export function parseCookieFromMap(map: Map): string { return Array.from(map.entries()) @@ -43,92 +44,181 @@ export function unparseRecoveryCode(recoveryCode: string): { } } -export function parseBalanceContext(result: Anyone): ResponseBalance { - return { - success: isSuccess(result), - total: result.payload.walletSummary.allTotalBalanceInfo.balance, - currency: result.payload.walletSummary.allTotalBalanceInfo.currency, - updated_at: result.payload.updatedAt, - raw: result, +export function parseResultMessage(result: Anyone): string { + if ('header' in result && 'resultMessage' in result.header) { + return result.header.resultMessage ?? 'unknown' + } else { + return 'unknown' } } -export function parseUserInfoContext(result: Anyone): ResponseUserInfo { - return { - success: isSuccess(result), - id: result.payload.id, - user_id: result.payload.user_defined_id ?? 'unknown', - state: result.payload.state, - first_name: result.payload.first_name, - last_name: result.payload.last_name, - display_name: result.payload.display_name, - icon_url: result.payload.photo_url, - phone_number: result.payload.mobile, - email: result.payload.email, - date_of_birth: result.payload.date_of_birth, - external_id: result.payload.external_id, - raw: result, +export function parseBalanceContext(result: Anyone, success: boolean): ResponseBalance { + try { + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + total: result.payload.total ?? 0, + currency: result.payload.currency ?? 'JPY', + updated_at: new Date(0).toISOString(), + raw: result, + } + }catch (_e) { + return { + success: false, + message: parseResultMessage(result), + total: 0, + currency: 'JPY', + updated_at: new Date(0).toISOString(), + raw: result, + } } } -export function parseCreateLink(result: Anyone): ResponseCreateLink { - return { - success: isSuccess(result), - orderId: result.payload.orderId, - orderStatus: result.payload.orderStatus, - link: result.payload.link, - transactionAt: result.payload.transactionAt, - expiry: result.payload.expiry, - raw: result, +export function parseUserInfoContext(result: Anyone, success: boolean): ResponseUserInfo { + try { + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + id: result.payload.id ?? 0, + user_id: result.payload.user_defined_id ?? 'unknown', + state: result.payload.state ?? 'unknown', + first_name: result.payload.first_name ?? 'unknown', + last_name: result.payload.last_name ?? 'unknown', + display_name: result.payload.display_name ?? 'unknown', + icon_url: result.payload.photo_url ?? 'unknown', + phone_number: result.payload.mobile ?? 'unknown', + email: result.payload.email ?? 'unknown', + date_of_birth: result.payload.date_of_birth ?? 'unknown', + external_id: result.payload.external_id ?? 'unknown', + raw: result, + } + }catch (_e) { + return { + success: false, + message: parseResultMessage(result), + id: 0, + user_id: 'unknown', + state: 'unknown', + first_name: 'unknown', + last_name: 'unknown', + display_name: 'unknown', + icon_url: 'unknown', + phone_number: 'unknown', + email: 'unknown', + date_of_birth: 'unknown', + external_id: 'unknown', + raw: result, + } } } -export function parseGetLink(result: Anyone): ResponseGetLink { - if (!('pendingP2PInfo' in result.payload)) { +export function parseCreateLink(result: Anyone, success: boolean): ResponseCreateLink { + try { + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + orderId: result.payload.orderId ?? 'unknown', + orderStatus: result.payload.orderStatus ?? 'unknown', + link: result.payload.link ?? 'unknown', + transactionAt: result.payload.transactionAt ?? new Date(0).toISOString(), + expiry: result.payload.expiry ?? new Date(0).toISOString(), + raw: result, + } + }catch (_e) { return { success: false, - orderId: '', - orderType: '', - description: '', - imageUrl: '', - amount: 0, - link: '', - isSetPasscode: false, - createdAt: '', - acceptedAt: '', - money_type: '', - sender_name: '', - sender_external_id: '', - photo_url: '', + message: parseResultMessage(result), + orderId: 'unknown', + orderStatus: 'unknown', + link: 'unknown', + transactionAt: new Date(0).toISOString(), + expiry: new Date(0).toISOString(), raw: result, } } +} - return { - success: isSuccess(result), - orderId: result.payload.pendingP2PInfo.orderId, - orderType: result.payload.pendingP2PInfo.orderType, - description: result.payload.pendingP2PInfo.description, - imageUrl: result.payload.pendingP2PInfo.imageUrl, - amount: result.payload.pendingP2PInfo.amount, - link: result.payload.pendingP2PInfo.link, - isSetPasscode: result.payload.pendingP2PInfo.isSetPasscode, - createdAt: result.payload.pendingP2PInfo.createdAt, - acceptedAt: result.payload.pendingP2PInfo.acceptedAt, - money_type: result.payload.pendingP2PInfo.moneyPriorit, - sender_name: result.payload.sender.displayName, - sender_external_id: result.payload.sender.externalId, - photo_url: result.payload.sender.photoUrl, - raw: result, +export function parseGetLink(result: Anyone, success: boolean): ResponseGetLink { + try { + if (!('pendingP2PInfo' in result.payload)) { + return { + success: false, + message: parseResultMessage(result), + orderId: '', + orderType: '', + description: '', + imageUrl: '', + amount: 0, + link: '', + isSetPasscode: false, + createdAt: '', + acceptedAt: '', + money_type: '', + sender_name: '', + sender_external_id: '', + photo_url: '', + raw: result, + } + } + + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + orderId: result.payload.pendingP2PInfo.orderId ?? 'unknown', + orderType: result.payload.pendingP2PInfo.orderType ?? 'unknown', + description: result.payload.pendingP2PInfo.description ?? 'unknown', + imageUrl: result.payload.pendingP2PInfo.imageUrl ?? 'unknown', + amount: result.payload.pendingP2PInfo.amount ?? 0, + link: result.payload.pendingP2PInfo.link ?? 'unknown', + isSetPasscode: result.payload.pendingP2PInfo.isSetPasscode ?? false, + createdAt: result.payload.pendingP2PInfo.createdAt ?? new Date(0).toISOString(), + acceptedAt: result.payload.pendingP2PInfo.acceptedAt ?? new Date(0).toISOString(), + money_type: result.payload.pendingP2PInfo.moneyPriorit ?? 'unknown', + sender_name: result.payload.sender.displayName ?? 'unknown', + sender_external_id: result.payload.sender.externalId ?? 'unknown', + photo_url: result.payload.sender.photoUrl ?? 'unknown', + raw: result, + } + }catch (_e) { + return { + success: false, + message: parseResultMessage(result), + orderId: 'unknown', + orderType: 'unknown', + description: 'unknown', + imageUrl: 'unknown', + amount: 0, + link: 'unknown', + isSetPasscode: false, + createdAt: new Date(0).toISOString(), + acceptedAt: new Date(0).toISOString(), + money_type: 'unknown', + sender_name: 'unknown', + sender_external_id: 'unknown', + photo_url: 'unknown', + raw: result, + } } } -export function parseReceiveLink(result: Anyone): ResponseReceiveLink { - return { - success: isSuccess(result), - messageId: result.payload.messageId, - chatRoomId: result.payload.chatRoomId, - orderStatus: result.payload.orderStatus, - raw: result, +export function parseReceiveLink(result: Anyone, success: boolean): ResponseReceiveLink { + try { + return { + success: success && isSuccess(result), + message: parseResultMessage(result), + messageId: result.payload.messageId ?? 'unknown', + chatRoomId: result.payload.chatRoomId ?? 'unknown', + orderStatus: result.payload.orderStatus ?? 'unknown', + raw: result, + } + } catch (_e) { + return { + success: false, + message: parseResultMessage(result), + messageId: 'unknown', + chatRoomId: 'unknown', + orderStatus: 'unknown', + raw: result, + } } } \ No newline at end of file