@chevre/domain 24.0.0-alpha.3 → 24.0.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,11 +2,17 @@
2
2
  * 決済取引ファクトリー
3
3
  */
4
4
  import * as factory from '../../../../factory';
5
+ import type { IPaymentAgencyTransaction } from '../../../payment/creditCard';
6
+ /**
7
+ * 決済取引開始パラメータ生成
8
+ */
5
9
  export declare function createStartParams(params: factory.assetTransaction.pay.IStartParamsWithoutDetail & {
6
- transactionNumber: string;
7
10
  paymentServiceType: factory.service.paymentService.PaymentServiceType;
8
- amount: number;
9
- paymentService?: Pick<factory.service.paymentService.IService, 'availableChannel' | 'id' | 'serviceOutput' | 'serviceType'> | Pick<factory.product.IProduct, 'availableChannel' | 'id' | 'serviceOutput' | 'serviceType'>;
11
+ paymentService?: Pick<factory.service.paymentService.IService, 'availableChannel' | 'id' | 'serviceOutput' | 'serviceType'> | Pick<factory.product.IProduct, 'availableChannel' | 'id' | 'serviceOutput' | 'serviceType'> | {
12
+ typeOf: factory.service.paymentService.PaymentServiceType.FaceToFace;
13
+ id?: never;
14
+ serviceType?: never;
15
+ };
10
16
  location?: factory.action.trade.pay.ILocation;
11
17
  informActions: {
12
18
  /**
@@ -20,3 +26,45 @@ export declare function createStartParams(params: factory.assetTransaction.pay.I
20
26
  id: string;
21
27
  };
22
28
  }): factory.assetTransaction.IStartParams<factory.assetTransactionType.Pay>;
29
+ /**
30
+ * クレジットカード決済用の追加オプションを生成する
31
+ */
32
+ export declare function createAuthorizeCreditCardOptions(options: {
33
+ executor?: {
34
+ id?: string;
35
+ };
36
+ pendingPaymentAgencyTransaction?: IPaymentAgencyTransaction;
37
+ }): {
38
+ pendingPaymentAgencyTransaction?: IPaymentAgencyTransaction | undefined;
39
+ executor: {
40
+ id: string;
41
+ } | {
42
+ id?: undefined;
43
+ };
44
+ };
45
+ /**
46
+ * ムビチケ決済用の追加オプションを生成する
47
+ */
48
+ export declare function createAuthorizeMovieTicketOptions(options: {
49
+ executor?: {
50
+ id?: string;
51
+ };
52
+ purpose: {
53
+ id?: string;
54
+ };
55
+ checkedAction: {
56
+ id: string;
57
+ };
58
+ }): {
59
+ executor: {
60
+ id: string;
61
+ } | {
62
+ id?: undefined;
63
+ };
64
+ purpose: {
65
+ id?: string;
66
+ };
67
+ checkedAction: {
68
+ id: string;
69
+ };
70
+ };
@@ -24,11 +24,35 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.createStartParams = createStartParams;
27
+ exports.createAuthorizeCreditCardOptions = createAuthorizeCreditCardOptions;
28
+ exports.createAuthorizeMovieTicketOptions = createAuthorizeMovieTicketOptions;
27
29
  /**
28
30
  * 決済取引ファクトリー
29
31
  */
30
32
  const factory = __importStar(require("../../../../factory"));
33
+ function createServiceOutputAsPayTransactionObject(params) {
34
+ return {
35
+ serviceOutput: (params.object.serviceOutput?.typeOf === 'Invoice')
36
+ ? params.object.serviceOutput
37
+ : {
38
+ typeOf: 'Invoice',
39
+ referencesOrder: { typeOf: factory.order.OrderType.Order }
40
+ }
41
+ };
42
+ }
43
+ /**
44
+ * 決済取引開始パラメータ生成
45
+ */
31
46
  function createStartParams(params, options) {
47
+ // 金額をfix
48
+ const amount = params.object.paymentMethod?.amount;
49
+ if (typeof amount !== 'number') {
50
+ throw new factory.errors.ArgumentNull('object.paymentMethod.amount');
51
+ }
52
+ const transactionNumber = params.transactionNumber;
53
+ if (typeof transactionNumber !== 'string' || transactionNumber.length === 0) {
54
+ throw new factory.errors.ArgumentNull('transactionNumber');
55
+ }
32
56
  const { instrument } = params;
33
57
  const paymentServiceId = (params.paymentService !== undefined)
34
58
  ? String(params.paymentService.id)
@@ -48,14 +72,14 @@ function createStartParams(params, options) {
48
72
  totalPaymentDue = {
49
73
  typeOf: 'MonetaryAmount',
50
74
  currency: factory.priceCurrency.JPY,
51
- value: params.amount
75
+ value: amount
52
76
  };
53
77
  break;
54
78
  case factory.service.paymentService.PaymentServiceType.CreditCard:
55
79
  totalPaymentDue = {
56
80
  typeOf: 'MonetaryAmount',
57
81
  currency: factory.priceCurrency.JPY,
58
- value: params.amount
82
+ value: amount
59
83
  };
60
84
  accountId = ''; // 強制的に空文字化(2024-06-14~)
61
85
  break;
@@ -109,7 +133,7 @@ function createStartParams(params, options) {
109
133
  const paymentMethodAmount = {
110
134
  typeOf: 'MonetaryAmount',
111
135
  currency: paymentMethodCurrency,
112
- value: params.amount
136
+ value: amount
113
137
  };
114
138
  const paymentMethod = {
115
139
  additionalProperty: (Array.isArray(params.object.paymentMethod?.additionalProperty))
@@ -140,19 +164,14 @@ function createStartParams(params, options) {
140
164
  ? { paymentMethodId: params.transactionNumber } // 必要ないはずだが互換性維持対応(2024-06-14~)
141
165
  : undefined
142
166
  };
167
+ const { serviceOutput } = createServiceOutputAsPayTransactionObject(params);
143
168
  const object = {
144
169
  accountId: (typeof accountId === 'string') ? accountId : '',
145
170
  paymentMethodId: params.transactionNumber,
146
171
  typeOf: params.paymentServiceType,
147
172
  id: paymentServiceId,
148
- // onPaymentStatusChanged: { informPayment: params.informActions }, // discontinue(2025-02-09~)
149
173
  paymentMethod,
150
- serviceOutput: (params.object.serviceOutput?.typeOf === 'Invoice') // support serviceOutput(2025-11-24~)
151
- ? params.object.serviceOutput
152
- : {
153
- typeOf: 'Invoice',
154
- referencesOrder: { typeOf: factory.order.OrderType.Order }
155
- },
174
+ serviceOutput, // support serviceOutput(2025-11-24~)
156
175
  ...(params.paymentServiceType === factory.service.paymentService.PaymentServiceType.MovieTicket)
157
176
  ? { checkedAction: { id: options.checkedAction.id } } // add checkedAction(2024-12-13~)
158
177
  : undefined
@@ -178,14 +197,32 @@ function createStartParams(params, options) {
178
197
  ...(potentialAction.length > 0) ? { potentialAction } : undefined // add potentialAction(2025-02-05~)
179
198
  };
180
199
  }
181
- // function createInformPaymentParams(params: {
182
- // paymentService?: Pick<factory.service.paymentService.IService, 'availableChannel' | 'potentialAction'>;
183
- // }): factory.product.IInformPayment[] {
184
- // const informPaymentParams: factory.product.IInformPayment[] = [];
185
- // // プロダクト設定を適用
186
- // const informPaymentParamsByProduct = params.paymentService?.availableChannel?.onPaymentStatusChanged?.informPayment;
187
- // if (Array.isArray(informPaymentParamsByProduct)) {
188
- // informPaymentParams.push(...informPaymentParamsByProduct);
189
- // }
190
- // return informPaymentParams;
191
- // }
200
+ /**
201
+ * 決済プロセッサに渡す実行者情報を生成する
202
+ */
203
+ function createExecutor(options) {
204
+ return (typeof options.executor?.id === 'string')
205
+ ? { id: options.executor.id }
206
+ : {}; // タスク関連付け(2024-05-18~)
207
+ }
208
+ /**
209
+ * クレジットカード決済用の追加オプションを生成する
210
+ */
211
+ function createAuthorizeCreditCardOptions(options) {
212
+ return {
213
+ executor: createExecutor(options),
214
+ ...(options.pendingPaymentAgencyTransaction !== undefined
215
+ ? { pendingPaymentAgencyTransaction: options.pendingPaymentAgencyTransaction }
216
+ : {})
217
+ };
218
+ }
219
+ /**
220
+ * ムビチケ決済用の追加オプションを生成する
221
+ */
222
+ function createAuthorizeMovieTicketOptions(options) {
223
+ return {
224
+ executor: createExecutor(options),
225
+ purpose: options.purpose,
226
+ checkedAction: options.checkedAction
227
+ };
228
+ }
@@ -0,0 +1,10 @@
1
+ import * as factory from '../../../../../factory';
2
+ import type { PaymentServiceRepo } from '../../../../../repo/paymentService';
3
+ import type { ProductRepo } from '../../../../../repo/product';
4
+ export declare function fixPaymentService(params: factory.assetTransaction.pay.IStartParamsWithoutDetail): (repos: {
5
+ paymentService: PaymentServiceRepo;
6
+ product: ProductRepo;
7
+ }) => Promise<{
8
+ paymentServiceType: factory.service.paymentService.PaymentServiceType;
9
+ paymentService?: Pick<factory.product.IProduct, "availableChannel" | "id" | "serviceOutput" | "serviceType" | "potentialAction"> | Pick<factory.service.paymentService.IService, "availableChannel" | "id" | "serviceOutput" | "serviceType" | "potentialAction"> | undefined;
10
+ }>;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.fixPaymentService = fixPaymentService;
27
+ const factory = __importStar(require("../../../../../factory"));
28
+ function getPaymentServiceId(params) {
29
+ let paymentServiceId = '';
30
+ const paymentServiceType = params.object?.typeOf;
31
+ if (typeof params.object.id === 'string' && params.object.id.length > 0) {
32
+ paymentServiceId = params.object.id;
33
+ }
34
+ else {
35
+ switch (paymentServiceType) {
36
+ case factory.service.paymentService.PaymentServiceType.FaceToFace:
37
+ // 対面決済は特に何もしない
38
+ break;
39
+ case factory.service.paymentService.PaymentServiceType.PaymentCard:
40
+ case factory.service.paymentService.PaymentServiceType.CreditCard:
41
+ case factory.service.paymentService.PaymentServiceType.MovieTicket:
42
+ // リクエストでの指定を必須化(2022-04-12~)
43
+ throw new factory.errors.ArgumentNull('object.id');
44
+ default:
45
+ throw new factory.errors.NotImplemented(`Payment service '${paymentServiceType}' not implemented`);
46
+ }
47
+ }
48
+ return paymentServiceId;
49
+ }
50
+ function fixPaymentService(params) {
51
+ return async (repos) => {
52
+ const paymentServiceType = params.object?.typeOf;
53
+ let paymentService;
54
+ switch (paymentServiceType) {
55
+ case factory.service.paymentService.PaymentServiceType.FaceToFace:
56
+ // no op
57
+ // FaceToFaceの場合プロダクトは存在しない
58
+ break;
59
+ // PaymentCardの場合、プロダクト検索
60
+ case factory.service.paymentService.PaymentServiceType.PaymentCard:
61
+ paymentService = (await repos.product.projectFields({
62
+ limit: 1,
63
+ page: 1,
64
+ project: { id: { $eq: params.project.id } },
65
+ typeOf: { $eq: factory.product.ProductType.PaymentCard },
66
+ id: { $eq: getPaymentServiceId(params) }
67
+ }, ['availableChannel', 'serviceOutput', 'serviceType', 'potentialAction']
68
+ // []
69
+ )).shift();
70
+ if (paymentService === undefined) {
71
+ throw new factory.errors.NotFound('PaymentService');
72
+ }
73
+ break;
74
+ default:
75
+ paymentService = (await repos.paymentService.projectFields({
76
+ limit: 1,
77
+ page: 1,
78
+ project: { id: { $eq: params.project.id } },
79
+ typeOf: { $eq: paymentServiceType },
80
+ id: { $eq: getPaymentServiceId(params) }
81
+ }, ['availableChannel', 'serviceOutput', 'serviceType', 'potentialAction'])).shift();
82
+ if (paymentService === undefined) {
83
+ throw new factory.errors.NotFound('PaymentService');
84
+ }
85
+ }
86
+ return { paymentServiceType, paymentService };
87
+ };
88
+ }
@@ -0,0 +1,53 @@
1
+ import * as factory from '../../../../factory';
2
+ import { Settings } from '../../../../settings';
3
+ import type { AccountingReportRepo } from '../../../../repo/accountingReport';
4
+ import type { ActionRepo } from '../../../../repo/action';
5
+ import type { AssetTransactionRepo } from '../../../../repo/assetTransaction';
6
+ import type { CredentialsRepo } from '../../../../repo/credentials';
7
+ import type { EventRepo } from '../../../../repo/event';
8
+ import type { PaymentServiceRepo } from '../../../../repo/paymentService';
9
+ import type { PaymentServiceProviderRepo } from '../../../../repo/paymentServiceProvider';
10
+ import type { ProductRepo } from '../../../../repo/product';
11
+ import type { SellerPaymentAcceptedRepo } from '../../../../repo/sellerPaymentAccepted';
12
+ import type { TaskRepo } from '../../../../repo/task';
13
+ import { IPaymentAgencyTransaction } from '../../../payment/creditCard';
14
+ export interface IProcessAuthorizeOperationRepos {
15
+ accountingReport: AccountingReportRepo;
16
+ action: ActionRepo;
17
+ credentials: CredentialsRepo;
18
+ event: EventRepo;
19
+ paymentAccepted: SellerPaymentAcceptedRepo;
20
+ paymentService: PaymentServiceRepo;
21
+ paymentServiceProvider: PaymentServiceProviderRepo;
22
+ product: ProductRepo;
23
+ assetTransaction: AssetTransactionRepo;
24
+ task: TaskRepo;
25
+ }
26
+ export type IProcessAuthorizeOperation<T> = (repos: IProcessAuthorizeOperationRepos, settings: Settings) => Promise<T>;
27
+ /**
28
+ * 開始した決済取引について、決済承認を実行する
29
+ */
30
+ export declare function processAuthorize(params: factory.assetTransaction.pay.IStartParamsWithoutDetail & {
31
+ instrument: factory.action.trade.pay.IPlaceOrderRelatedInstrument[];
32
+ }, options: {
33
+ pendingPaymentAgencyTransaction?: IPaymentAgencyTransaction;
34
+ /**
35
+ * 実行者
36
+ */
37
+ executor?: {
38
+ /**
39
+ * task ID
40
+ * taskによって実行されている場合値が存在する
41
+ */
42
+ id?: string;
43
+ };
44
+ purpose: {
45
+ /**
46
+ * placeOrder ID
47
+ */
48
+ id?: string;
49
+ };
50
+ checkedAction: {
51
+ id: string;
52
+ };
53
+ }, transactionBeforeAuthorize: factory.assetTransaction.pay.ITransaction, paymentServiceType: factory.service.paymentService.PaymentServiceType, paymentService: Pick<factory.product.IProduct, 'availableChannel' | 'id' | 'serviceOutput' | 'serviceType' | 'potentialAction'> | Pick<factory.service.paymentService.IService, 'availableChannel' | 'id' | 'serviceOutput' | 'serviceType' | 'potentialAction'> | undefined): IProcessAuthorizeOperation<Pick<factory.assetTransaction.pay.ITransaction, 'id' | 'object'>>;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.processAuthorize = processAuthorize;
27
+ const factory = __importStar(require("../../../../factory"));
28
+ const factory_1 = require("./factory");
29
+ const processAuthorizeAccount_1 = require("./processAuthorizeAccount");
30
+ const processAuthorizeCreditCard_1 = require("./processAuthorizeCreditCard");
31
+ const processAuthorizeMovieTicket_1 = require("./processAuthorizeMovieTicket");
32
+ /**
33
+ * 開始した決済取引について、決済承認を実行する
34
+ */
35
+ function processAuthorize(params, options, transactionBeforeAuthorize, paymentServiceType, paymentService) {
36
+ return async (repos, settings) => {
37
+ let transaction = transactionBeforeAuthorize;
38
+ switch (paymentServiceType) {
39
+ case factory.service.paymentService.PaymentServiceType.FaceToFace:
40
+ // 対面決済は特に何もしない
41
+ break;
42
+ case factory.service.paymentService.PaymentServiceType.PaymentCard:
43
+ transaction = await (0, processAuthorizeAccount_1.processAuthorizeAccount)(params, transactionBeforeAuthorize, String(paymentService?.id))(repos);
44
+ break;
45
+ case factory.service.paymentService.PaymentServiceType.CreditCard:
46
+ await (0, processAuthorizeCreditCard_1.processAuthorizeCreditCard)(params, transactionBeforeAuthorize, String(paymentService?.id), (0, factory_1.createAuthorizeCreditCardOptions)(options))(repos, settings);
47
+ break;
48
+ case factory.service.paymentService.PaymentServiceType.MovieTicket:
49
+ await (0, processAuthorizeMovieTicket_1.processAuthorizeMovieTicket)(params, transactionBeforeAuthorize, String(paymentService?.id), (0, factory_1.createAuthorizeMovieTicketOptions)(options))(repos, settings);
50
+ break;
51
+ default:
52
+ throw new factory.errors.NotImplemented(`Payment service '${paymentServiceType}' not implemented`);
53
+ }
54
+ return transaction;
55
+ };
56
+ }
@@ -39,4 +39,4 @@ export declare function processAuthorizeMovieTicket(params: factory.assetTransac
39
39
  paymentServiceProvider: PaymentServiceProviderRepo;
40
40
  assetTransaction: AssetTransactionRepo;
41
41
  task: TaskRepo;
42
- }, settings: Settings) => Promise<factory.assetTransaction.pay.ITransaction>;
42
+ }, settings: Settings) => Promise<void>;
@@ -29,17 +29,7 @@ function processAuthorizeMovieTicket(params, transaction, paymentServiceId,
29
29
  // useCheckByIdentifierIfNotYet: boolean,
30
30
  options) {
31
31
  return async (repos, settings) => {
32
- // const { accountsReceivablesByServiceType } = await MovieTicketPayment.authorize(
33
- // params, transaction, paymentServiceId, options
34
- // )(repos, settings);
35
32
  await MovieTicketPayment.authorize(params, transaction, paymentServiceId, options)(repos, settings);
36
- return transaction;
37
- // discontinue(2024-12-17~)
38
- // return saveAuthorizeResult({
39
- // id: transaction.id,
40
- // update: {
41
- // 'object.accountsReceivablesByServiceType': accountsReceivablesByServiceType // 認証レスポンスより計上金額を保管(2023-05-15~)
42
- // }
43
- // })(repos);
33
+ // return transaction;
44
34
  };
45
35
  }
@@ -1,162 +1,38 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  Object.defineProperty(exports, "__esModule", { value: true });
26
3
  exports.start = start;
27
- const factory = __importStar(require("../../../factory"));
28
4
  const fixInformAction_1 = require("../fixInformAction");
5
+ const fixPaymentService_1 = require("./start/preStart/fixPaymentService");
29
6
  const validateAcceptedPaymentMethodIfNeeded_1 = require("./start/preStart/validateAcceptedPaymentMethodIfNeeded");
30
7
  const validateSeller_1 = require("./start/preStart/validateSeller");
31
8
  const factory_1 = require("./start/factory");
32
- const processAuthorizeAccount_1 = require("./start/processAuthorizeAccount");
33
- const processAuthorizeCreditCard_1 = require("./start/processAuthorizeCreditCard");
34
- const processAuthorizeMovieTicket_1 = require("./start/processAuthorizeMovieTicket");
9
+ const processAuthorize_1 = require("./start/processAuthorize");
35
10
  /**
36
11
  * 取引開始
37
12
  */
38
13
  function start(params, options) {
39
14
  return async (repos, settings) => {
40
- // 金額をfix
41
- const amount = params.object.paymentMethod?.amount;
42
- if (typeof amount !== 'number') {
43
- throw new factory.errors.ArgumentNull('object.paymentMethod.amount');
44
- }
45
- const transactionNumber = params.transactionNumber;
46
- if (typeof transactionNumber !== 'string' || transactionNumber.length === 0) {
47
- throw new factory.errors.ArgumentNull('transactionNumber');
48
- }
49
15
  await (0, validateSeller_1.validateSeller)(params)(repos);
50
16
  // リソースの対応決済方法検証(2025-12-02~)
51
17
  await (0, validateAcceptedPaymentMethodIfNeeded_1.validateAcceptedPaymentMethodIfNeeded)(params)(repos);
52
18
  // 決済サービス確認
53
- const paymentServiceType = params.object?.typeOf;
54
- const paymentService = await fixPaymentService(params)(repos);
19
+ const { paymentServiceType, paymentService } = await (0, fixPaymentService_1.fixPaymentService)(params)(repos);
55
20
  const informActions = await (0, fixInformAction_1.fixInformAction)({
56
21
  paymentService,
57
22
  project: { id: params.project.id }
58
23
  })(repos);
59
24
  // 取引開始
60
- let transaction;
61
25
  const startParams = (0, factory_1.createStartParams)({
62
26
  ...params,
63
- transactionNumber,
27
+ // transactionNumber,
64
28
  paymentServiceType,
65
- amount,
29
+ // amount,
66
30
  paymentService,
67
31
  informActions
68
32
  }, { checkedAction: options.checkedAction } // 連携(2024-12-13~)
69
33
  );
70
- transaction = await repos.assetTransaction.start(startParams);
71
- switch (paymentServiceType) {
72
- case factory.service.paymentService.PaymentServiceType.FaceToFace:
73
- // 対面決済は特に何もしない
74
- break;
75
- case factory.service.paymentService.PaymentServiceType.PaymentCard:
76
- transaction = await (0, processAuthorizeAccount_1.processAuthorizeAccount)(params, transaction, String(paymentService?.id))(repos);
77
- break;
78
- case factory.service.paymentService.PaymentServiceType.CreditCard:
79
- // transaction =
80
- await (0, processAuthorizeCreditCard_1.processAuthorizeCreditCard)(params, transaction, String(paymentService?.id), {
81
- executor: (typeof options.executor?.id === 'string') ? { id: options.executor.id } : {}, // タスク関連付け(2024-05-18~)
82
- ...(options.pendingPaymentAgencyTransaction !== undefined)
83
- ? { pendingPaymentAgencyTransaction: options.pendingPaymentAgencyTransaction }
84
- : undefined
85
- })(repos, settings);
86
- break;
87
- case factory.service.paymentService.PaymentServiceType.MovieTicket:
88
- transaction = await (0, processAuthorizeMovieTicket_1.processAuthorizeMovieTicket)(params, transaction, String(paymentService?.id),
89
- // options.useCheckByIdentifierIfNotYet,
90
- {
91
- executor: (typeof options.executor?.id === 'string') ? { id: options.executor.id } : {},
92
- purpose: options.purpose,
93
- checkedAction: options.checkedAction
94
- })(repos, settings);
95
- break;
96
- default:
97
- throw new factory.errors.NotImplemented(`Payment service '${paymentServiceType}' not implemented`);
98
- }
99
- return transaction;
100
- };
101
- }
102
- function getPaymentServiceId(params) {
103
- let paymentServiceId = '';
104
- const paymentServiceType = params.object?.typeOf;
105
- if (typeof params.object.id === 'string' && params.object.id.length > 0) {
106
- paymentServiceId = params.object.id;
107
- }
108
- else {
109
- switch (paymentServiceType) {
110
- case factory.service.paymentService.PaymentServiceType.FaceToFace:
111
- // 対面決済は特に何もしない
112
- break;
113
- case factory.service.paymentService.PaymentServiceType.PaymentCard:
114
- case factory.service.paymentService.PaymentServiceType.CreditCard:
115
- case factory.service.paymentService.PaymentServiceType.MovieTicket:
116
- // リクエストでの指定を必須化(2022-04-12~)
117
- throw new factory.errors.ArgumentNull('object.id');
118
- default:
119
- throw new factory.errors.NotImplemented(`Payment service '${paymentServiceType}' not implemented`);
120
- }
121
- }
122
- return paymentServiceId;
123
- }
124
- function fixPaymentService(params) {
125
- return async (repos) => {
126
- const paymentServiceType = params.object?.typeOf;
127
- let paymentService;
128
- switch (paymentServiceType) {
129
- case factory.service.paymentService.PaymentServiceType.FaceToFace:
130
- // no op
131
- // FaceToFaceの場合プロダクトは存在しない
132
- break;
133
- // PaymentCardの場合、プロダクト検索
134
- case factory.service.paymentService.PaymentServiceType.PaymentCard:
135
- paymentService = (await repos.product.projectFields({
136
- limit: 1,
137
- page: 1,
138
- project: { id: { $eq: params.project.id } },
139
- typeOf: { $eq: factory.product.ProductType.PaymentCard },
140
- id: { $eq: getPaymentServiceId(params) }
141
- }, ['availableChannel', 'serviceOutput', 'serviceType', 'potentialAction']
142
- // []
143
- )).shift();
144
- if (paymentService === undefined) {
145
- throw new factory.errors.NotFound('PaymentService');
146
- }
147
- break;
148
- default:
149
- paymentService = (await repos.paymentService.projectFields({
150
- limit: 1,
151
- page: 1,
152
- project: { id: { $eq: params.project.id } },
153
- typeOf: { $eq: paymentServiceType },
154
- id: { $eq: getPaymentServiceId(params) }
155
- }, ['availableChannel', 'serviceOutput', 'serviceType', 'potentialAction'])).shift();
156
- if (paymentService === undefined) {
157
- throw new factory.errors.NotFound('PaymentService');
158
- }
159
- }
160
- return paymentService;
34
+ const transactionBeforeAuthorize = await repos.assetTransaction.start(startParams);
35
+ // 決済代行等を利用して決済承認
36
+ return (0, processAuthorize_1.processAuthorize)(params, options, transactionBeforeAuthorize, paymentServiceType, paymentService)(repos, settings);
161
37
  };
162
38
  }
package/package.json CHANGED
@@ -41,12 +41,9 @@
41
41
  "@types/json2csv": "^4.5.1",
42
42
  "@types/jsonwebtoken": "9.0.1",
43
43
  "@types/lodash.difference": "^4.5.6",
44
- "@types/mocha": "10.0.7",
45
44
  "@types/moment-timezone": "^0.5.30",
46
45
  "@types/node": "22.19.7",
47
46
  "@types/pug": "2.0.10",
48
- "@types/sinon": "^4.3.3",
49
- "@types/sinon-mongoose": "^1.3.11",
50
47
  "@types/uniqid": "^4.1.3",
51
48
  "@types/uuid": "^3.4.10",
52
49
  "@vitest/coverage-v8": "4.0.18",
@@ -60,8 +57,6 @@
60
57
  "mongoose": "8.0.4",
61
58
  "redis": "4.6.5",
62
59
  "rimraf": "^2.7.1",
63
- "sinon": "4.5.0",
64
- "sinon-mongoose": "^2.3.0",
65
60
  "size-limit": "12.0.0",
66
61
  "typescript": "5.6.3",
67
62
  "typescript-eslint": "8.55.0",
@@ -104,5 +99,5 @@
104
99
  "postversion": "git push origin --tags",
105
100
  "prepublishOnly": "npm run clean && npm run build"
106
101
  },
107
- "version": "24.0.0-alpha.3"
102
+ "version": "24.0.0-alpha.5"
108
103
  }