@chevre/domain 24.0.0-alpha.4 → 24.0.0-alpha.6

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.
@@ -163,6 +163,21 @@ const indexes = [
163
163
  }
164
164
  }
165
165
  ],
166
+ [
167
+ // 注文取引のobject.orderNumberも発行されている場合ユニークなはず(2026-02-21~)
168
+ {
169
+ typeOf: 1,
170
+ 'object.orderNumber': 1
171
+ },
172
+ {
173
+ name: 'uniquePlacingOrderNumber',
174
+ unique: true,
175
+ partialFilterExpression: {
176
+ typeOf: factory.transactionType.PlaceOrder,
177
+ 'object.orderNumber': { $exists: true }
178
+ }
179
+ }
180
+ ],
166
181
  [
167
182
  // ひとつの注文取引に対する確定返品取引はユニークなはず
168
183
  { 'object.order.orderNumber': 1 },
@@ -28,6 +28,10 @@ export declare class OrderInTransactionRepo {
28
28
  * 注文を受注する
29
29
  */
30
30
  placeOrder(order: IPlacingOrder): Promise<void>;
31
+ /**
32
+ * 注文documentがなければ作成し、受け入れられたオファーを追加する
33
+ * このメソッドでdocumentが初めて生成される(typeOf:PlaceOrderとして)
34
+ */
31
35
  acceptOffer(params: Pick<IOrderInTransaction, 'acceptedOffers' | 'orderNumber' | 'project'>): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
32
36
  /**
33
37
  * serialNumberからオファーを除外する
@@ -66,6 +66,10 @@ class OrderInTransactionRepo {
66
66
  }, { $set: setFields }, {})
67
67
  .exec();
68
68
  }
69
+ /**
70
+ * 注文documentがなければ作成し、受け入れられたオファーを追加する
71
+ * このメソッドでdocumentが初めて生成される(typeOf:PlaceOrderとして)
72
+ */
69
73
  async acceptOffer(params) {
70
74
  if (!Array.isArray(params.acceptedOffers) || params.acceptedOffers.length === 0) {
71
75
  return;
@@ -78,7 +82,10 @@ class OrderInTransactionRepo {
78
82
  };
79
83
  return this.orderModel.updateOne({
80
84
  typeOf: { $eq: factory.transactionType.PlaceOrder },
81
- orderNumber: { $eq: params.orderNumber }
85
+ orderNumber: { $eq: params.orderNumber },
86
+ // プロジェクトでもフィルター(注文番号重複バグがあったため)(2026-02-21~)
87
+ // 万が一異なるプロジェクトで同じ注文番号でオファーを受け入れようとしても、DBにインデックスによってDuplicateKey
88
+ 'project.id': { $eq: params.project.id }
82
89
  }, {
83
90
  $setOnInsert: setOnInsert,
84
91
  $push: {
@@ -130,7 +137,10 @@ class OrderInTransactionRepo {
130
137
  const { customer, orderNumber, project } = params;
131
138
  const filter = {
132
139
  typeOf: { $eq: factory.transactionType.PlaceOrder },
133
- orderNumber: { $eq: orderNumber }
140
+ orderNumber: { $eq: orderNumber },
141
+ // プロジェクトでもフィルター(注文番号重複バグがあったため)(2026-02-21~)
142
+ // 万が一異なるプロジェクトで同じ注文番号でオファーを受け入れようとしても、DBにインデックスによってDuplicateKey
143
+ 'project.id': { $eq: project.id }
134
144
  };
135
145
  const setOnInsert = {
136
146
  typeOf: factory.transactionType.PlaceOrder,
@@ -34,11 +34,6 @@ const setting_1 = require("./mongoose/schemas/setting");
34
34
  const transactionNumber_2 = require("./mongoose/schemas/transactionNumber");
35
35
  const transactionNumberCounter_1 = require("./transactionNumberCounter");
36
36
  const ORDER_NUMBER_SEPARATOR = '-';
37
- const defaultVersioningForceProjects = [
38
- 'HMX',
39
- 'SMT',
40
- 'KOJ'
41
- ];
42
37
  /**
43
38
  * 注文番号リポジトリ
44
39
  */
@@ -62,13 +57,16 @@ class OrderNumberRepo {
62
57
  * タイムスタンプから発行する
63
58
  */
64
59
  async publishByTimestamp(params) {
65
- const { fpeSecret, version, validFrom, versioningForceProjects, versioningExceptionProjects } = await this.findSetting();
60
+ const { fpeSecret, version, validFrom, versioningForceProjects
61
+ // versioningExceptionProjects
62
+ } = await this.findSetting();
66
63
  const timestamp = (0, moment_timezone_1.default)(params.orderDate)
67
64
  .valueOf()
68
65
  .toString();
69
66
  const projectPrefix = params.project.alternateName
70
67
  .toUpperCase();
71
- const dataFeedIdentifier = `${projectPrefix}:${timestamp}`;
68
+ // const dataFeedIdentifier = `${projectPrefix}:${timestamp}`;
69
+ const dataFeedIdentifier = timestamp; // reconsider increment scope(2026-02-21~)
72
70
  const dataFeedExpires = (0, moment_timezone_1.default)(params.orderDate)
73
71
  .add(1, 'minute') // ミリ秒でカウントしていくので、注文日時後1分で十分
74
72
  .toDate();
@@ -78,14 +76,10 @@ class OrderNumberRepo {
78
76
  expires: dataFeedExpires
79
77
  });
80
78
  let orderNumber;
81
- let useVersioning = (validFrom instanceof Date && (0, moment_timezone_1.default)(validFrom)
79
+ const useVersioning = (validFrom instanceof Date && (0, moment_timezone_1.default)(validFrom)
82
80
  .isSameOrBefore(params.orderDate))
83
81
  // versioningForceProjectsであれば強制的にversioning(2026-02-05~)
84
82
  || versioningForceProjects.includes(projectPrefix);
85
- // versioningExceptionProjectsであれば強制的にversioning不使用(2026-02-10~)
86
- if (versioningExceptionProjects.includes(projectPrefix)) {
87
- useVersioning = false;
88
- }
89
83
  if (typeof fpeSecret === 'string' && typeof version === 'string' && useVersioning) {
90
84
  const transactionFactory = new transactionNumber_1.TransactionNumberFactory({ fpeSecret, version });
91
85
  orderNumber = transactionFactory.generate(timestamp, incrReply);
@@ -138,11 +132,11 @@ class OrderNumberRepo {
138
132
  .exec();
139
133
  if (setting === null || setting.orderNumber === undefined) {
140
134
  return {
141
- versioningForceProjects: [],
142
- versioningExceptionProjects: []
135
+ versioningForceProjects: []
136
+ // versioningExceptionProjects: []
143
137
  };
144
138
  }
145
- const { fpeSecret, version, validFrom, versioningForceProjects, versioningExceptionProjects } = setting.orderNumber;
139
+ const { fpeSecret, version, validFrom, versioningForceProjects } = setting.orderNumber;
146
140
  if (typeof fpeSecret !== 'string' || fpeSecret === '') {
147
141
  throw new factory.errors.NotFound('setting.orderNumber.secret');
148
142
  }
@@ -155,10 +149,9 @@ class OrderNumberRepo {
155
149
  return {
156
150
  fpeSecret, version, validFrom,
157
151
  versioningForceProjects: [
158
- ...(Array.isArray(versioningForceProjects)) ? versioningForceProjects : [],
159
- ...defaultVersioningForceProjects
160
- ],
161
- versioningExceptionProjects: (Array.isArray(versioningExceptionProjects)) ? versioningExceptionProjects : []
152
+ ...(Array.isArray(versioningForceProjects)) ? versioningForceProjects : []
153
+ ]
154
+ // versioningExceptionProjects: (Array.isArray(versioningExceptionProjects)) ? versioningExceptionProjects : []
162
155
  };
163
156
  }
164
157
  }
@@ -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
@@ -99,5 +99,5 @@
99
99
  "postversion": "git push origin --tags",
100
100
  "prepublishOnly": "npm run clean && npm run build"
101
101
  },
102
- "version": "24.0.0-alpha.4"
102
+ "version": "24.0.0-alpha.6"
103
103
  }