@chevre/domain 26.0.0-alpha.13 → 26.0.0-alpha.15

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.
Files changed (48) hide show
  1. package/lib/chevre/eventEmitter/task.d.ts +5 -4
  2. package/lib/chevre/eventEmitter/task.js +2 -2
  3. package/lib/chevre/repo/adminTask.d.ts +12 -0
  4. package/lib/chevre/repo/adminTask.js +24 -0
  5. package/lib/chevre/repo/assetTransaction.d.ts +1 -1
  6. package/lib/chevre/repo/mongoose/schemas/task.js +4 -0
  7. package/lib/chevre/repo/scheduledTask.js +0 -21
  8. package/lib/chevre/repo/task.d.ts +1 -77
  9. package/lib/chevre/repo/task.js +3 -384
  10. package/lib/chevre/repo/taskDelayed.d.ts +67 -0
  11. package/lib/chevre/repo/taskDelayed.js +148 -0
  12. package/lib/chevre/repo/transaction.d.ts +9 -9
  13. package/lib/chevre/repository.d.ts +5 -10
  14. package/lib/chevre/repository.js +11 -22
  15. package/lib/chevre/service/asyncAction.d.ts +2 -2
  16. package/lib/chevre/service/asyncAction.js +2 -2
  17. package/lib/chevre/service/asyncActionHandler.d.ts +4 -4
  18. package/lib/chevre/service/asyncActionHandler.js +11 -13
  19. package/lib/chevre/service/order/confirmPayTransaction.js +4 -1
  20. package/lib/chevre/service/order/onOrderStatusChanged/onOrderInTransit.js +2 -2
  21. package/lib/chevre/service/order/onOrderStatusChanged/onOrderPaymentDue.js +1 -1
  22. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/createSendEmailMessageTaskIfNotExist.js +1 -1
  23. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/factory.d.ts +1 -1
  24. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/factory.js +1 -1
  25. package/lib/chevre/service/order/onOrderStatusChanged/onOrderProcessing/processOrder.js +1 -1
  26. package/lib/chevre/service/project.d.ts +0 -3
  27. package/lib/chevre/service/project.js +0 -1
  28. package/lib/chevre/service/reserve/potentialActions/onReservationConfirmed.js +1 -1
  29. package/lib/chevre/service/scheduledTask.js +1 -1
  30. package/lib/chevre/service/task/acceptCOAOffer.js +1 -14
  31. package/lib/chevre/service/task/authorizePayment.js +1 -7
  32. package/lib/chevre/service/task/checkMovieTicket.js +1 -7
  33. package/lib/chevre/service/task/confirmReserveTransaction.js +3 -1
  34. package/lib/chevre/service/task/publishPaymentUrl.js +1 -10
  35. package/lib/chevre/service/task/syncResourcesFromCOA.js +1 -5
  36. package/lib/chevre/service/task/voidReserveTransaction.js +5 -8
  37. package/lib/chevre/service/task.d.ts +3 -3
  38. package/lib/chevre/service/task.js +3 -3
  39. package/lib/chevre/service/taskHandler/onOperationFailed.d.ts +1 -2
  40. package/lib/chevre/service/taskHandler/onOperationFailed.js +8 -7
  41. package/lib/chevre/service/taskHandler.d.ts +1 -2
  42. package/lib/chevre/service/taskHandler.js +6 -5
  43. package/lib/chevre/taskSettings.d.ts +4 -2
  44. package/package.json +1 -1
  45. package/lib/chevre/repo/asyncActionLegacy.d.ts +0 -23
  46. package/lib/chevre/repo/asyncActionLegacy.js +0 -59
  47. package/lib/chevre/repo/scheduledTaskLegacy.d.ts +0 -39
  48. package/lib/chevre/repo/scheduledTaskLegacy.js +0 -96
@@ -24,14 +24,10 @@ let coaAuthClient;
24
24
  * タスク実行関数
25
25
  */
26
26
  function call(params) {
27
- return async ({ connection, redisClient }, options) => {
27
+ return async ({ connection, redisClient }) => {
28
28
  if (redisClient === undefined) {
29
29
  throw new factory_1.factory.errors.Argument('settings', 'redisClient required');
30
30
  }
31
- // 遅延実行(executeByName)には対応しない
32
- if (!options.executeById) {
33
- return;
34
- }
35
31
  const settings = new integration_1.IntegrationSettingRepo({ connection });
36
32
  const reserveInterfaceRepo = new reserveInterface_1.ReserveInterfaceRepo(connection);
37
33
  const coaAPI = await reserveInterfaceRepo.findOne({ project: { id: { $eq: params.project.id } } });
@@ -16,7 +16,6 @@ const setting_1 = require("../../repo/setting");
16
16
  const integration_1 = require("../../repo/setting/integration");
17
17
  const stockHolder_1 = require("../../repo/stockHolder");
18
18
  const task_1 = require("../../repo/task");
19
- // import { TransactionRepo } from '../../repo/transaction';
20
19
  const placeOrder_1 = require("../../repo/transaction/placeOrder");
21
20
  let coaAuthClientCreated = false;
22
21
  let coaAuthClient = new coa_service_1.COA.auth.RefreshToken({
@@ -28,16 +27,16 @@ let coaAuthClient = new coa_service_1.COA.auth.RefreshToken({
28
27
  * タスク実行関数
29
28
  */
30
29
  function call(params) {
31
- return async ({ connection, redisClient }, options) => {
30
+ return async ({ connection, redisClient }) => {
32
31
  if (redisClient === undefined) {
33
32
  throw new factory_1.factory.errors.Argument('settings', 'redisClient required');
34
33
  }
35
34
  const voidByActionId = typeof params.data.id === 'string';
36
35
  if (voidByActionId) {
37
- // 遅延実行(executeByName)には対応しない
38
- if (!options.executeById) {
39
- return;
40
- }
36
+ // // 遅延実行(executeByName)には対応しない
37
+ // if (!options.executeById) {
38
+ // return;
39
+ // }
41
40
  }
42
41
  if (!coaAuthClientCreated) {
43
42
  const reserveInterfaceRepo = new reserveInterface_1.ReserveInterfaceRepo(connection);
@@ -53,7 +52,6 @@ function call(params) {
53
52
  endpoint: coaAuthClient.options.endpoint, // same as authClient(2024-07-17~)
54
53
  auth: coaAuthClient
55
54
  }, { timeout: (await settings.getByKey('coa')).timeoutReserve });
56
- // const transactionProcessRepo = new TransactionProcessRepo(redisClient, { lockExpiresInSeconds: 120 });
57
55
  try {
58
56
  await (0, voidTransaction_1.voidTransaction)({
59
57
  ...params.data,
@@ -71,7 +69,6 @@ function call(params) {
71
69
  setting: new setting_1.SettingRepo(connection),
72
70
  task: new task_1.TaskRepo(connection),
73
71
  placeOrder: new placeOrder_1.PlaceOrderRepo(connection),
74
- // transaction: new TransactionRepo(connection),
75
72
  reserveService
76
73
  }, settings);
77
74
  }
@@ -1,4 +1,4 @@
1
- import type { IExecuteSettings as IMinimumExecuteSettings, INextFunction, IReadyTask, IRunningTask } from '../eventEmitter/task';
1
+ import type { IExecuteSettings as IMinimumExecuteSettings, IReadyTask, IRunningTask } from '../eventEmitter/task';
2
2
  import type { AggregationSettings } from '../taskSettings';
3
3
  interface IExecuteSettings extends IMinimumExecuteSettings {
4
4
  aggregationSettings?: AggregationSettings;
@@ -14,5 +14,5 @@ declare function executeTaskById(params: (Pick<IReadyTask, 'id' | 'status'> | Pi
14
14
  */
15
15
  name: string;
16
16
  };
17
- }, next?: INextFunction): IOperation<void>;
18
- export { executeTaskById, };
17
+ }): IOperation<void>;
18
+ export { executeTaskById };
@@ -13,7 +13,7 @@ const debug = (0, debug_1.default)('chevre-domain:service:task');
13
13
  /**
14
14
  * タスク変更イベントを受けて実行する
15
15
  */
16
- function executeTaskById(params, next) {
16
+ function executeTaskById(params) {
17
17
  return async (settings) => {
18
18
  const taskRepo = new (await import('../repo/task.js')).TaskRepo(settings.connection);
19
19
  const { id, status, executor } = params;
@@ -33,9 +33,9 @@ function executeTaskById(params, next) {
33
33
  }
34
34
  // タスクがなければ終了
35
35
  if (task !== null) {
36
- await (0, taskHandler_1.executeTask)(task, (typeof next === 'function') ? next : undefined)(settings, {
36
+ await (0, taskHandler_1.executeTask)(task)(settings, {
37
37
  executeById: true,
38
- executeByName: false
38
+ // executeByName: false // discontinue(2026-08-05~)
39
39
  });
40
40
  }
41
41
  };
@@ -1,4 +1,3 @@
1
- import type { INextFunction } from '../../eventEmitter/task';
2
1
  import { factory } from '../../factory';
3
2
  import type { SettingRepo } from '../../repo/setting';
4
3
  import type { TaskRepo } from '../../repo/task';
@@ -10,7 +9,7 @@ declare function onOperationFailed(params: {
10
9
  task: IExecutableTask<factory.taskName>;
11
10
  now: Date;
12
11
  error: any;
13
- next?: INextFunction;
12
+ next?: never;
14
13
  }): (repos: {
15
14
  setting: SettingRepo;
16
15
  task: TaskRepo;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.onOperationFailed = onOperationFailed;
4
+ // import type { INextFunction } from '../../eventEmitter/task';
4
5
  const factory_1 = require("../../factory");
5
6
  const informTaskIfNeeded_1 = require("./onOperationFailed/informTaskIfNeeded");
6
7
  /**
@@ -9,7 +10,7 @@ const informTaskIfNeeded_1 = require("./onOperationFailed/informTaskIfNeeded");
9
10
  function onOperationFailed(params) {
10
11
  return async (repos) => {
11
12
  let error = params.error;
12
- const { task, now, next } = params;
13
+ const { task, now } = params;
13
14
  if (error === null || typeof error !== 'object') {
14
15
  error = { message: String(error) };
15
16
  }
@@ -35,12 +36,12 @@ function onOperationFailed(params) {
35
36
  // 失敗してもここではステータスを戻さない(Runningのまま待機)
36
37
  await repos.task.setExecutionResultAndStatus({
37
38
  id: task.id,
38
- remainingNumberOfTries: task.remainingNumberOfTries,
39
- name: task.name
39
+ // remainingNumberOfTries: task.remainingNumberOfTries,
40
+ // name: task.name
40
41
  }, {
41
42
  status: task.status,
42
43
  executionResult: result
43
- }, (typeof next === 'function') ? next : undefined);
44
+ });
44
45
  }
45
46
  else {
46
47
  // 分析連携(2025-08-05~)
@@ -61,12 +62,12 @@ function onOperationFailed(params) {
61
62
  };
62
63
  await repos.task.setExecutionResultAndStatus({
63
64
  id: task.id,
64
- remainingNumberOfTries: task.remainingNumberOfTries,
65
- name: task.name
65
+ // remainingNumberOfTries: task.remainingNumberOfTries,
66
+ // name: task.name
66
67
  }, {
67
68
  status: factory_1.factory.taskStatus.Aborted,
68
69
  executionResult: result
69
- }, (typeof next === 'function') ? next : undefined);
70
+ });
70
71
  }
71
72
  };
72
73
  }
@@ -1,4 +1,3 @@
1
- import type { INextFunction } from '../eventEmitter/task';
2
1
  import { factory } from '../factory';
3
2
  import type { ICallResult, ICallableTaskOperation, IExecutableTask, IExecutableTaskKeys, IOperationExecute } from '../taskSettings';
4
3
  export declare const taskLoader: {
@@ -9,5 +8,5 @@ export declare const taskLoader: {
9
8
  /**
10
9
  * タスクを実行する
11
10
  */
12
- declare function executeTask(task: IExecutableTask<factory.taskName>, next?: INextFunction): IOperationExecute<void>;
11
+ declare function executeTask(task: IExecutableTask<factory.taskName>): IOperationExecute<void>;
13
12
  export { ICallableTaskOperation, ICallResult, IExecutableTaskKeys, IOperationExecute, executeTask };
@@ -7,6 +7,7 @@ exports.taskLoader = void 0;
7
7
  exports.executeTask = executeTask;
8
8
  const debug_1 = __importDefault(require("debug"));
9
9
  const moment_1 = __importDefault(require("moment"));
10
+ // import type { INextFunction } from '../eventEmitter/task';
10
11
  const factory_1 = require("../factory");
11
12
  const onOperationFailed_1 = require("./taskHandler/onOperationFailed");
12
13
  const debug = (0, debug_1.default)('chevre-domain:service:taskHandler');
@@ -18,7 +19,7 @@ exports.taskLoader = {
18
19
  /**
19
20
  * タスクを実行する
20
21
  */
21
- function executeTask(task, next) {
22
+ function executeTask(task) {
22
23
  const now = new Date();
23
24
  debug('executing an executableTask...', task, now);
24
25
  return async (settings, options) => {
@@ -57,17 +58,17 @@ function executeTask(task, next) {
57
58
  };
58
59
  await taskRepo.setExecutionResultAndStatus({
59
60
  id: task.id,
60
- remainingNumberOfTries,
61
- name: task.name
61
+ // remainingNumberOfTries,
62
+ // name: task.name
62
63
  }, {
63
64
  status: factory_1.factory.taskStatus.Executed,
64
65
  executionResult: result
65
- }, (typeof next === 'function') ? next : undefined);
66
+ });
66
67
  }
67
68
  catch (error) {
68
69
  await (0, onOperationFailed_1.onOperationFailed)({
69
70
  task, now, error,
70
- ...(typeof next === 'function') ? { next } : undefined
71
+ // ...(typeof next === 'function') ? { next } : undefined // discontinue next(2026-08-05~)
71
72
  })({ setting: settingRepo, task: taskRepo });
72
73
  }
73
74
  };
@@ -21,8 +21,10 @@ interface IExecuteSettings extends IMinimumExecuteSettings {
21
21
  aggregationSettings?: AggregationSettings;
22
22
  }
23
23
  interface IExecuteOptions {
24
- executeById: boolean;
25
- executeByName: boolean;
24
+ /**
25
+ * 現時点(2026-08-05)でリトライタスク、予定タスク、非同期アクション、全てID指定でしか実行されない
26
+ */
27
+ executeById: true;
26
28
  }
27
29
  type IOperationExecute<T> = (settings: IExecuteSettings, options: IExecuteOptions) => Promise<T>;
28
30
  type ICallResult = void | Pick<factory.task.IExecutionResult, 'error'>;
package/package.json CHANGED
@@ -88,5 +88,5 @@
88
88
  "postversion": "git push origin --tags",
89
89
  "prepublishOnly": "npm run clean && npm run build"
90
90
  },
91
- "version": "26.0.0-alpha.13"
91
+ "version": "26.0.0-alpha.15"
92
92
  }
@@ -1,23 +0,0 @@
1
- import type { Connection, UpdateWriteOpResult } from 'mongoose';
2
- import { INextFunction } from '../eventEmitter/task';
3
- import { factory } from '../factory';
4
- /**
5
- * 旧非同期アクション(tasksコレクションにて管理)リポジトリ
6
- */
7
- export declare class AsyncActionLegacyRepo {
8
- private readonly taskModel;
9
- constructor(connection: Connection);
10
- runImmediately(params: Pick<factory.task.IAttributes<factory.taskName>, 'data' | 'name' | 'project' | 'remainingNumberOfTries' | 'runsAt'> & {
11
- alternateName?: never;
12
- identifier?: never;
13
- expires: Date;
14
- }, next: INextFunction): Promise<{
15
- id: string;
16
- }>;
17
- /**
18
- * Readyのままで期限切れのタスクをExpiredに変更する
19
- */
20
- makeExpiredMany(params: {
21
- expiresLt: Date;
22
- }): Promise<UpdateWriteOpResult>;
23
- }
@@ -1,59 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AsyncActionLegacyRepo = void 0;
4
- const task_1 = require("../eventEmitter/task");
5
- const factory_1 = require("../factory");
6
- const task_2 = require("./mongoose/schemas/task");
7
- /**
8
- * 旧非同期アクション(tasksコレクションにて管理)リポジトリ
9
- */
10
- class AsyncActionLegacyRepo {
11
- taskModel;
12
- constructor(connection) {
13
- this.taskModel = connection.model(task_2.modelName, (0, task_2.createSchema)());
14
- }
15
- async runImmediately(params,
16
- // support customr function(2025-05-25~)
17
- next) {
18
- const { expires } = params;
19
- if (!(expires instanceof Date)) {
20
- throw new factory_1.factory.errors.Argument('expires', 'must be Date');
21
- }
22
- const savingTask = {
23
- ...params,
24
- status: factory_1.factory.taskStatus.Ready,
25
- numberOfTried: 0,
26
- executionResults: []
27
- };
28
- const result = await this.taskModel.insertMany(savingTask, { rawResult: true });
29
- const id = result.insertedIds?.[0]?.toHexString();
30
- if (typeof id !== 'string') {
31
- throw new factory_1.factory.errors.Internal('task not saved');
32
- }
33
- task_1.taskEventEmitter.emitTaskStatusChanged({
34
- id,
35
- status: factory_1.factory.taskStatus.Ready,
36
- expires // emit expires(2025-03-31~)
37
- }, next);
38
- return { id };
39
- }
40
- /**
41
- * Readyのままで期限切れのタスクをExpiredに変更する
42
- */
43
- async makeExpiredMany(params) {
44
- const { expiresLt } = params;
45
- if (!(expiresLt instanceof Date)) {
46
- throw new factory_1.factory.errors.Argument('expiresLt', 'must be Date');
47
- }
48
- return this.taskModel.updateMany({
49
- status: { $eq: factory_1.factory.taskStatus.Ready },
50
- expires: { $exists: true, $lt: expiresLt }
51
- }, {
52
- $set: {
53
- status: factory_1.factory.taskStatus.Expired
54
- }
55
- })
56
- .exec();
57
- }
58
- }
59
- exports.AsyncActionLegacyRepo = AsyncActionLegacyRepo;
@@ -1,39 +0,0 @@
1
- import type { Connection, UpdateWriteOpResult } from 'mongoose';
2
- import { factory } from '../factory';
3
- /**
4
- * 旧予定タスクリポジトリ
5
- */
6
- export declare class ScheduledTaskLegacyRepo {
7
- private readonly taskModel;
8
- constructor(connection: Connection);
9
- /**
10
- * $eq:0をAbortedにする(特定のタスクのみ)(これらは中止されてもhubへ通知しない)
11
- */
12
- abortLegacyTasks(params: {
13
- intervalInMinutes: number;
14
- name: {
15
- $in: factory.taskName[];
16
- };
17
- }): Promise<UpdateWriteOpResult>;
18
- /**
19
- * 実行日時を一定期間過ぎたReadyタスクについて、Runningステータスに変更した上で、Runningイベントを発生させる
20
- */
21
- emitRunningIfExistsLegacy(params: {
22
- /**
23
- * 必ずタスク名指定で実行する
24
- */
25
- name: {
26
- $eq: factory.taskName;
27
- };
28
- runsAt: {
29
- $lt: Date;
30
- };
31
- sort: {
32
- numberOfTried?: factory.sortType;
33
- runsAt?: factory.sortType;
34
- };
35
- executor: {
36
- name: string;
37
- };
38
- }): Promise<Pick<factory.task.ITask<factory.taskName>, 'id' | 'name'> | null>;
39
- }
@@ -1,96 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ScheduledTaskLegacyRepo = void 0;
7
- const moment_1 = __importDefault(require("moment"));
8
- const task_1 = require("../eventEmitter/task");
9
- const factory_1 = require("../factory");
10
- const settings_1 = require("../settings");
11
- const task_2 = require("./mongoose/schemas/task");
12
- /**
13
- * 旧予定タスクリポジトリ
14
- */
15
- class ScheduledTaskLegacyRepo {
16
- taskModel;
17
- constructor(connection) {
18
- this.taskModel = connection.model(task_2.modelName, (0, task_2.createSchema)());
19
- }
20
- /**
21
- * $eq:0をAbortedにする(特定のタスクのみ)(これらは中止されてもhubへ通知しない)
22
- */
23
- async abortLegacyTasks(params) {
24
- const lastTriedAtShoudBeLessThan = (0, moment_1.default)()
25
- .add(-params.intervalInMinutes, 'minutes')
26
- .toDate();
27
- return this.taskModel.updateMany({
28
- status: { $eq: factory_1.factory.taskStatus.Running },
29
- lastTriedAt: {
30
- $type: 'date',
31
- $lt: lastTriedAtShoudBeLessThan
32
- },
33
- remainingNumberOfTries: { $eq: 0 },
34
- name: { $in: params.name.$in }
35
- }, {
36
- $set: {
37
- status: factory_1.factory.taskStatus.Aborted,
38
- dateAborted: new Date()
39
- }
40
- })
41
- .exec();
42
- }
43
- /**
44
- * 実行日時を一定期間過ぎたReadyタスクについて、Runningステータスに変更した上で、Runningイベントを発生させる
45
- */
46
- async emitRunningIfExistsLegacy(params
47
- // next?: INextFunction // 現時点でタスク遅延実行ではnext指定なし(2026-07-30)
48
- ) {
49
- if (!(params.runsAt.$lt instanceof Date)) {
50
- throw new factory_1.factory.errors.Argument('runsAt.$lt', 'must be Date');
51
- }
52
- const projection = {
53
- _id: 0,
54
- id: { $toString: '$_id' },
55
- name: 1
56
- };
57
- const nameEq = params.name?.$eq;
58
- // インデックス'executeOneByNameIfExists'を想定したfilter
59
- const filter = {
60
- status: { $eq: factory_1.factory.taskStatus.Ready },
61
- runsAt: { $lt: params.runsAt.$lt },
62
- name: params.name
63
- };
64
- const doc = await this.taskModel.findOneAndUpdate(filter, {
65
- $set: {
66
- status: factory_1.factory.taskStatus.Running, // 実行中に変更
67
- lastTriedAt: new Date(),
68
- executor: params.executor
69
- },
70
- $inc: {
71
- remainingNumberOfTries: -1, // 残りトライ可能回数減らす
72
- numberOfTried: 1 // トライ回数増やす
73
- }
74
- }, {
75
- new: true,
76
- projection,
77
- ...(typeof params.sort.numberOfTried === 'number' || typeof params.sort.runsAt === 'number')
78
- ? { sort: params.sort }
79
- : undefined
80
- })
81
- .setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
82
- .lean()
83
- .exec();
84
- if (doc === null) {
85
- return null;
86
- }
87
- const changedTask = {
88
- id: doc.id,
89
- status: factory_1.factory.taskStatus.Running,
90
- name: nameEq
91
- };
92
- task_1.taskEventEmitter.emitTaskStatusChanged(changedTask);
93
- return doc;
94
- }
95
- }
96
- exports.ScheduledTaskLegacyRepo = ScheduledTaskLegacyRepo;