@memberjunction/scheduling-actions 5.51.0 → 6.1.0-edge.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/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2023 MemberJunction
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -2,8 +2,15 @@ import { ActionResultSimple, RunActionParams } from '@memberjunction/actions-bas
2
2
  import { BaseJobAction } from './BaseJobAction.js';
3
3
  /**
4
4
  * Execute Scheduled Job Now action.
5
- * Triggers immediate execution of a scheduled job, bypassing its normal schedule.
6
- * Creates a job run record with "Pending" status for the scheduling engine to pick up.
5
+ *
6
+ * Runs a scheduled job immediately, bypassing its cron schedule, through the same engine path the
7
+ * poller uses — lock acquisition, plugin execution, the run record, statistics, and notifications.
8
+ *
9
+ * **This used to write a `Status='Running'` run row and return.** Nothing consumed those rows: there
10
+ * is no queue reader for ad-hoc runs, only the cron poller, which selects jobs by their *schedule*
11
+ * and never looks at pending run records. So "Execute Now" reported success, left a row that said
12
+ * Running forever, and never ran anything. Delegating to `SchedulingEngine.ExecuteScheduledJob` is
13
+ * what makes the name true.
7
14
  *
8
15
  * @example
9
16
  * ```typescript
@@ -17,16 +24,33 @@ import { BaseJobAction } from './BaseJobAction.js';
17
24
  */
18
25
  export declare class ExecuteScheduledJobNowAction extends BaseJobAction {
19
26
  /**
20
- * Triggers immediate execution of a scheduled job
27
+ * Runs a scheduled job immediately.
21
28
  *
22
29
  * @param params - The action parameters containing:
23
30
  * - JobID (required): ID of the job to execute
31
+ * - Wait (optional, default true): await the job and report its real outcome. Set false to
32
+ * start it and return as soon as it is under way — useful for a long job behind an
33
+ * interactive button, at the cost of the result only saying it started.
24
34
  *
25
35
  * @returns ActionResultSimple with:
26
- * - Success: true if job execution was queued successfully
27
- * - ResultCode: SUCCESS, VALIDATION_ERROR, NOT_FOUND, or FAILED
28
- * - Params: Output parameter 'RunID' contains the ID of the created job run
36
+ * - Success: whether the job itself succeeded (or, with Wait=false, whether it started)
37
+ * - ResultCode: SUCCESS, VALIDATION_ERROR, NOT_FOUND, LOCKED, JOB_FAILED, STARTED, or FAILED
38
+ * - Params: output parameters 'RunID' and 'RunStatus'
29
39
  */
30
40
  protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
41
+ /**
42
+ * Start the job and return once it is under way.
43
+ *
44
+ * The promise is deliberately not awaited; its rejection is logged rather than left unhandled,
45
+ * because a rejected floating promise takes the process down under Node's default policy.
46
+ */
47
+ private startWithoutWaiting;
48
+ /** Map a completed run onto the action result, so a failed job is a failed action. */
49
+ private describeRun;
50
+ /**
51
+ * Classify an engine throw. Lock contention is called out separately because it is the one
52
+ * failure a caller can act on — the job is already running, so try again shortly.
53
+ */
54
+ private describeFailure;
31
55
  }
32
56
  //# sourceMappingURL=ExecuteJobNowAction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExecuteJobNowAction.d.ts","sourceRoot":"","sources":["../src/ExecuteJobNowAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAKnF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,qBACa,4BAA6B,SAAQ,aAAa;IAC3D;;;;;;;;;;OAUG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAoE1F"}
1
+ {"version":3,"file":"ExecuteJobNowAction.d.ts","sourceRoot":"","sources":["../src/ExecuteJobNowAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAMnF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBACa,4BAA6B,SAAQ,aAAa;IAC3D;;;;;;;;;;;;;OAaG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA6CvF;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAkB3B,sFAAsF;IACtF,OAAO,CAAC,WAAW;IAenB;;;OAGG;IACH,OAAO,CAAC,eAAe;CAsB1B"}
@@ -6,12 +6,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { RegisterClass } from '@memberjunction/global';
8
8
  import { BaseAction } from '@memberjunction/actions';
9
- import { Metadata } from '@memberjunction/core';
9
+ import { LogError } from '@memberjunction/core';
10
+ import { SchedulingEngine } from '@memberjunction/scheduling-engine';
10
11
  import { BaseJobAction } from './BaseJobAction.js';
11
12
  /**
12
13
  * Execute Scheduled Job Now action.
13
- * Triggers immediate execution of a scheduled job, bypassing its normal schedule.
14
- * Creates a job run record with "Pending" status for the scheduling engine to pick up.
14
+ *
15
+ * Runs a scheduled job immediately, bypassing its cron schedule, through the same engine path the
16
+ * poller uses — lock acquisition, plugin execution, the run record, statistics, and notifications.
17
+ *
18
+ * **This used to write a `Status='Running'` run row and return.** Nothing consumed those rows: there
19
+ * is no queue reader for ad-hoc runs, only the cron poller, which selects jobs by their *schedule*
20
+ * and never looks at pending run records. So "Execute Now" reported success, left a row that said
21
+ * Running forever, and never ran anything. Delegating to `SchedulingEngine.ExecuteScheduledJob` is
22
+ * what makes the name true.
15
23
  *
16
24
  * @example
17
25
  * ```typescript
@@ -25,15 +33,18 @@ import { BaseJobAction } from './BaseJobAction.js';
25
33
  */
26
34
  let ExecuteScheduledJobNowAction = class ExecuteScheduledJobNowAction extends BaseJobAction {
27
35
  /**
28
- * Triggers immediate execution of a scheduled job
36
+ * Runs a scheduled job immediately.
29
37
  *
30
38
  * @param params - The action parameters containing:
31
39
  * - JobID (required): ID of the job to execute
40
+ * - Wait (optional, default true): await the job and report its real outcome. Set false to
41
+ * start it and return as soon as it is under way — useful for a long job behind an
42
+ * interactive button, at the cost of the result only saying it started.
32
43
  *
33
44
  * @returns ActionResultSimple with:
34
- * - Success: true if job execution was queued successfully
35
- * - ResultCode: SUCCESS, VALIDATION_ERROR, NOT_FOUND, or FAILED
36
- * - Params: Output parameter 'RunID' contains the ID of the created job run
45
+ * - Success: whether the job itself succeeded (or, with Wait=false, whether it started)
46
+ * - ResultCode: SUCCESS, VALIDATION_ERROR, NOT_FOUND, LOCKED, JOB_FAILED, STARTED, or FAILED
47
+ * - Params: output parameters 'RunID' and 'RunStatus'
37
48
  */
38
49
  async InternalRunAction(params) {
39
50
  try {
@@ -45,13 +56,13 @@ let ExecuteScheduledJobNowAction = class ExecuteScheduledJobNowAction extends Ba
45
56
  Message: 'JobID parameter is required'
46
57
  };
47
58
  }
48
- // Load the job to verify it exists
49
59
  const loadResult = await this.loadJob(jobId, params.ContextUser, params.Provider);
50
60
  if (loadResult.error) {
51
61
  return loadResult.error;
52
62
  }
53
63
  const job = loadResult.job;
54
- // Check if job status allows execution
64
+ // Checked here rather than left to the engine so the caller gets a specific message.
65
+ // The engine's own job list only holds active jobs, so it would report "not found".
55
66
  if (job.Status !== 'Active') {
56
67
  return {
57
68
  Success: false,
@@ -59,39 +70,75 @@ let ExecuteScheduledJobNowAction = class ExecuteScheduledJobNowAction extends Ba
59
70
  Message: `Cannot execute job '${job.Name}' with status '${job.Status}'. Job must be Active.`
60
71
  };
61
72
  }
62
- // Create a job run record
63
- const md = (params.Provider ?? new Metadata());
64
- const jobRun = await md.GetEntityObject('MJ: Scheduled Job Runs', params.ContextUser);
65
- jobRun.NewRecord();
66
- jobRun.ScheduledJobID = job.ID;
67
- jobRun.Status = 'Running';
68
- jobRun.StartedAt = new Date();
69
- jobRun.QueuedAt = new Date();
70
- // Save the job run
71
- const saveResult = await jobRun.Save();
72
- if (!saveResult) {
73
- return {
74
- Success: false,
75
- ResultCode: 'FAILED',
76
- Message: `Failed to create job run: ${jobRun.LatestResult?.Message || 'Unknown error'}`
77
- };
73
+ const engine = SchedulingEngine.Instance;
74
+ await engine.Config(false, params.ContextUser, params.Provider);
75
+ const wait = this.getBooleanParam(params, 'Wait', true);
76
+ if (!wait) {
77
+ return this.startWithoutWaiting(engine, jobId, job.Name, params);
78
78
  }
79
- // Add output parameter with run ID
80
- this.addOutputParam(params, 'RunID', jobRun.ID);
79
+ const run = await engine.ExecuteScheduledJob(jobId, params.ContextUser);
80
+ return this.describeRun(run, job.Name, params);
81
+ }
82
+ catch (error) {
83
+ return this.describeFailure(error);
84
+ }
85
+ }
86
+ /**
87
+ * Start the job and return once it is under way.
88
+ *
89
+ * The promise is deliberately not awaited; its rejection is logged rather than left unhandled,
90
+ * because a rejected floating promise takes the process down under Node's default policy.
91
+ */
92
+ startWithoutWaiting(engine, jobId, jobName, params) {
93
+ engine.ExecuteScheduledJob(jobId, params.ContextUser).catch((error) => {
94
+ LogError(`Execute Scheduled Job Now: background execution of '${jobName}' failed`, undefined, error);
95
+ });
96
+ return {
97
+ Success: true,
98
+ ResultCode: 'STARTED',
99
+ Message: `Scheduled job '${jobName}' started. Its outcome is recorded on its job run record.`,
100
+ Params: params.Params
101
+ };
102
+ }
103
+ /** Map a completed run onto the action result, so a failed job is a failed action. */
104
+ describeRun(run, jobName, params) {
105
+ this.addOutputParam(params, 'RunID', run.ID);
106
+ this.addOutputParam(params, 'RunStatus', run.Status);
107
+ const succeeded = run.Status === 'Completed';
108
+ return {
109
+ Success: succeeded,
110
+ ResultCode: succeeded ? 'SUCCESS' : 'JOB_FAILED',
111
+ Message: succeeded
112
+ ? `Scheduled job '${jobName}' completed (Run ID: ${run.ID})`
113
+ : `Scheduled job '${jobName}' finished with status '${run.Status}'${run.ErrorMessage ? `: ${run.ErrorMessage}` : ''} (Run ID: ${run.ID})`,
114
+ Params: params.Params
115
+ };
116
+ }
117
+ /**
118
+ * Classify an engine throw. Lock contention is called out separately because it is the one
119
+ * failure a caller can act on — the job is already running, so try again shortly.
120
+ */
121
+ describeFailure(error) {
122
+ const message = error instanceof Error ? error.message : String(error);
123
+ if (/could not acquire lock/i.test(message)) {
81
124
  return {
82
- Success: true,
83
- ResultCode: 'SUCCESS',
84
- Message: `Scheduled job '${job.Name}' queued for immediate execution (Run ID: ${jobRun.ID})`,
85
- Params: params.Params
125
+ Success: false,
126
+ ResultCode: 'LOCKED',
127
+ Message: `The job is already running. ${message}`
86
128
  };
87
129
  }
88
- catch (error) {
130
+ if (/not found or not active/i.test(message)) {
89
131
  return {
90
132
  Success: false,
91
- ResultCode: 'FAILED',
92
- Message: `Error executing scheduled job: ${error instanceof Error ? error.message : String(error)}`
133
+ ResultCode: 'NOT_FOUND',
134
+ Message: message
93
135
  };
94
136
  }
137
+ return {
138
+ Success: false,
139
+ ResultCode: 'FAILED',
140
+ Message: `Error executing scheduled job: ${message}`
141
+ };
95
142
  }
96
143
  };
97
144
  ExecuteScheduledJobNowAction = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"ExecuteJobNowAction.js","sourceRoot":"","sources":["../src/ExecuteJobNowAction.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAqB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AAEI,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,aAAa;IAC3D;;;;;;;;;;OAUG;IACO,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACrD,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAElD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE,kBAAkB;oBAC9B,OAAO,EAAE,6BAA6B;iBACzC,CAAC;YACN,CAAC;YAED,mCAAmC;YACnC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClF,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,UAAU,CAAC,KAAK,CAAC;YAC5B,CAAC;YAED,MAAM,GAAG,GAAG,UAAU,CAAC,GAAI,CAAC;YAE5B,uCAAuC;YACvC,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE,kBAAkB;oBAC9B,OAAO,EAAE,uBAAuB,GAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC,MAAM,wBAAwB;iBAC/F,CAAC;YACN,CAAC;YAED,0BAA0B;YAC1B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAiC,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAA0B,wBAAwB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAE/G,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;YAC1B,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAC9B,MAAM,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;YAE7B,mBAAmB;YACnB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAEvC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE,QAAQ;oBACpB,OAAO,EAAE,6BAA6B,MAAM,CAAC,YAAY,EAAE,OAAO,IAAI,eAAe,EAAE;iBAC1F,CAAC;YACN,CAAC;YAED,mCAAmC;YACnC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAEhD,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,kBAAkB,GAAG,CAAC,IAAI,6CAA6C,MAAM,CAAC,EAAE,GAAG;gBAC5F,MAAM,EAAE,MAAM,CAAC,MAAM;aACxB,CAAC;QAEN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,QAAQ;gBACpB,OAAO,EAAE,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aACtG,CAAC;QACN,CAAC;IACL,CAAC;CACJ,CAAA;AAhFY,4BAA4B;IADxC,aAAa,CAAC,UAAU,EAAE,2BAA2B,CAAC;GAC1C,4BAA4B,CAgFxC"}
1
+ {"version":3,"file":"ExecuteJobNowAction.js","sourceRoot":"","sources":["../src/ExecuteJobNowAction.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,29 +1,25 @@
1
1
  {
2
2
  "name": "@memberjunction/scheduling-actions",
3
3
  "type": "module",
4
- "version": "5.51.0",
4
+ "version": "6.1.0-edge.1",
5
5
  "description": "MemberJunction: Scheduling Actions - agentic tools for managing scheduled jobs",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "files": [
9
9
  "/dist"
10
10
  ],
11
- "scripts": {
12
- "build": "tsc && tsc-alias -f",
13
- "watch": "tsc --watch",
14
- "test": "vitest run"
15
- },
16
11
  "author": "MemberJunction.com",
17
12
  "license": "ISC",
18
13
  "dependencies": {
19
- "@memberjunction/global": "5.51.0",
20
- "@memberjunction/core": "5.51.0",
21
- "@memberjunction/core-entities": "5.51.0",
22
- "@memberjunction/actions": "5.51.0",
23
- "@memberjunction/actions-base": "5.51.0",
24
- "@memberjunction/scheduling-base-types": "5.51.0",
14
+ "@memberjunction/global": "6.1.0-edge.1",
15
+ "@memberjunction/core": "6.1.0-edge.1",
16
+ "@memberjunction/core-entities": "6.1.0-edge.1",
17
+ "@memberjunction/actions": "6.1.0-edge.1",
18
+ "@memberjunction/actions-base": "6.1.0-edge.1",
19
+ "@memberjunction/scheduling-base-types": "6.1.0-edge.1",
25
20
  "cron-parser": "^4.9.0",
26
- "luxon": "^3.2.1"
21
+ "luxon": "^3.2.1",
22
+ "@memberjunction/scheduling-engine": "6.1.0-edge.1"
27
23
  },
28
24
  "devDependencies": {
29
25
  "@types/node": "24.10.11",
@@ -32,5 +28,10 @@
32
28
  "repository": {
33
29
  "type": "git",
34
30
  "url": "https://github.com/MemberJunction/MJ"
31
+ },
32
+ "scripts": {
33
+ "build": "tsc && tsc-alias -f",
34
+ "watch": "tsc --watch",
35
+ "test": "vitest run"
35
36
  }
36
- }
37
+ }