@chevre/domain 23.0.0 → 23.1.0-alpha.1
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.
- package/lib/chevre/service/offer/event/authorize/processStartReserve4chevre/requestedProgramMembershipUsed2permit.js +38 -68
- package/lib/chevre/service/payment/any/authorize/fixTransactionNumber.d.ts +38 -0
- package/lib/chevre/service/payment/any/authorize/fixTransactionNumber.js +88 -0
- package/lib/chevre/service/payment/any/{handlePrePublishedPaymentMethodIdOnAuthorizing.d.ts → authorize/handlePrePublishedPaymentMethodIdOnAuthorizing.d.ts} +4 -4
- package/lib/chevre/service/payment/any/{handlePrePublishedPaymentMethodIdOnAuthorizing.js → authorize/handlePrePublishedPaymentMethodIdOnAuthorizing.js} +1 -1
- package/lib/chevre/service/payment/any/factory.d.ts +0 -1
- package/lib/chevre/service/payment/any/publishPaymentUrl/fixTransactionNumberOnPublishPaymentUrl.d.ts +25 -0
- package/lib/chevre/service/payment/any/publishPaymentUrl/fixTransactionNumberOnPublishPaymentUrl.js +51 -0
- package/lib/chevre/service/payment/any/verifyTicketTokenAsNeeded.d.ts +2 -2
- package/lib/chevre/service/payment/any/verifyTicketTokenAsNeeded.js +29 -13
- package/lib/chevre/service/payment/any.js +96 -71
- package/package.json +3 -3
|
@@ -16,50 +16,13 @@ const factory = require("../../../../../factory");
|
|
|
16
16
|
*/
|
|
17
17
|
function requestedProgramMembershipUsed2permit(params) {
|
|
18
18
|
// tslint:disable-next-line:cyclomatic-complexity max-func-body-length
|
|
19
|
-
return (repos
|
|
20
|
-
|
|
21
|
-
// jwt: JWTCredentials;
|
|
22
|
-
// }
|
|
23
|
-
) => __awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
var _a, _b;
|
|
19
|
+
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
var _a, _b, _c, _d;
|
|
25
21
|
let programMembershipUsedAsPermit;
|
|
26
22
|
const { programMembershipUsed, placeOrder } = params;
|
|
27
23
|
// discontinue token as fromLocation(ticketTokenへ移行するべき)(2024-12-18~)
|
|
28
24
|
if (typeof programMembershipUsed === 'string') {
|
|
29
25
|
throw new factory.errors.NotImplemented('programMembershipUsed as string not implemented');
|
|
30
|
-
// トークン化されたメンバーシップがリクエストされた場合、実メンバーシップ情報へ変換する
|
|
31
|
-
// const { authorizedObject } = await CodeService.verifyToken({
|
|
32
|
-
// project: { id: params.project.id },
|
|
33
|
-
// agent: { id: params.project.id, typeOf: factory.organizationType.Project },
|
|
34
|
-
// token: String(programMembershipUsed)
|
|
35
|
-
// })(repos);
|
|
36
|
-
// const permitOwnershipInfo = authorizedObject;
|
|
37
|
-
// if (Array.isArray(permitOwnershipInfo)) {
|
|
38
|
-
// throw new factory.errors.NotImplemented('programMembershipUsed as an array not implemented');
|
|
39
|
-
// }
|
|
40
|
-
// if (permitOwnershipInfo.typeOf !== 'OwnershipInfo') {
|
|
41
|
-
// throw new factory.errors.Argument('programMembershipUsed', 'must be OwnershipInfo');
|
|
42
|
-
// }
|
|
43
|
-
// const typeOfGood = permitOwnershipInfo.typeOfGood;
|
|
44
|
-
// if (typeOfGood.typeOf !== factory.permit.PermitType.Permit) {
|
|
45
|
-
// throw new factory.errors.Argument('programMembershipUsed', 'must be Permit');
|
|
46
|
-
// }
|
|
47
|
-
// const issuedThroughTypeOf = typeOfGood.issuedThrough?.typeOf;
|
|
48
|
-
// if (issuedThroughTypeOf !== factory.product.ProductType.MembershipService) {
|
|
49
|
-
// throw new factory.errors.Argument('programMembershipUsed', 'must be issued through MembershipService');
|
|
50
|
-
// }
|
|
51
|
-
// if (typeof typeOfGood.issuedThrough?.id !== 'string') {
|
|
52
|
-
// throw new factory.errors.NotFound('itemOffered.serviceOutput.programMembershipUsed.issuedThrough.id');
|
|
53
|
-
// }
|
|
54
|
-
// if (issuedThroughTypeOf === factory.product.ProductType.MembershipService) {
|
|
55
|
-
// programMembershipUsedAsPermit = {
|
|
56
|
-
// identifier: typeOfGood.identifier,
|
|
57
|
-
// issuedThrough: { id: typeOfGood.issuedThrough.id, typeOf: issuedThroughTypeOf },
|
|
58
|
-
// typeOf: factory.permit.PermitType.Permit
|
|
59
|
-
// };
|
|
60
|
-
// } else {
|
|
61
|
-
// throw new factory.errors.Argument('programMembershipUsed', `invalid issuedThrough.typeOf: ${issuedThroughTypeOf}`);
|
|
62
|
-
// }
|
|
63
26
|
}
|
|
64
27
|
else if ((programMembershipUsed === null || programMembershipUsed === void 0 ? void 0 : programMembershipUsed.typeOf) === 'Ticket') {
|
|
65
28
|
const { ticketToken } = programMembershipUsed;
|
|
@@ -81,47 +44,54 @@ function requestedProgramMembershipUsed2permit(params) {
|
|
|
81
44
|
if (object.typeOf !== 'OwnershipInfo') {
|
|
82
45
|
throw new factory.errors.Argument('programMembershipUsed', 'invalid authorization');
|
|
83
46
|
}
|
|
84
|
-
// const ownershipInfoId = object.id;
|
|
85
|
-
// const permitOwnershipInfo = (await repos.ownershipInfo.search({
|
|
86
|
-
// limit: 1,
|
|
87
|
-
// page: 1,
|
|
88
|
-
// project: { id: { $eq: params.project.id } },
|
|
89
|
-
// ids: [ownershipInfoId],
|
|
90
|
-
// ownedFrom: now,
|
|
91
|
-
// ownedThrough: now
|
|
92
|
-
// })).shift();
|
|
93
|
-
// if (permitOwnershipInfo === undefined) {
|
|
94
|
-
// throw new factory.errors.NotFound('OwnershipInfo');
|
|
95
|
-
// }
|
|
96
47
|
// audience検証
|
|
97
48
|
if ((audience === null || audience === void 0 ? void 0 : audience.typeOf) !== factory.transactionType.PlaceOrder || audience.id !== placeOrder.id) {
|
|
98
49
|
throw new factory.errors.Argument('programMembershipUsed', 'audience not matched with placeOrder');
|
|
99
50
|
}
|
|
100
51
|
const permitOwnershipInfo = object;
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
52
|
+
const ownedGoodType = (_a = permitOwnershipInfo.typeOfGood) === null || _a === void 0 ? void 0 : _a.typeOf;
|
|
53
|
+
if (ownedGoodType === factory.permit.PermitType.Permit) {
|
|
54
|
+
const issuedThroughTypeOf = (_b = permitOwnershipInfo.typeOfGood.issuedThrough) === null || _b === void 0 ? void 0 : _b.typeOf;
|
|
55
|
+
if (issuedThroughTypeOf === factory.service.paymentService.PaymentServiceType.FaceToFace) {
|
|
56
|
+
programMembershipUsedAsPermit = {
|
|
57
|
+
identifier: permitOwnershipInfo.typeOfGood.identifier,
|
|
58
|
+
issuedThrough: { typeOf: issuedThroughTypeOf },
|
|
59
|
+
typeOf: factory.permit.PermitType.Permit
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
else if (issuedThroughTypeOf === factory.product.ProductType.MembershipService
|
|
63
|
+
|| issuedThroughTypeOf === factory.service.paymentService.PaymentServiceType.CreditCard) {
|
|
64
|
+
if (typeof ((_c = permitOwnershipInfo.typeOfGood.issuedThrough) === null || _c === void 0 ? void 0 : _c.id) !== 'string') {
|
|
65
|
+
throw new factory.errors.Argument('programMembershipUsed', 'ownershipInfo.typeOfGood.issuedThrough.id undefined');
|
|
66
|
+
}
|
|
67
|
+
programMembershipUsedAsPermit = {
|
|
68
|
+
identifier: permitOwnershipInfo.typeOfGood.identifier,
|
|
69
|
+
issuedThrough: { id: permitOwnershipInfo.typeOfGood.issuedThrough.id, typeOf: issuedThroughTypeOf },
|
|
70
|
+
typeOf: factory.permit.PermitType.Permit
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
throw new factory.errors.Argument('programMembershipUsed', `invalid issuedThrough.typeOf: ${issuedThroughTypeOf}`);
|
|
75
|
+
}
|
|
111
76
|
}
|
|
112
|
-
else if (
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
77
|
+
else if (ownedGoodType === factory.service.paymentService.PaymentServiceType.CreditCard) {
|
|
78
|
+
// CreditCard決済の場合、決済方法所有権を受け入れる(2025-11-11~)
|
|
79
|
+
const paymentServiceId = (_d = permitOwnershipInfo.typeOfGood) === null || _d === void 0 ? void 0 : _d.id;
|
|
80
|
+
const paymentMethodId = permitOwnershipInfo.typeOfGood.serviceOutput.paymentMethodId;
|
|
81
|
+
if (typeof paymentMethodId !== 'string' || paymentMethodId === '') {
|
|
82
|
+
throw new factory.errors.Argument('programMembershipUsed', 'paymentServiceId required');
|
|
83
|
+
}
|
|
84
|
+
if (typeof paymentMethodId !== 'string' || paymentMethodId === '') {
|
|
85
|
+
throw new factory.errors.Argument('programMembershipUsed', 'paymentMethodId required');
|
|
116
86
|
}
|
|
117
87
|
programMembershipUsedAsPermit = {
|
|
118
|
-
identifier:
|
|
119
|
-
issuedThrough: { id:
|
|
88
|
+
identifier: paymentMethodId,
|
|
89
|
+
issuedThrough: { id: paymentServiceId, typeOf: ownedGoodType },
|
|
120
90
|
typeOf: factory.permit.PermitType.Permit
|
|
121
91
|
};
|
|
122
92
|
}
|
|
123
93
|
else {
|
|
124
|
-
throw new factory.errors.Argument('programMembershipUsed',
|
|
94
|
+
throw new factory.errors.Argument('programMembershipUsed', 'ownershipInfo.typeOfGood.typeOf must be Permit');
|
|
125
95
|
}
|
|
126
96
|
}
|
|
127
97
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as factory from '../../../../factory';
|
|
2
|
+
import type { ActionRepo } from '../../../../repo/action';
|
|
3
|
+
import type { AuthorizationRepo } from '../../../../repo/authorization';
|
|
4
|
+
import type { TicketRepo } from '../../../../repo/ticket';
|
|
5
|
+
import type { ITransactionInProgress, TransactionRepo } from '../../../../repo/transaction';
|
|
6
|
+
import type { TransactionNumberRepo } from '../../../../repo/transactionNumber';
|
|
7
|
+
import * as PayTransactionService from '../../../assetTransaction/pay';
|
|
8
|
+
interface IFixTransactionNumberRepos {
|
|
9
|
+
action: ActionRepo;
|
|
10
|
+
authorization: AuthorizationRepo;
|
|
11
|
+
ticket: TicketRepo;
|
|
12
|
+
transaction: TransactionRepo;
|
|
13
|
+
transactionNumber: TransactionNumberRepo;
|
|
14
|
+
}
|
|
15
|
+
type IFixTransactionNumberOperation<T> = (repos: IFixTransactionNumberRepos) => Promise<T>;
|
|
16
|
+
type IObjectWithoutDetail = factory.action.authorize.paymentMethod.any.IObjectWithoutDetail & {
|
|
17
|
+
ticketToken?: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* 決済承認時の取引番号を決定する
|
|
21
|
+
*/
|
|
22
|
+
declare function fixTransactionNumber(params: {
|
|
23
|
+
object: IObjectWithoutDetail;
|
|
24
|
+
transaction: Pick<ITransactionInProgress<factory.transactionType.PlaceOrder>, 'agent' | 'expires' | 'id' | 'typeOf' | 'project' | 'seller'>;
|
|
25
|
+
paymentServiceType: factory.service.paymentService.PaymentServiceType;
|
|
26
|
+
}): IFixTransactionNumberOperation<{
|
|
27
|
+
transactionNumber: string;
|
|
28
|
+
pendingPaymentAgencyTransaction?: PayTransactionService.IPaymentAgencyTransaction;
|
|
29
|
+
creditCard?: factory.action.authorize.paymentMethod.any.ICreditCard;
|
|
30
|
+
permitOrInvoice?: never;
|
|
31
|
+
id?: never;
|
|
32
|
+
} | {
|
|
33
|
+
/**
|
|
34
|
+
* 完了済の決済承認アクションID
|
|
35
|
+
*/
|
|
36
|
+
id: string;
|
|
37
|
+
}>;
|
|
38
|
+
export { fixTransactionNumber };
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.fixTransactionNumber = fixTransactionNumber;
|
|
13
|
+
const factory = require("../../../../factory");
|
|
14
|
+
const verifyTicketTokenAsNeeded_1 = require("../verifyTicketTokenAsNeeded");
|
|
15
|
+
const handlePrePublishedPaymentMethodIdOnAuthorizing_1 = require("./handlePrePublishedPaymentMethodIdOnAuthorizing");
|
|
16
|
+
/**
|
|
17
|
+
* 決済承認時の取引番号を決定する
|
|
18
|
+
*/
|
|
19
|
+
function fixTransactionNumber(params) {
|
|
20
|
+
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
const { paymentServiceType, transaction, object } = params;
|
|
22
|
+
// 取引番号生成
|
|
23
|
+
let transactionNumber;
|
|
24
|
+
let pendingPaymentAgencyTransaction;
|
|
25
|
+
let creditCard = object.creditCard;
|
|
26
|
+
// ticketTokenを解釈(2024-08-13~)
|
|
27
|
+
const { permitOrInvoice } = yield (0, verifyTicketTokenAsNeeded_1.verifyTicketTokenAsNeeded)({
|
|
28
|
+
project: { id: transaction.project.id },
|
|
29
|
+
object: object,
|
|
30
|
+
paymentServiceType,
|
|
31
|
+
purpose: { id: transaction.id }
|
|
32
|
+
})(repos);
|
|
33
|
+
/**
|
|
34
|
+
* ticketTokenによって指定された決済方法ID
|
|
35
|
+
*/
|
|
36
|
+
let paymentMethodIdByTicketToken;
|
|
37
|
+
if ((permitOrInvoice === null || permitOrInvoice === void 0 ? void 0 : permitOrInvoice.typeOf) === factory.permit.PermitType.Permit) {
|
|
38
|
+
paymentMethodIdByTicketToken = permitOrInvoice === null || permitOrInvoice === void 0 ? void 0 : permitOrInvoice.identifier;
|
|
39
|
+
if (typeof paymentMethodIdByTicketToken === 'string') {
|
|
40
|
+
transactionNumber = paymentMethodIdByTicketToken; // メンバーシップ指定の場合、取引番号に適用(2024-08-13~)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else if ((permitOrInvoice === null || permitOrInvoice === void 0 ? void 0 : permitOrInvoice.typeOf) === 'Invoice') {
|
|
44
|
+
// support paymentServiceType.MovieTicket(2024-11-23~)
|
|
45
|
+
if (typeof (permitOrInvoice === null || permitOrInvoice === void 0 ? void 0 : permitOrInvoice.paymentMethodId) === 'string') {
|
|
46
|
+
paymentMethodIdByTicketToken = permitOrInvoice === null || permitOrInvoice === void 0 ? void 0 : permitOrInvoice.paymentMethodId;
|
|
47
|
+
if (typeof paymentMethodIdByTicketToken === 'string') {
|
|
48
|
+
transactionNumber = paymentMethodIdByTicketToken;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// リクエストでpaymentMethodIdを指定された場合、取引に保管されたpaymentMethodIdに一致すればそちらを適用(外部サイト決済対応)
|
|
53
|
+
if (typeof object.paymentMethodId === 'string' && object.paymentMethodId.length > 0) {
|
|
54
|
+
if (typeof paymentMethodIdByTicketToken === 'string') {
|
|
55
|
+
// 指定されたpaymentMethodIdとチケットから読み取った決済方法IDは一致しなければいけない
|
|
56
|
+
if (paymentMethodIdByTicketToken !== object.paymentMethodId) {
|
|
57
|
+
throw new factory.errors.Argument('ticketToken', 'not matched with paymentMethodId');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const { authorizeParams, existingCompletedAuthorizeAction } = yield (0, handlePrePublishedPaymentMethodIdOnAuthorizing_1.handlePrePublishedPaymentMethodIdOnAuthorizing)({
|
|
61
|
+
object: object,
|
|
62
|
+
prePublishedPaymentMethodId: object.paymentMethodId,
|
|
63
|
+
transaction
|
|
64
|
+
})(repos);
|
|
65
|
+
if (existingCompletedAuthorizeAction !== undefined) {
|
|
66
|
+
return { id: existingCompletedAuthorizeAction.id };
|
|
67
|
+
}
|
|
68
|
+
else if (authorizeParams !== undefined) {
|
|
69
|
+
// creditCardを決済URL発行時の情報で上書き(2024-01-08~)
|
|
70
|
+
// creditCard = authorizeParams.paymentMethodByTransaction.paymentMethod?.creditCard;
|
|
71
|
+
creditCard = authorizeParams.creditCard;
|
|
72
|
+
transactionNumber = object.paymentMethodId;
|
|
73
|
+
pendingPaymentAgencyTransaction = authorizeParams.pendingPaymentAgencyTransaction;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
throw new factory.errors.NotImplemented('pendingPaymentAgencyTransaction required on paymentMethodId specified');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// 取引番号発行済でなければ発行
|
|
80
|
+
if (typeof transactionNumber !== 'string') {
|
|
81
|
+
const publishTransactionNumberResult = yield repos.transactionNumber.publishByTimestamp({ startDate: new Date() });
|
|
82
|
+
transactionNumber = publishTransactionNumberResult.transactionNumber;
|
|
83
|
+
}
|
|
84
|
+
return Object.assign(Object.assign({ transactionNumber }, (pendingPaymentAgencyTransaction !== undefined) ? { pendingPaymentAgencyTransaction } : undefined), (creditCard !== undefined) ? { creditCard } : undefined
|
|
85
|
+
// ...(permitOrInvoice !== undefined) ? { permitOrInvoice } : undefined
|
|
86
|
+
);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as factory from '
|
|
2
|
-
import type { ActionRepo } from '
|
|
3
|
-
import type { ITransactionInProgress, TransactionRepo } from '
|
|
4
|
-
import * as PayTransactionService from '
|
|
1
|
+
import * as factory from '../../../../factory';
|
|
2
|
+
import type { ActionRepo } from '../../../../repo/action';
|
|
3
|
+
import type { ITransactionInProgress, TransactionRepo } from '../../../../repo/transaction';
|
|
4
|
+
import * as PayTransactionService from '../../../assetTransaction/pay';
|
|
5
5
|
type IObjectWithoutDetail = factory.action.authorize.paymentMethod.any.IObjectWithoutDetail;
|
|
6
6
|
declare function handlePrePublishedPaymentMethodIdOnAuthorizing(params: {
|
|
7
7
|
object: Pick<IObjectWithoutDetail, 'amount' | 'issuedThrough' | 'paymentMethod'>;
|
|
@@ -11,7 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.handlePrePublishedPaymentMethodIdOnAuthorizing = handlePrePublishedPaymentMethodIdOnAuthorizing;
|
|
13
13
|
const createDebug = require("debug");
|
|
14
|
-
const factory = require("
|
|
14
|
+
const factory = require("../../../../factory");
|
|
15
15
|
const debug = createDebug('chevre-domain:service:payment');
|
|
16
16
|
function recipe2paymentAgencyTransaction(actionRecipe) {
|
|
17
17
|
var _a;
|
|
@@ -34,7 +34,6 @@ export declare function createMovieTicket(params: factory.action.trade.pay.IMovi
|
|
|
34
34
|
export declare function createAuthorizeResult(params: {
|
|
35
35
|
object: factory.action.authorize.paymentMethod.any.IObjectIncludingPaymentMethodDetails;
|
|
36
36
|
payTransaction: Pick<factory.assetTransaction.pay.ITransaction, 'object'>;
|
|
37
|
-
permit?: Pick<factory.ownershipInfo.IPermitAsGood, 'identifier'>;
|
|
38
37
|
}): factory.action.authorize.paymentMethod.any.IResult;
|
|
39
38
|
/**
|
|
40
39
|
* 通知対象としてのアクションを最適化
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as factory from '../../../../factory';
|
|
2
|
+
import type { AuthorizationRepo } from '../../../../repo/authorization';
|
|
3
|
+
import type { TicketRepo } from '../../../../repo/ticket';
|
|
4
|
+
import type { ITransactionInProgress } from '../../../../repo/transaction';
|
|
5
|
+
import type { TransactionNumberRepo } from '../../../../repo/transactionNumber';
|
|
6
|
+
interface IFixTransactionNumberRepos {
|
|
7
|
+
authorization: AuthorizationRepo;
|
|
8
|
+
ticket: TicketRepo;
|
|
9
|
+
transactionNumber: TransactionNumberRepo;
|
|
10
|
+
}
|
|
11
|
+
type IFixTransactionNumberOperation<T> = (repos: IFixTransactionNumberRepos) => Promise<T>;
|
|
12
|
+
type IObjectWithoutDetail = factory.action.authorize.paymentMethod.any.IObjectWithoutDetail & {
|
|
13
|
+
ticketToken?: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* 外部決済ロケーション発行時の取引番号を決定する
|
|
17
|
+
*/
|
|
18
|
+
declare function fixTransactionNumberOnPublishPaymentUrl(params: {
|
|
19
|
+
object: IObjectWithoutDetail;
|
|
20
|
+
transaction: Pick<ITransactionInProgress<factory.transactionType.PlaceOrder>, 'id' | 'project'>;
|
|
21
|
+
paymentServiceType: factory.service.paymentService.PaymentServiceType;
|
|
22
|
+
}): IFixTransactionNumberOperation<{
|
|
23
|
+
transactionNumber: string;
|
|
24
|
+
}>;
|
|
25
|
+
export { fixTransactionNumberOnPublishPaymentUrl };
|
package/lib/chevre/service/payment/any/publishPaymentUrl/fixTransactionNumberOnPublishPaymentUrl.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.fixTransactionNumberOnPublishPaymentUrl = fixTransactionNumberOnPublishPaymentUrl;
|
|
13
|
+
const factory = require("../../../../factory");
|
|
14
|
+
const verifyTicketTokenAsNeeded_1 = require("../verifyTicketTokenAsNeeded");
|
|
15
|
+
/**
|
|
16
|
+
* 外部決済ロケーション発行時の取引番号を決定する
|
|
17
|
+
*/
|
|
18
|
+
function fixTransactionNumberOnPublishPaymentUrl(params) {
|
|
19
|
+
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
const { paymentServiceType, transaction, object } = params;
|
|
21
|
+
// 取引番号生成
|
|
22
|
+
let transactionNumber;
|
|
23
|
+
// support ticketToken(2024-08-21~)
|
|
24
|
+
const { permitOrInvoice } = yield (0, verifyTicketTokenAsNeeded_1.verifyTicketTokenAsNeeded)({
|
|
25
|
+
project: { id: transaction.project.id },
|
|
26
|
+
object,
|
|
27
|
+
paymentServiceType,
|
|
28
|
+
purpose: { id: transaction.id }
|
|
29
|
+
})(repos);
|
|
30
|
+
if ((permitOrInvoice === null || permitOrInvoice === void 0 ? void 0 : permitOrInvoice.typeOf) === factory.permit.PermitType.Permit) {
|
|
31
|
+
const paymentMethodIdByPermit = permitOrInvoice === null || permitOrInvoice === void 0 ? void 0 : permitOrInvoice.identifier;
|
|
32
|
+
if (typeof paymentMethodIdByPermit === 'string') {
|
|
33
|
+
transactionNumber = paymentMethodIdByPermit;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else if ((permitOrInvoice === null || permitOrInvoice === void 0 ? void 0 : permitOrInvoice.typeOf) === 'Invoice') {
|
|
37
|
+
// support Invoice ticket(2025-11-09~)
|
|
38
|
+
if (typeof (permitOrInvoice === null || permitOrInvoice === void 0 ? void 0 : permitOrInvoice.paymentMethodId) === 'string') {
|
|
39
|
+
transactionNumber = permitOrInvoice.paymentMethodId;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (typeof transactionNumber !== 'string') {
|
|
43
|
+
const publishTransactionNumberResult = yield repos.transactionNumber.publishByTimestamp({ startDate: new Date() });
|
|
44
|
+
transactionNumber = publishTransactionNumberResult.transactionNumber;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
transactionNumber
|
|
48
|
+
// ...(permitOrInvoice !== undefined) ? { permitOrInvoice } : undefined
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
}
|
|
@@ -8,11 +8,11 @@ declare function verifyTicketTokenAsNeeded(params: {
|
|
|
8
8
|
};
|
|
9
9
|
object: Pick<factory.action.authorize.paymentMethod.any.IObjectWithoutDetail, 'issuedThrough' | 'ticketToken'>;
|
|
10
10
|
paymentServiceType: factory.service.paymentService.PaymentServiceType;
|
|
11
|
-
purpose: factory.action.authorize.paymentMethod.any.IPurpose
|
|
11
|
+
purpose: Pick<factory.action.authorize.paymentMethod.any.IPurpose, 'id'>;
|
|
12
12
|
}): (repos: {
|
|
13
13
|
authorization: AuthorizationRepo;
|
|
14
14
|
ticket: TicketRepo;
|
|
15
15
|
}) => Promise<{
|
|
16
16
|
permitOrInvoice?: IPermitOrInvoice;
|
|
17
17
|
}>;
|
|
18
|
-
export { verifyTicketTokenAsNeeded };
|
|
18
|
+
export { IPermitOrInvoice, verifyTicketTokenAsNeeded };
|
|
@@ -45,24 +45,40 @@ function verifyTicketTokenAsNeeded(params) {
|
|
|
45
45
|
}
|
|
46
46
|
if (authorizedObject.typeOf === 'OwnershipInfo') {
|
|
47
47
|
const { typeOfGood } = authorizedObject;
|
|
48
|
-
if (
|
|
49
|
-
|
|
48
|
+
if (typeOfGood.typeOf === factory.permit.PermitType.Permit || typeOfGood.typeOf === 'Invoice') {
|
|
49
|
+
if (((_b = typeOfGood.issuedThrough) === null || _b === void 0 ? void 0 : _b.typeOf) !== paymentServiceType) {
|
|
50
|
+
throw new factory.errors.Argument('ticketToken', 'paymentServiceType not matched');
|
|
51
|
+
}
|
|
52
|
+
// FaceToFace以外の場合、発行サービスIDを検証
|
|
53
|
+
if (typeOfGood.issuedThrough.typeOf !== factory.service.paymentService.PaymentServiceType.FaceToFace) {
|
|
54
|
+
if (typeOfGood.issuedThrough.id !== issuedThrough.id) {
|
|
55
|
+
throw new factory.errors.Argument('ticketToken', 'issuedThrough.id not matched');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (typeOfGood.typeOf === factory.permit.PermitType.Permit) {
|
|
59
|
+
permitOrInvoice = { identifier: typeOfGood.identifier, typeOf: factory.permit.PermitType.Permit };
|
|
60
|
+
}
|
|
61
|
+
else if (typeOfGood.typeOf === 'Invoice') {
|
|
62
|
+
// support paymentServiceType.MovieTicket(2024-11-23~)
|
|
63
|
+
permitOrInvoice = { paymentMethodId: typeOfGood.paymentMethodId, typeOf: 'Invoice' };
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
throw new factory.errors.Argument('ticketToken', 'must be Permit or Invoice');
|
|
67
|
+
}
|
|
50
68
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
69
|
+
else if (typeOfGood.typeOf === factory.service.paymentService.PaymentServiceType.CreditCard
|
|
70
|
+
|| typeOfGood.typeOf === factory.service.paymentService.PaymentServiceType.MovieTicket) {
|
|
71
|
+
// 決済方法所有権を受け入れる(2025-11-11~)
|
|
72
|
+
if (typeOfGood.typeOf !== paymentServiceType) {
|
|
73
|
+
throw new factory.errors.Argument('ticketToken', 'paymentServiceType not matched');
|
|
74
|
+
}
|
|
75
|
+
if (typeOfGood.id !== issuedThrough.id) {
|
|
54
76
|
throw new factory.errors.Argument('ticketToken', 'issuedThrough.id not matched');
|
|
55
77
|
}
|
|
56
|
-
|
|
57
|
-
if (typeOfGood.typeOf === factory.permit.PermitType.Permit) {
|
|
58
|
-
permitOrInvoice = { identifier: typeOfGood.identifier, typeOf: factory.permit.PermitType.Permit };
|
|
59
|
-
}
|
|
60
|
-
else if (typeOfGood.typeOf === 'Invoice') {
|
|
61
|
-
// support paymentServiceType.MovieTicket(2024-11-23~)
|
|
62
|
-
permitOrInvoice = { paymentMethodId: typeOfGood.paymentMethodId, typeOf: 'Invoice' };
|
|
78
|
+
permitOrInvoice = { paymentMethodId: typeOfGood.serviceOutput.paymentMethodId, typeOf: 'Invoice' };
|
|
63
79
|
}
|
|
64
80
|
else {
|
|
65
|
-
throw new factory.errors.Argument('ticketToken',
|
|
81
|
+
throw new factory.errors.Argument('ticketToken', `invalid typeOfGood.typeOf ${typeOfGood.typeOf}`);
|
|
66
82
|
}
|
|
67
83
|
}
|
|
68
84
|
else {
|
|
@@ -23,14 +23,14 @@ const factory = require("../../factory");
|
|
|
23
23
|
// import type { TransactionProcessRepo } from '../../repo/transactionProcess';
|
|
24
24
|
const PayTransactionService = require("../assetTransaction/pay");
|
|
25
25
|
const publishOrderNumberIfNotExist_1 = require("../transaction/placeOrder/publishOrderNumberIfNotExist");
|
|
26
|
+
const fixTransactionNumber_1 = require("./any/authorize/fixTransactionNumber");
|
|
27
|
+
const fixTransactionNumberOnPublishPaymentUrl_1 = require("./any/publishPaymentUrl/fixTransactionNumberOnPublishPaymentUrl");
|
|
26
28
|
const factory_1 = require("./any/factory");
|
|
27
29
|
const fixOrderAsNeeded_1 = require("./any/fixOrderAsNeeded");
|
|
28
|
-
const handlePrePublishedPaymentMethodIdOnAuthorizing_1 = require("./any/handlePrePublishedPaymentMethodIdOnAuthorizing");
|
|
29
30
|
const onPaymentStatusChanged_1 = require("./any/onPaymentStatusChanged");
|
|
30
31
|
Object.defineProperty(exports, "onPaymentStatusChanged", { enumerable: true, get: function () { return onPaymentStatusChanged_1.onPaymentStatusChanged; } });
|
|
31
32
|
const person2username_1 = require("./any/person2username");
|
|
32
33
|
Object.defineProperty(exports, "person2username", { enumerable: true, get: function () { return person2username_1.person2username; } });
|
|
33
|
-
const verifyTicketTokenAsNeeded_1 = require("./any/verifyTicketTokenAsNeeded");
|
|
34
34
|
/**
|
|
35
35
|
* 決済承認中止
|
|
36
36
|
* タスクから決済承認を取り消す
|
|
@@ -319,7 +319,9 @@ function processVoidPayTransaction(params) {
|
|
|
319
319
|
/**
|
|
320
320
|
* 外部決済ロケーションを発行する
|
|
321
321
|
*/
|
|
322
|
+
// tslint:disable-next-line:max-func-body-length
|
|
322
323
|
function publishPaymentUrl(params) {
|
|
324
|
+
// tslint:disable-next-line:max-func-body-length
|
|
323
325
|
return (repos, settings) => __awaiter(this, void 0, void 0, function* () {
|
|
324
326
|
var _a;
|
|
325
327
|
const { paymentServiceType, purpose, project } = params;
|
|
@@ -328,6 +330,9 @@ function publishPaymentUrl(params) {
|
|
|
328
330
|
}
|
|
329
331
|
try {
|
|
330
332
|
const transaction = yield repos.transaction.projectFieldsInProgressById({ typeOf: purpose.typeOf, id: purpose.id }, ['expires', 'seller', 'project']);
|
|
333
|
+
if (project.id !== transaction.project.id) {
|
|
334
|
+
throw new factory.errors.NotFound(factory.transactionType.PlaceOrder);
|
|
335
|
+
}
|
|
331
336
|
// publishOrderNumber(2025-03-11~)
|
|
332
337
|
yield (0, publishOrderNumberIfNotExist_1.publishOrderNumberIfNotExist)({
|
|
333
338
|
project: { id: transaction.project.id },
|
|
@@ -335,19 +340,25 @@ function publishPaymentUrl(params) {
|
|
|
335
340
|
object: { orderDate: new Date() }
|
|
336
341
|
})(repos);
|
|
337
342
|
// 取引番号生成
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
}
|
|
347
|
-
if (
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
343
|
+
const { transactionNumber } = yield (0, fixTransactionNumberOnPublishPaymentUrl_1.fixTransactionNumberOnPublishPaymentUrl)({
|
|
344
|
+
object: params.object,
|
|
345
|
+
transaction,
|
|
346
|
+
paymentServiceType
|
|
347
|
+
})(repos);
|
|
348
|
+
// let transactionNumber: string | undefined;
|
|
349
|
+
// // support ticketToken(2024-08-21~)
|
|
350
|
+
// const { permitOrInvoice } =
|
|
351
|
+
// await verifyTicketTokenAsNeeded({ project, object: params.object, paymentServiceType, purpose })(repos);
|
|
352
|
+
// if (permitOrInvoice?.typeOf === factory.permit.PermitType.Permit) {
|
|
353
|
+
// const paymentMethodIdByPermit = permitOrInvoice?.identifier;
|
|
354
|
+
// if (typeof paymentMethodIdByPermit === 'string') {
|
|
355
|
+
// transactionNumber = paymentMethodIdByPermit;
|
|
356
|
+
// }
|
|
357
|
+
// }
|
|
358
|
+
// if (typeof transactionNumber !== 'string') {
|
|
359
|
+
// const publishTransactionNumberResult = await repos.transactionNumber.publishByTimestamp({ startDate: new Date() });
|
|
360
|
+
// transactionNumber = publishTransactionNumberResult.transactionNumber;
|
|
361
|
+
// }
|
|
351
362
|
let result;
|
|
352
363
|
// URL発行
|
|
353
364
|
const authorizeObject = Object.assign(Object.assign({}, params.object), { accountId: '', paymentMethodId: transactionNumber, typeOf: factory.action.authorize.paymentMethod.any.ResultType.Payment });
|
|
@@ -411,67 +422,77 @@ function authorize(params) {
|
|
|
411
422
|
throw new factory.errors.NotImplemented(`purpose.typeOf '${purpose.typeOf} not implemented'`);
|
|
412
423
|
}
|
|
413
424
|
const transaction = yield repos.transaction.projectFieldsInProgressById({ typeOf: purpose.typeOf, id: purpose.id }, ['agent', 'expires', 'typeOf', 'project', 'seller']);
|
|
425
|
+
if (project.id !== transaction.project.id) {
|
|
426
|
+
throw new factory.errors.NotFound(factory.transactionType.PlaceOrder);
|
|
427
|
+
}
|
|
414
428
|
const { confirmationNumber, orderNumber } = yield (0, fixOrderAsNeeded_1.fixOrderAsNeeded)({
|
|
415
429
|
project: { id: transaction.project.id },
|
|
416
430
|
purpose
|
|
417
431
|
// paymentServiceType
|
|
418
432
|
})(repos);
|
|
419
433
|
// 取引番号生成
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
}
|
|
444
|
-
//
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
//
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
434
|
+
const fixTransactionNumberResult = yield (0, fixTransactionNumber_1.fixTransactionNumber)({
|
|
435
|
+
object: params.object,
|
|
436
|
+
transaction,
|
|
437
|
+
paymentServiceType
|
|
438
|
+
})(repos);
|
|
439
|
+
if (typeof fixTransactionNumberResult.id === 'string') {
|
|
440
|
+
return { id: fixTransactionNumberResult.id };
|
|
441
|
+
}
|
|
442
|
+
const { transactionNumber, pendingPaymentAgencyTransaction, creditCard } = fixTransactionNumberResult;
|
|
443
|
+
// let transactionNumber: string | undefined;
|
|
444
|
+
// let pendingPaymentAgencyTransaction: PayTransactionService.IPaymentAgencyTransaction | undefined;
|
|
445
|
+
// let creditCard: factory.action.authorize.paymentMethod.any.ICreditCard | undefined = params.object.creditCard;
|
|
446
|
+
// // ticketTokenを解釈(2024-08-13~)
|
|
447
|
+
// const { permitOrInvoice } =
|
|
448
|
+
// await verifyTicketTokenAsNeeded({ project, object: params.object, paymentServiceType, purpose })(repos);
|
|
449
|
+
// /**
|
|
450
|
+
// * ticketTokenによって指定された決済方法ID
|
|
451
|
+
// */
|
|
452
|
+
// let paymentMethodIdByTicketToken: string | undefined;
|
|
453
|
+
// if (permitOrInvoice?.typeOf === factory.permit.PermitType.Permit) {
|
|
454
|
+
// paymentMethodIdByTicketToken = permitOrInvoice?.identifier;
|
|
455
|
+
// if (typeof paymentMethodIdByTicketToken === 'string') {
|
|
456
|
+
// transactionNumber = paymentMethodIdByTicketToken; // メンバーシップ指定の場合、取引番号に適用(2024-08-13~)
|
|
457
|
+
// }
|
|
458
|
+
// } else if (permitOrInvoice?.typeOf === 'Invoice') {
|
|
459
|
+
// // support paymentServiceType.MovieTicket(2024-11-23~)
|
|
460
|
+
// if (typeof permitOrInvoice?.paymentMethodId === 'string') {
|
|
461
|
+
// paymentMethodIdByTicketToken = permitOrInvoice?.paymentMethodId;
|
|
462
|
+
// if (typeof paymentMethodIdByTicketToken === 'string') {
|
|
463
|
+
// transactionNumber = paymentMethodIdByTicketToken;
|
|
464
|
+
// }
|
|
465
|
+
// }
|
|
466
|
+
// }
|
|
467
|
+
// // リクエストでpaymentMethodIdを指定された場合、取引に保管されたpaymentMethodIdに一致すればそちらを適用(外部サイト決済対応)
|
|
468
|
+
// if (typeof params.object.paymentMethodId === 'string' && params.object.paymentMethodId.length > 0) {
|
|
469
|
+
// if (typeof paymentMethodIdByTicketToken === 'string') {
|
|
470
|
+
// if (paymentMethodIdByTicketToken !== params.object.paymentMethodId) {
|
|
471
|
+
// throw new factory.errors.Argument('ticketToken', 'not matched with paymentMethodId');
|
|
472
|
+
// }
|
|
473
|
+
// }
|
|
474
|
+
// const { authorizeParams, existingCompletedAuthorizeAction } = await handlePrePublishedPaymentMethodIdOnAuthorizing({
|
|
475
|
+
// object: params.object,
|
|
476
|
+
// prePublishedPaymentMethodId: params.object.paymentMethodId,
|
|
477
|
+
// transaction
|
|
478
|
+
// })(repos);
|
|
479
|
+
// if (existingCompletedAuthorizeAction !== undefined) {
|
|
480
|
+
// return { id: existingCompletedAuthorizeAction.id };
|
|
481
|
+
// } else if (authorizeParams !== undefined) {
|
|
482
|
+
// // creditCardを決済URL発行時の情報で上書き(2024-01-08~)
|
|
483
|
+
// // creditCard = authorizeParams.paymentMethodByTransaction.paymentMethod?.creditCard;
|
|
484
|
+
// creditCard = authorizeParams.creditCard;
|
|
485
|
+
// transactionNumber = params.object.paymentMethodId;
|
|
486
|
+
// pendingPaymentAgencyTransaction = authorizeParams.pendingPaymentAgencyTransaction;
|
|
487
|
+
// } else {
|
|
488
|
+
// throw new factory.errors.NotImplemented('pendingPaymentAgencyTransaction requied on paymentMethodId specified');
|
|
489
|
+
// }
|
|
490
|
+
// }
|
|
491
|
+
// // 取引番号発行済でなければ発行
|
|
492
|
+
// if (typeof transactionNumber !== 'string') {
|
|
493
|
+
// const publishTransactionNumberResult = await repos.transactionNumber.publishByTimestamp({ startDate: new Date() });
|
|
494
|
+
// transactionNumber = publishTransactionNumberResult.transactionNumber;
|
|
495
|
+
// }
|
|
475
496
|
const movieTickets = (Array.isArray(params.object.movieTickets)) ? params.object.movieTickets.map(factory_1.createMovieTicket) : undefined;
|
|
476
497
|
const { accountId } = yield fixAccountIdIfPossible({
|
|
477
498
|
object: params.object, project: { id: transaction.project.id }
|
|
@@ -547,7 +568,11 @@ function authorize(params) {
|
|
|
547
568
|
throw error;
|
|
548
569
|
}
|
|
549
570
|
}
|
|
550
|
-
const result = (0, factory_1.createAuthorizeResult)(
|
|
571
|
+
const result = (0, factory_1.createAuthorizeResult)({
|
|
572
|
+
payTransaction,
|
|
573
|
+
object: authorizeObjectIncludingPaymentMethodDetails
|
|
574
|
+
// ...(permitOrInvoice?.typeOf === factory.permit.PermitType.Permit) ? { permit: permitOrInvoice } : undefined
|
|
575
|
+
});
|
|
551
576
|
yield repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result: result });
|
|
552
577
|
return { id: action.id };
|
|
553
578
|
});
|
package/package.json
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@aws-sdk/client-cognito-identity-provider": "3.600.0",
|
|
13
13
|
"@aws-sdk/credential-providers": "3.600.0",
|
|
14
|
-
"@chevre/factory": "5.2.0-alpha.
|
|
15
|
-
"@cinerino/sdk": "12.7.0-alpha.
|
|
14
|
+
"@chevre/factory": "5.2.0-alpha.6",
|
|
15
|
+
"@cinerino/sdk": "12.7.0-alpha.3",
|
|
16
16
|
"@motionpicture/coa-service": "9.6.0",
|
|
17
17
|
"@motionpicture/gmo-service": "5.4.0-alpha.1",
|
|
18
18
|
"@sendgrid/client": "8.1.4",
|
|
@@ -115,5 +115,5 @@
|
|
|
115
115
|
"postversion": "git push origin --tags",
|
|
116
116
|
"prepublishOnly": "npm run clean && npm run build && npm test && npm run doc"
|
|
117
117
|
},
|
|
118
|
-
"version": "23.0.
|
|
118
|
+
"version": "23.1.0-alpha.1"
|
|
119
119
|
}
|