velocious 1.0.598 → 1.0.600

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 (90) hide show
  1. package/README.md +12 -1
  2. package/build/background-jobs/adapter-client.js +45 -0
  3. package/build/background-jobs/adapter.js +139 -0
  4. package/build/background-jobs/job-registry.js +1 -1
  5. package/build/background-jobs/job.js +20 -129
  6. package/build/background-jobs/main.js +71 -28
  7. package/build/background-jobs/perform-job.js +23 -0
  8. package/build/background-jobs/platform-job.js +156 -0
  9. package/build/background-jobs/runtime.js +156 -0
  10. package/build/background-jobs/sql-adapter.js +20 -0
  11. package/build/background-jobs/store.js +3 -1
  12. package/build/background-jobs/types.js +10 -0
  13. package/build/background-jobs/web/controller.js +5 -2
  14. package/build/background-jobs/worker.js +6 -8
  15. package/build/configuration-types.js +5 -0
  16. package/build/configuration.js +217 -40
  17. package/build/environment-handlers/base.js +20 -0
  18. package/build/environment-handlers/node.js +27 -20
  19. package/build/jobs/prune-terminal-background-jobs.js +2 -3
  20. package/build/src/background-jobs/adapter-client.d.ts +41 -0
  21. package/build/src/background-jobs/adapter-client.d.ts.map +1 -0
  22. package/build/src/background-jobs/adapter-client.js +39 -0
  23. package/build/src/background-jobs/adapter.d.ts +165 -0
  24. package/build/src/background-jobs/adapter.d.ts.map +1 -0
  25. package/build/src/background-jobs/adapter.js +121 -0
  26. package/build/src/background-jobs/job-registry.d.ts +1 -1
  27. package/build/src/background-jobs/job-registry.d.ts.map +1 -1
  28. package/build/src/background-jobs/job-registry.js +2 -2
  29. package/build/src/background-jobs/job.d.ts +6 -69
  30. package/build/src/background-jobs/job.d.ts.map +1 -1
  31. package/build/src/background-jobs/job.js +17 -116
  32. package/build/src/background-jobs/main.d.ts +13 -3
  33. package/build/src/background-jobs/main.d.ts.map +1 -1
  34. package/build/src/background-jobs/main.js +66 -30
  35. package/build/src/background-jobs/perform-job.d.ts +16 -0
  36. package/build/src/background-jobs/perform-job.d.ts.map +1 -0
  37. package/build/src/background-jobs/perform-job.js +22 -0
  38. package/build/src/background-jobs/platform-job.d.ts +110 -0
  39. package/build/src/background-jobs/platform-job.d.ts.map +1 -0
  40. package/build/src/background-jobs/platform-job.js +138 -0
  41. package/build/src/background-jobs/runtime.d.ts +78 -0
  42. package/build/src/background-jobs/runtime.d.ts.map +1 -0
  43. package/build/src/background-jobs/runtime.js +132 -0
  44. package/build/src/background-jobs/sql-adapter.d.ts +13 -0
  45. package/build/src/background-jobs/sql-adapter.d.ts.map +1 -0
  46. package/build/src/background-jobs/sql-adapter.js +18 -0
  47. package/build/src/background-jobs/store.d.ts +2 -1
  48. package/build/src/background-jobs/store.d.ts.map +1 -1
  49. package/build/src/background-jobs/store.js +4 -2
  50. package/build/src/background-jobs/types.d.ts +41 -0
  51. package/build/src/background-jobs/types.d.ts.map +1 -1
  52. package/build/src/background-jobs/types.js +11 -1
  53. package/build/src/background-jobs/web/controller.d.ts.map +1 -1
  54. package/build/src/background-jobs/web/controller.js +5 -3
  55. package/build/src/background-jobs/worker.d.ts.map +1 -1
  56. package/build/src/background-jobs/worker.js +7 -8
  57. package/build/src/configuration-types.d.ts +16 -0
  58. package/build/src/configuration-types.d.ts.map +1 -1
  59. package/build/src/configuration-types.js +5 -1
  60. package/build/src/configuration.d.ts +51 -2
  61. package/build/src/configuration.d.ts.map +1 -1
  62. package/build/src/configuration.js +202 -39
  63. package/build/src/environment-handlers/base.d.ts +17 -0
  64. package/build/src/environment-handlers/base.d.ts.map +1 -1
  65. package/build/src/environment-handlers/base.js +19 -1
  66. package/build/src/environment-handlers/node.d.ts +18 -0
  67. package/build/src/environment-handlers/node.d.ts.map +1 -1
  68. package/build/src/environment-handlers/node.js +25 -20
  69. package/build/src/jobs/prune-terminal-background-jobs.d.ts.map +1 -1
  70. package/build/src/jobs/prune-terminal-background-jobs.js +3 -4
  71. package/build/tsconfig.tsbuildinfo +1 -1
  72. package/package.json +1 -1
  73. package/src/background-jobs/adapter-client.js +45 -0
  74. package/src/background-jobs/adapter.js +139 -0
  75. package/src/background-jobs/job-registry.js +1 -1
  76. package/src/background-jobs/job.js +20 -129
  77. package/src/background-jobs/main.js +71 -28
  78. package/src/background-jobs/perform-job.js +23 -0
  79. package/src/background-jobs/platform-job.js +156 -0
  80. package/src/background-jobs/runtime.js +156 -0
  81. package/src/background-jobs/sql-adapter.js +20 -0
  82. package/src/background-jobs/store.js +3 -1
  83. package/src/background-jobs/types.js +10 -0
  84. package/src/background-jobs/web/controller.js +5 -2
  85. package/src/background-jobs/worker.js +6 -8
  86. package/src/configuration-types.js +5 -0
  87. package/src/configuration.js +217 -40
  88. package/src/environment-handlers/base.js +20 -0
  89. package/src/environment-handlers/node.js +27 -20
  90. package/src/jobs/prune-terminal-background-jobs.js +2 -3
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Performs a job class inside its declared database-connection scope.
3
+ * @param {object} args - Performance options.
4
+ * @param {import("../configuration.js").default} args.configuration - Active configuration.
5
+ * @param {typeof import("./platform-job.js").default} args.JobClass - Job class.
6
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.jobArgs - Job arguments.
7
+ * @param {string} args.name - Connection-scope label.
8
+ * @returns {Promise<void>} - Resolves after performance.
9
+ */
10
+ export default function performBackgroundJob({ configuration, JobClass, jobArgs, name }: {
11
+ configuration: import("../configuration.js").default;
12
+ JobClass: typeof import("./platform-job.js").default;
13
+ jobArgs: Array<ReturnType<typeof JSON.parse>>;
14
+ name: string;
15
+ }): Promise<void>;
16
+ //# sourceMappingURL=perform-job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perform-job.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/perform-job.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAA8B,oBAAoB,CAAC,EAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAC,EANxF;IAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;IAAyD,QAAQ,EAAzD,cAAc,mBAAmB,EAAE,OAAO,CAClD;IAAmD,OAAO,EAAlD,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C;IAAqB,IAAI,EAAjB,MAAM,CACd;CAEwF,GAF9E,OAAO,CAAC,IAAI,CAAC,CAazB"}
@@ -0,0 +1,22 @@
1
+ // @ts-check
2
+ /**
3
+ * Performs a job class inside its declared database-connection scope.
4
+ * @param {object} args - Performance options.
5
+ * @param {import("../configuration.js").default} args.configuration - Active configuration.
6
+ * @param {typeof import("./platform-job.js").default} args.JobClass - Job class.
7
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.jobArgs - Job arguments.
8
+ * @param {string} args.name - Connection-scope label.
9
+ * @returns {Promise<void>} - Resolves after performance.
10
+ */
11
+ export default async function performBackgroundJob({ configuration, JobClass, jobArgs, name }) {
12
+ const jobInstance = new JobClass();
13
+ /**
14
+ * Narrows the generic subclass's runtime method to serialized job arguments.
15
+ * @type {(...args: Array<ReturnType<typeof JSON.parse>>) => Promise<void>}
16
+ */
17
+ const perform = jobInstance.perform;
18
+ await configuration.withConnections({ databaseIdentifiers: JobClass.databaseIdentifiers, name }, async () => {
19
+ await perform.apply(jobInstance, jobArgs);
20
+ });
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyZm9ybS1qb2IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2dyb3VuZC1qb2JzL3BlcmZvcm0tam9iLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUFDLEVBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDO0lBQ3pGLE1BQU0sV0FBVyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUE7SUFDbEM7OztPQUdHO0lBQ0gsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQTtJQUVuQyxNQUFNLGFBQWEsQ0FBQyxlQUFlLENBQUMsRUFBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxFQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDeEcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUMzQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGpvYiBjbGFzcyBpbnNpZGUgaXRzIGRlY2xhcmVkIGRhdGFiYXNlLWNvbm5lY3Rpb24gc2NvcGUuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIFBlcmZvcm1hbmNlIG9wdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQWN0aXZlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuL3BsYXRmb3JtLWpvYi5qc1wiKS5kZWZhdWx0fSBhcmdzLkpvYkNsYXNzIC0gSm9iIGNsYXNzLlxuICogQHBhcmFtIHtBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IGFyZ3Muam9iQXJncyAtIEpvYiBhcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5uYW1lIC0gQ29ubmVjdGlvbi1zY29wZSBsYWJlbC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIHBlcmZvcm1hbmNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBwZXJmb3JtQmFja2dyb3VuZEpvYih7Y29uZmlndXJhdGlvbiwgSm9iQ2xhc3MsIGpvYkFyZ3MsIG5hbWV9KSB7XG4gIGNvbnN0IGpvYkluc3RhbmNlID0gbmV3IEpvYkNsYXNzKClcbiAgLyoqXG4gICAqIE5hcnJvd3MgdGhlIGdlbmVyaWMgc3ViY2xhc3MncyBydW50aW1lIG1ldGhvZCB0byBzZXJpYWxpemVkIGpvYiBhcmd1bWVudHMuXG4gICAqIEB0eXBlIHsoLi4uYXJnczogQXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+KSA9PiBQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgY29uc3QgcGVyZm9ybSA9IGpvYkluc3RhbmNlLnBlcmZvcm1cblxuICBhd2FpdCBjb25maWd1cmF0aW9uLndpdGhDb25uZWN0aW9ucyh7ZGF0YWJhc2VJZGVudGlmaWVyczogSm9iQ2xhc3MuZGF0YWJhc2VJZGVudGlmaWVycywgbmFtZX0sIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBwZXJmb3JtLmFwcGx5KGpvYkluc3RhbmNlLCBqb2JBcmdzKVxuICB9KVxufVxuIl19
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Base class for background jobs.
3
+ *
4
+ * `TArgs` is the tuple of arguments the subclass's `perform` accepts, so a job that
5
+ * needs arguments declares them as required and typed — for example
6
+ * `class RunBuildJob extends VelociousJob<[string]>` with `async perform(buildId)`.
7
+ * The default empty tuple keeps argument-less jobs (`extends VelociousJob`,
8
+ * `async perform()`) working unchanged.
9
+ * @template {Array<ReturnType<typeof JSON.parse>>} [TArgs=[]]
10
+ */
11
+ export default class VelociousJob<TArgs extends Array<ReturnType<typeof JSON.parse>> = []> {
12
+ /**
13
+ * Database identifiers checked out while this job performs. Set an explicit
14
+ * list to avoid holding unrelated configured database connections, or `[]`
15
+ * when the job establishes any connections it needs itself. Left undefined,
16
+ * jobs retain the existing behavior of checking out every active database.
17
+ * @type {string[] | undefined}
18
+ */
19
+ static databaseIdentifiers: string[] | undefined;
20
+ /**
21
+ * Queue this job class runs on. Subclasses set e.g. `static queue = "builds"`
22
+ * to route onto a queue with its own cluster-wide concurrency cap (configured
23
+ * via `backgroundJobs.queues`). The `{queue}` enqueue option overrides it.
24
+ * Left undefined, jobs run on the `"default"` queue.
25
+ * @type {string | undefined}
26
+ */
27
+ static queue: string | undefined;
28
+ /**
29
+ * Optional process title shown for the runner while this job executes.
30
+ * Velocious sets `process.title` to this for the duration of the job — so
31
+ * `ps`/`top`/`htop` identify what a runner is doing — and restores the
32
+ * runner's base title when the job finishes. Left undefined, the runner falls
33
+ * back to `velocious job-runner: <JobName>`. Set e.g.
34
+ * `static processTitle = "velocious media transcoder"` to give a job a
35
+ * custom, human-readable title.
36
+ * @type {string | undefined}
37
+ */
38
+ static processTitle: string | undefined;
39
+ /**
40
+ * Stops this performance and reschedules the same logical job row. This is
41
+ * normal control flow: it does not count as a failure or consume a retry.
42
+ * @param {number} delayMs - Non-negative safe-integer delay in milliseconds.
43
+ * @returns {never} - This method never returns.
44
+ */
45
+ rescheduleIn(delayMs: number): never;
46
+ /**
47
+ * Runs job name.
48
+ * @returns {string} - Job name.
49
+ */
50
+ static jobName(): string;
51
+ /**
52
+ * Folds this job class's static `queue` into the enqueue options unless the
53
+ * caller already specified one.
54
+ * @param {import("./types.js").BackgroundJobOptions | undefined} options - Job options.
55
+ * @returns {import("./types.js").BackgroundJobOptions} - Options including the resolved queue.
56
+ */
57
+ static _withQueue(options: import("./types.js").BackgroundJobOptions | undefined): import("./types.js").BackgroundJobOptions;
58
+ /**
59
+ * Runs perform later.
60
+ * @param {...ReturnType<typeof JSON.parse>} args - Job args.
61
+ * @returns {Promise<string>} - Job id.
62
+ */
63
+ static performLater(...args: ReturnType<typeof JSON.parse>[]): Promise<string>;
64
+ /**
65
+ * Runs perform later with options.
66
+ * @param {object} args - Options.
67
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.args - Job args.
68
+ * @param {import("./types.js").BackgroundJobOptions} [args.options] - Job options.
69
+ * @returns {Promise<string>} - Job id.
70
+ */
71
+ static performLaterWithOptions({ args, options }: {
72
+ args: Array<ReturnType<typeof JSON.parse>>;
73
+ options?: import("./types.js").BackgroundJobOptions;
74
+ }): Promise<string>;
75
+ /**
76
+ * Atomically replaces this job class's queued owner for a stable schedule key.
77
+ * @param {object} args - Options.
78
+ * @param {string} args.scheduleKey - Stable logical schedule key.
79
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.args - Job args.
80
+ * @param {import("./types.js").BackgroundJobOptions} [args.options] - Job options.
81
+ * @returns {Promise<import("./types.js").BackgroundJobReplacementResult>} - Replacement result.
82
+ */
83
+ static replaceScheduled({ scheduleKey, args, options }: {
84
+ scheduleKey: string;
85
+ args: Array<ReturnType<typeof JSON.parse>>;
86
+ options?: import("./types.js").BackgroundJobOptions;
87
+ }): Promise<import("./types.js").BackgroundJobReplacementResult>;
88
+ /**
89
+ * Cancels or detaches the current owner of a stable schedule key.
90
+ * @param {string} scheduleKey - Stable logical schedule key.
91
+ * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Cancellation result.
92
+ */
93
+ static cancelScheduled(scheduleKey: string): Promise<import("./types.js").BackgroundJobCancellationResult>;
94
+ /**
95
+ * Runs split args and options.
96
+ * @param {Array<ReturnType<typeof JSON.parse>>} args - Job args.
97
+ * @returns {{jobArgs: Array<ReturnType<typeof JSON.parse>>, jobOptions: import("./types.js").BackgroundJobOptions}} - Split args and options.
98
+ */
99
+ static _splitArgsAndOptions(args: Array<ReturnType<typeof JSON.parse>>): {
100
+ jobArgs: Array<ReturnType<typeof JSON.parse>>;
101
+ jobOptions: import("./types.js").BackgroundJobOptions;
102
+ };
103
+ /**
104
+ * Override in subclasses.
105
+ * @param {TArgs} _args - Job args (the tuple this job class was parameterized with).
106
+ * @returns {Promise<void>} - Resolves when complete.
107
+ */
108
+ perform(..._args: TArgs): Promise<void>;
109
+ }
110
+ //# sourceMappingURL=platform-job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-job.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/platform-job.js"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY,CAFoB,KAAK,SAA5C,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAS,EAAG;IAG5D;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,EAFhB,MAAM,EAAE,GAAG,SAAS,CAEQ;IAEtC;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAFF,MAAM,GAAG,SAAS,CAEJ;IAExB;;;;;;;;;OASG;IACH,MAAM,CAAC,YAAY,EAFT,MAAM,GAAG,SAAS,CAEG;IAE/B;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAHT,MAGS,GAFP,KAAK,CAQjB;IAED;;;OAGG;IACH,MAAM,CAAC,OAAO,IAFD,MAAM,CAIlB;IAED;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAHd,OAAO,YAAY,EAAE,oBAAoB,GAAG,SAG9B,GAFZ,OAAO,YAAY,EAAE,oBAAoB,CAUrD;IAED;;;;OAIG;IACH,OAAa,YAAY,CAAC,GAAG,IAAI,EAHnB,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,EAGV,GAFpB,OAAO,CAAC,MAAM,CAAC,CAK3B;IAED;;;;;;OAMG;IACH,OAAa,uBAAuB,CAAC,EAAC,IAAI,EAAE,OAAO,EAAC,EAJjD;QAAmD,IAAI,EAA/C,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C;QAAyD,OAAO,AAAhE,CACA,EADQ,OAAO,YAAY,EAAE,oBAAoB,CACjD;KAEiD,GAFvC,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;;;;;OAOG;IACH,OAAa,gBAAgB,CAAC,EAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAC,EALvD;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAmD,IAAI,EAA/C,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C;QAAyD,OAAO,AAAhE,CACA,EADQ,OAAO,YAAY,EAAE,oBAAoB,CACjD;KAEuD,GAF7C,OAAO,CAAC,OAAO,YAAY,EAAE,8BAA8B,CAAC,CAIxE;IAED;;;;OAIG;IACH,OAAa,eAAe,CAAC,WAAW,EAH7B,MAG6B,GAF3B,OAAO,CAAC,OAAO,YAAY,EAAE,+BAA+B,CAAC,CAIzE;IAED;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAHrB,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGd,GAFnB;QAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,UAAU,EAAE,OAAO,YAAY,EAAE,oBAAoB,CAAA;KAAC,CAgBlH;IAED;;;;OAIG;IACG,OAAO,CAAC,GAAG,KAAK,EAHX,KAGW,GAFT,OAAO,CAAC,IAAI,CAAC,CAIzB;CACF"}
@@ -0,0 +1,138 @@
1
+ // @ts-check
2
+ import BackgroundJobRescheduleSignal from "./reschedule-signal.js";
3
+ import { cancelScheduledBackgroundJob, enqueueBackgroundJob, replaceScheduledBackgroundJob } from "./runtime.js";
4
+ /**
5
+ * Base class for background jobs.
6
+ *
7
+ * `TArgs` is the tuple of arguments the subclass's `perform` accepts, so a job that
8
+ * needs arguments declares them as required and typed — for example
9
+ * `class RunBuildJob extends VelociousJob<[string]>` with `async perform(buildId)`.
10
+ * The default empty tuple keeps argument-less jobs (`extends VelociousJob`,
11
+ * `async perform()`) working unchanged.
12
+ * @template {Array<ReturnType<typeof JSON.parse>>} [TArgs=[]]
13
+ */
14
+ export default class VelociousJob {
15
+ /**
16
+ * Database identifiers checked out while this job performs. Set an explicit
17
+ * list to avoid holding unrelated configured database connections, or `[]`
18
+ * when the job establishes any connections it needs itself. Left undefined,
19
+ * jobs retain the existing behavior of checking out every active database.
20
+ * @type {string[] | undefined}
21
+ */
22
+ static databaseIdentifiers = undefined;
23
+ /**
24
+ * Queue this job class runs on. Subclasses set e.g. `static queue = "builds"`
25
+ * to route onto a queue with its own cluster-wide concurrency cap (configured
26
+ * via `backgroundJobs.queues`). The `{queue}` enqueue option overrides it.
27
+ * Left undefined, jobs run on the `"default"` queue.
28
+ * @type {string | undefined}
29
+ */
30
+ static queue = undefined;
31
+ /**
32
+ * Optional process title shown for the runner while this job executes.
33
+ * Velocious sets `process.title` to this for the duration of the job — so
34
+ * `ps`/`top`/`htop` identify what a runner is doing — and restores the
35
+ * runner's base title when the job finishes. Left undefined, the runner falls
36
+ * back to `velocious job-runner: <JobName>`. Set e.g.
37
+ * `static processTitle = "velocious media transcoder"` to give a job a
38
+ * custom, human-readable title.
39
+ * @type {string | undefined}
40
+ */
41
+ static processTitle = undefined;
42
+ /**
43
+ * Stops this performance and reschedules the same logical job row. This is
44
+ * normal control flow: it does not count as a failure or consume a retry.
45
+ * @param {number} delayMs - Non-negative safe-integer delay in milliseconds.
46
+ * @returns {never} - This method never returns.
47
+ */
48
+ rescheduleIn(delayMs) {
49
+ if (!Number.isSafeInteger(delayMs) || delayMs < 0) {
50
+ throw new TypeError("background job reschedule delayMs must be a non-negative safe integer");
51
+ }
52
+ throw new BackgroundJobRescheduleSignal(delayMs);
53
+ }
54
+ /**
55
+ * Runs job name.
56
+ * @returns {string} - Job name.
57
+ */
58
+ static jobName() {
59
+ return this.name;
60
+ }
61
+ /**
62
+ * Folds this job class's static `queue` into the enqueue options unless the
63
+ * caller already specified one.
64
+ * @param {import("./types.js").BackgroundJobOptions | undefined} options - Job options.
65
+ * @returns {import("./types.js").BackgroundJobOptions} - Options including the resolved queue.
66
+ */
67
+ static _withQueue(options) {
68
+ const merged = options ? { ...options } : {};
69
+ if (merged.queue === undefined && typeof this.queue === "string" && this.queue.length > 0) {
70
+ merged.queue = this.queue;
71
+ }
72
+ return merged;
73
+ }
74
+ /**
75
+ * Runs perform later.
76
+ * @param {...ReturnType<typeof JSON.parse>} args - Job args.
77
+ * @returns {Promise<string>} - Job id.
78
+ */
79
+ static async performLater(...args) {
80
+ const { jobArgs, jobOptions } = this._splitArgsAndOptions(args);
81
+ return await enqueueBackgroundJob({ JobClass: this, jobArgs, jobOptions });
82
+ }
83
+ /**
84
+ * Runs perform later with options.
85
+ * @param {object} args - Options.
86
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.args - Job args.
87
+ * @param {import("./types.js").BackgroundJobOptions} [args.options] - Job options.
88
+ * @returns {Promise<string>} - Job id.
89
+ */
90
+ static async performLaterWithOptions({ args, options }) {
91
+ return await enqueueBackgroundJob({ JobClass: this, jobArgs: args, jobOptions: options });
92
+ }
93
+ /**
94
+ * Atomically replaces this job class's queued owner for a stable schedule key.
95
+ * @param {object} args - Options.
96
+ * @param {string} args.scheduleKey - Stable logical schedule key.
97
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.args - Job args.
98
+ * @param {import("./types.js").BackgroundJobOptions} [args.options] - Job options.
99
+ * @returns {Promise<import("./types.js").BackgroundJobReplacementResult>} - Replacement result.
100
+ */
101
+ static async replaceScheduled({ scheduleKey, args, options }) {
102
+ return await replaceScheduledBackgroundJob({ JobClass: this, scheduleKey, jobArgs: args, jobOptions: options });
103
+ }
104
+ /**
105
+ * Cancels or detaches the current owner of a stable schedule key.
106
+ * @param {string} scheduleKey - Stable logical schedule key.
107
+ * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Cancellation result.
108
+ */
109
+ static async cancelScheduled(scheduleKey) {
110
+ return await cancelScheduledBackgroundJob(scheduleKey);
111
+ }
112
+ /**
113
+ * Runs split args and options.
114
+ * @param {Array<ReturnType<typeof JSON.parse>>} args - Job args.
115
+ * @returns {{jobArgs: Array<ReturnType<typeof JSON.parse>>, jobOptions: import("./types.js").BackgroundJobOptions}} - Split args and options.
116
+ */
117
+ static _splitArgsAndOptions(args) {
118
+ if (args.length === 0) {
119
+ return { jobArgs: [], jobOptions: {} };
120
+ }
121
+ const lastArg = args[args.length - 1];
122
+ const isOptionsArg = lastArg && typeof lastArg === "object" && !Array.isArray(lastArg) && "jobOptions" in lastArg;
123
+ if (isOptionsArg) {
124
+ const { jobOptions } = /** @type {{jobOptions: import("./types.js").BackgroundJobOptions}} */ (lastArg);
125
+ return { jobArgs: args.slice(0, -1), jobOptions: jobOptions || {} };
126
+ }
127
+ return { jobArgs: args, jobOptions: {} };
128
+ }
129
+ /**
130
+ * Override in subclasses.
131
+ * @param {TArgs} _args - Job args (the tuple this job class was parameterized with).
132
+ * @returns {Promise<void>} - Resolves when complete.
133
+ */
134
+ async perform(..._args) {
135
+ throw new Error("perform not implemented");
136
+ }
137
+ }
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tncm91bmQtam9icy9wbGF0Zm9ybS1qb2IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sNkJBQTZCLE1BQU0sd0JBQXdCLENBQUE7QUFDbEUsT0FBTyxFQUFDLDRCQUE0QixFQUFFLG9CQUFvQixFQUFFLDZCQUE2QixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTlHOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sWUFBWTtJQUMvQjs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFBO0lBRXRDOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFBO0lBRXhCOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFBO0lBRS9COzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLE9BQU87UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xELE1BQU0sSUFBSSxTQUFTLENBQUMsdUVBQXVFLENBQUMsQ0FBQTtRQUM5RixDQUFDO1FBRUQsTUFBTSxJQUFJLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQTtJQUNsQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU87UUFDdkIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUUxQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUYsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQzNCLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJO1FBQy9CLE1BQU0sRUFBQyxPQUFPLEVBQUUsVUFBVSxFQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzdELE9BQU8sTUFBTSxvQkFBb0IsQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7SUFDMUUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFDO1FBQ2xELE9BQU8sTUFBTSxvQkFBb0IsQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtJQUN6RixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQztRQUN4RCxPQUFPLE1BQU0sNkJBQTZCLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQy9HLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBVztRQUN0QyxPQUFPLE1BQU0sNEJBQTRCLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDeEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSTtRQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxFQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBQyxDQUFBO1FBQ3RDLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNyQyxNQUFNLFlBQVksR0FBRyxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxZQUFZLElBQUksT0FBTyxDQUFBO1FBRWpILElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxFQUFDLFVBQVUsRUFBQyxHQUFHLHNFQUFzRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDckcsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFDLENBQUE7UUFDbkUsQ0FBQztRQUVELE9BQU8sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUMsQ0FBQTtJQUN4QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhY2tncm91bmRKb2JSZXNjaGVkdWxlU2lnbmFsIGZyb20gXCIuL3Jlc2NoZWR1bGUtc2lnbmFsLmpzXCJcbmltcG9ydCB7Y2FuY2VsU2NoZWR1bGVkQmFja2dyb3VuZEpvYiwgZW5xdWV1ZUJhY2tncm91bmRKb2IsIHJlcGxhY2VTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ifSBmcm9tIFwiLi9ydW50aW1lLmpzXCJcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBiYWNrZ3JvdW5kIGpvYnMuXG4gKlxuICogYFRBcmdzYCBpcyB0aGUgdHVwbGUgb2YgYXJndW1lbnRzIHRoZSBzdWJjbGFzcydzIGBwZXJmb3JtYCBhY2NlcHRzLCBzbyBhIGpvYiB0aGF0XG4gKiBuZWVkcyBhcmd1bWVudHMgZGVjbGFyZXMgdGhlbSBhcyByZXF1aXJlZCBhbmQgdHlwZWQg4oCUIGZvciBleGFtcGxlXG4gKiBgY2xhc3MgUnVuQnVpbGRKb2IgZXh0ZW5kcyBWZWxvY2lvdXNKb2I8W3N0cmluZ10+YCB3aXRoIGBhc3luYyBwZXJmb3JtKGJ1aWxkSWQpYC5cbiAqIFRoZSBkZWZhdWx0IGVtcHR5IHR1cGxlIGtlZXBzIGFyZ3VtZW50LWxlc3Mgam9icyAoYGV4dGVuZHMgVmVsb2Npb3VzSm9iYCxcbiAqIGBhc3luYyBwZXJmb3JtKClgKSB3b3JraW5nIHVuY2hhbmdlZC5cbiAqIEB0ZW1wbGF0ZSB7QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbVEFyZ3M9W11dXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0pvYiB7XG4gIC8qKlxuICAgKiBEYXRhYmFzZSBpZGVudGlmaWVycyBjaGVja2VkIG91dCB3aGlsZSB0aGlzIGpvYiBwZXJmb3Jtcy4gU2V0IGFuIGV4cGxpY2l0XG4gICAqIGxpc3QgdG8gYXZvaWQgaG9sZGluZyB1bnJlbGF0ZWQgY29uZmlndXJlZCBkYXRhYmFzZSBjb25uZWN0aW9ucywgb3IgYFtdYFxuICAgKiB3aGVuIHRoZSBqb2IgZXN0YWJsaXNoZXMgYW55IGNvbm5lY3Rpb25zIGl0IG5lZWRzIGl0c2VsZi4gTGVmdCB1bmRlZmluZWQsXG4gICAqIGpvYnMgcmV0YWluIHRoZSBleGlzdGluZyBiZWhhdmlvciBvZiBjaGVja2luZyBvdXQgZXZlcnkgYWN0aXZlIGRhdGFiYXNlLlxuICAgKiBAdHlwZSB7c3RyaW5nW10gfCB1bmRlZmluZWR9XG4gICAqL1xuICBzdGF0aWMgZGF0YWJhc2VJZGVudGlmaWVycyA9IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBRdWV1ZSB0aGlzIGpvYiBjbGFzcyBydW5zIG9uLiBTdWJjbGFzc2VzIHNldCBlLmcuIGBzdGF0aWMgcXVldWUgPSBcImJ1aWxkc1wiYFxuICAgKiB0byByb3V0ZSBvbnRvIGEgcXVldWUgd2l0aCBpdHMgb3duIGNsdXN0ZXItd2lkZSBjb25jdXJyZW5jeSBjYXAgKGNvbmZpZ3VyZWRcbiAgICogdmlhIGBiYWNrZ3JvdW5kSm9icy5xdWV1ZXNgKS4gVGhlIGB7cXVldWV9YCBlbnF1ZXVlIG9wdGlvbiBvdmVycmlkZXMgaXQuXG4gICAqIExlZnQgdW5kZWZpbmVkLCBqb2JzIHJ1biBvbiB0aGUgYFwiZGVmYXVsdFwiYCBxdWV1ZS5cbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICovXG4gIHN0YXRpYyBxdWV1ZSA9IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBwcm9jZXNzIHRpdGxlIHNob3duIGZvciB0aGUgcnVubmVyIHdoaWxlIHRoaXMgam9iIGV4ZWN1dGVzLlxuICAgKiBWZWxvY2lvdXMgc2V0cyBgcHJvY2Vzcy50aXRsZWAgdG8gdGhpcyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBqb2Ig4oCUIHNvXG4gICAqIGBwc2AvYHRvcGAvYGh0b3BgIGlkZW50aWZ5IHdoYXQgYSBydW5uZXIgaXMgZG9pbmcg4oCUIGFuZCByZXN0b3JlcyB0aGVcbiAgICogcnVubmVyJ3MgYmFzZSB0aXRsZSB3aGVuIHRoZSBqb2IgZmluaXNoZXMuIExlZnQgdW5kZWZpbmVkLCB0aGUgcnVubmVyIGZhbGxzXG4gICAqIGJhY2sgdG8gYHZlbG9jaW91cyBqb2ItcnVubmVyOiA8Sm9iTmFtZT5gLiBTZXQgZS5nLlxuICAgKiBgc3RhdGljIHByb2Nlc3NUaXRsZSA9IFwidmVsb2Npb3VzIG1lZGlhIHRyYW5zY29kZXJcImAgdG8gZ2l2ZSBhIGpvYiBhXG4gICAqIGN1c3RvbSwgaHVtYW4tcmVhZGFibGUgdGl0bGUuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqL1xuICBzdGF0aWMgcHJvY2Vzc1RpdGxlID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIFN0b3BzIHRoaXMgcGVyZm9ybWFuY2UgYW5kIHJlc2NoZWR1bGVzIHRoZSBzYW1lIGxvZ2ljYWwgam9iIHJvdy4gVGhpcyBpc1xuICAgKiBub3JtYWwgY29udHJvbCBmbG93OiBpdCBkb2VzIG5vdCBjb3VudCBhcyBhIGZhaWx1cmUgb3IgY29uc3VtZSBhIHJldHJ5LlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXlNcyAtIE5vbi1uZWdhdGl2ZSBzYWZlLWludGVnZXIgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBAcmV0dXJucyB7bmV2ZXJ9IC0gVGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJucy5cbiAgICovXG4gIHJlc2NoZWR1bGVJbihkZWxheU1zKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihkZWxheU1zKSB8fCBkZWxheU1zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImJhY2tncm91bmQgam9iIHJlc2NoZWR1bGUgZGVsYXlNcyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIHNhZmUgaW50ZWdlclwiKVxuICAgIH1cblxuICAgIHRocm93IG5ldyBCYWNrZ3JvdW5kSm9iUmVzY2hlZHVsZVNpZ25hbChkZWxheU1zKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgam9iIG5hbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gSm9iIG5hbWUuXG4gICAqL1xuICBzdGF0aWMgam9iTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lXG4gIH1cblxuICAvKipcbiAgICogRm9sZHMgdGhpcyBqb2IgY2xhc3MncyBzdGF0aWMgYHF1ZXVlYCBpbnRvIHRoZSBlbnF1ZXVlIG9wdGlvbnMgdW5sZXNzIHRoZVxuICAgKiBjYWxsZXIgYWxyZWFkeSBzcGVjaWZpZWQgb25lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnMgfCB1bmRlZmluZWR9IG9wdGlvbnMgLSBKb2Igb3B0aW9ucy5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9IC0gT3B0aW9ucyBpbmNsdWRpbmcgdGhlIHJlc29sdmVkIHF1ZXVlLlxuICAgKi9cbiAgc3RhdGljIF93aXRoUXVldWUob3B0aW9ucykge1xuICAgIGNvbnN0IG1lcmdlZCA9IG9wdGlvbnMgPyB7Li4ub3B0aW9uc30gOiB7fVxuXG4gICAgaWYgKG1lcmdlZC5xdWV1ZSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0aGlzLnF1ZXVlID09PSBcInN0cmluZ1wiICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgbWVyZ2VkLnF1ZXVlID0gdGhpcy5xdWV1ZVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHBlcmZvcm0gbGF0ZXIuXG4gICAqIEBwYXJhbSB7Li4uUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IGFyZ3MgLSBKb2IgYXJncy5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBKb2IgaWQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcGVyZm9ybUxhdGVyKC4uLmFyZ3MpIHtcbiAgICBjb25zdCB7am9iQXJncywgam9iT3B0aW9uc30gPSB0aGlzLl9zcGxpdEFyZ3NBbmRPcHRpb25zKGFyZ3MpXG4gICAgcmV0dXJuIGF3YWl0IGVucXVldWVCYWNrZ3JvdW5kSm9iKHtKb2JDbGFzczogdGhpcywgam9iQXJncywgam9iT3B0aW9uc30pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBwZXJmb3JtIGxhdGVyIHdpdGggb3B0aW9ucy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge0FycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gYXJncy5hcmdzIC0gSm9iIGFyZ3MuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iT3B0aW9uc30gW2FyZ3Mub3B0aW9uc10gLSBKb2Igb3B0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBKb2IgaWQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcGVyZm9ybUxhdGVyV2l0aE9wdGlvbnMoe2FyZ3MsIG9wdGlvbnN9KSB7XG4gICAgcmV0dXJuIGF3YWl0IGVucXVldWVCYWNrZ3JvdW5kSm9iKHtKb2JDbGFzczogdGhpcywgam9iQXJnczogYXJncywgam9iT3B0aW9uczogb3B0aW9uc30pXG4gIH1cblxuICAvKipcbiAgICogQXRvbWljYWxseSByZXBsYWNlcyB0aGlzIGpvYiBjbGFzcydzIHF1ZXVlZCBvd25lciBmb3IgYSBzdGFibGUgc2NoZWR1bGUga2V5LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnNjaGVkdWxlS2V5IC0gU3RhYmxlIGxvZ2ljYWwgc2NoZWR1bGUga2V5LlxuICAgKiBAcGFyYW0ge0FycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gYXJncy5hcmdzIC0gSm9iIGFyZ3MuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iT3B0aW9uc30gW2FyZ3Mub3B0aW9uc10gLSBKb2Igb3B0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUmVwbGFjZW1lbnRSZXN1bHQ+fSAtIFJlcGxhY2VtZW50IHJlc3VsdC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyByZXBsYWNlU2NoZWR1bGVkKHtzY2hlZHVsZUtleSwgYXJncywgb3B0aW9uc30pIHtcbiAgICByZXR1cm4gYXdhaXQgcmVwbGFjZVNjaGVkdWxlZEJhY2tncm91bmRKb2Ioe0pvYkNsYXNzOiB0aGlzLCBzY2hlZHVsZUtleSwgam9iQXJnczogYXJncywgam9iT3B0aW9uczogb3B0aW9uc30pXG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBvciBkZXRhY2hlcyB0aGUgY3VycmVudCBvd25lciBvZiBhIHN0YWJsZSBzY2hlZHVsZSBrZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlZHVsZUtleSAtIFN0YWJsZSBsb2dpY2FsIHNjaGVkdWxlIGtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iQ2FuY2VsbGF0aW9uUmVzdWx0Pn0gLSBDYW5jZWxsYXRpb24gcmVzdWx0LlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGNhbmNlbFNjaGVkdWxlZChzY2hlZHVsZUtleSkge1xuICAgIHJldHVybiBhd2FpdCBjYW5jZWxTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iKHNjaGVkdWxlS2V5KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3BsaXQgYXJncyBhbmQgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IGFyZ3MgLSBKb2IgYXJncy5cbiAgICogQHJldHVybnMge3tqb2JBcmdzOiBBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIGpvYk9wdGlvbnM6IGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9fSAtIFNwbGl0IGFyZ3MgYW5kIG9wdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgX3NwbGl0QXJnc0FuZE9wdGlvbnMoYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtqb2JBcmdzOiBbXSwgam9iT3B0aW9uczoge319XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEFyZyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGlzT3B0aW9uc0FyZyA9IGxhc3RBcmcgJiYgdHlwZW9mIGxhc3RBcmcgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkobGFzdEFyZykgJiYgXCJqb2JPcHRpb25zXCIgaW4gbGFzdEFyZ1xuXG4gICAgaWYgKGlzT3B0aW9uc0FyZykge1xuICAgICAgY29uc3Qge2pvYk9wdGlvbnN9ID0gLyoqIEB0eXBlIHt7am9iT3B0aW9uczogaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iT3B0aW9uc319ICovIChsYXN0QXJnKVxuICAgICAgcmV0dXJuIHtqb2JBcmdzOiBhcmdzLnNsaWNlKDAsIC0xKSwgam9iT3B0aW9uczogam9iT3B0aW9ucyB8fCB7fX1cbiAgICB9XG5cbiAgICByZXR1cm4ge2pvYkFyZ3M6IGFyZ3MsIGpvYk9wdGlvbnM6IHt9fVxuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzZXMuXG4gICAqIEBwYXJhbSB7VEFyZ3N9IF9hcmdzIC0gSm9iIGFyZ3MgKHRoZSB0dXBsZSB0aGlzIGpvYiBjbGFzcyB3YXMgcGFyYW1ldGVyaXplZCB3aXRoKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHBlcmZvcm0oLi4uX2FyZ3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJwZXJmb3JtIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG59XG4iXX0=
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Enqueues durably in background mode or performs immediately in inline mode.
3
+ * @param {object} args - Enqueue request.
4
+ * @param {typeof import("./platform-job.js").default} args.JobClass - Job class.
5
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.jobArgs - Job arguments.
6
+ * @param {import("./types.js").BackgroundJobOptions | undefined} args.jobOptions - Job options.
7
+ * @returns {Promise<string>} - Durable job id or ephemeral inline performance id.
8
+ */
9
+ export declare function enqueueBackgroundJob({ JobClass, jobArgs, jobOptions }: {
10
+ JobClass: typeof import("./platform-job.js").default;
11
+ jobArgs: Array<ReturnType<typeof JSON.parse>>;
12
+ jobOptions: import("./types.js").BackgroundJobOptions | undefined;
13
+ }): Promise<string>;
14
+ /**
15
+ * Enqueues using an explicitly resolved configuration.
16
+ * @param {object} args - Enqueue request.
17
+ * @param {import("../configuration.js").default} args.configuration - Configuration.
18
+ * @param {typeof import("./platform-job.js").default} args.JobClass - Job class.
19
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.jobArgs - Job arguments.
20
+ * @param {import("./types.js").BackgroundJobOptions | undefined} args.jobOptions - Job options.
21
+ * @returns {Promise<string>} - Durable job id or ephemeral inline performance id.
22
+ */
23
+ export declare function enqueueBackgroundJobForConfiguration({ configuration, JobClass, jobArgs, jobOptions }: {
24
+ configuration: import("../configuration.js").default;
25
+ JobClass: typeof import("./platform-job.js").default;
26
+ jobArgs: Array<ReturnType<typeof JSON.parse>>;
27
+ jobOptions: import("./types.js").BackgroundJobOptions | undefined;
28
+ }): Promise<string>;
29
+ /**
30
+ * Replaces a stable durable schedule in background mode.
31
+ * @param {object} args - Replacement request.
32
+ * @param {typeof import("./platform-job.js").default} args.JobClass - Job class.
33
+ * @param {string} args.scheduleKey - Stable schedule key.
34
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.jobArgs - Job arguments.
35
+ * @param {import("./types.js").BackgroundJobOptions | undefined} args.jobOptions - Job options.
36
+ * @returns {Promise<import("./types.js").BackgroundJobReplacementResult>} - Replacement result.
37
+ */
38
+ export declare function replaceScheduledBackgroundJob({ JobClass, scheduleKey, jobArgs, jobOptions }: {
39
+ JobClass: typeof import("./platform-job.js").default;
40
+ scheduleKey: string;
41
+ jobArgs: Array<ReturnType<typeof JSON.parse>>;
42
+ jobOptions: import("./types.js").BackgroundJobOptions | undefined;
43
+ }): Promise<import("./types.js").BackgroundJobReplacementResult>;
44
+ /**
45
+ * Replaces a stable schedule using an explicitly resolved configuration.
46
+ * @param {object} args - Replacement request.
47
+ * @param {import("../configuration.js").default} args.configuration - Configuration.
48
+ * @param {typeof import("./platform-job.js").default} args.JobClass - Job class.
49
+ * @param {string} args.scheduleKey - Stable schedule key.
50
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.jobArgs - Job arguments.
51
+ * @param {import("./types.js").BackgroundJobOptions | undefined} args.jobOptions - Job options.
52
+ * @returns {Promise<import("./types.js").BackgroundJobReplacementResult>} - Replacement result.
53
+ */
54
+ export declare function replaceScheduledBackgroundJobForConfiguration({ configuration, JobClass, scheduleKey, jobArgs, jobOptions }: {
55
+ configuration: import("../configuration.js").default;
56
+ JobClass: typeof import("./platform-job.js").default;
57
+ scheduleKey: string;
58
+ jobArgs: Array<ReturnType<typeof JSON.parse>>;
59
+ jobOptions: import("./types.js").BackgroundJobOptions | undefined;
60
+ }): Promise<import("./types.js").BackgroundJobReplacementResult>;
61
+ /**
62
+ * Cancels a stable durable schedule in background mode.
63
+ * @param {string} scheduleKey - Stable schedule key.
64
+ * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Cancellation result.
65
+ */
66
+ export declare function cancelScheduledBackgroundJob(scheduleKey: string): Promise<import("./types.js").BackgroundJobCancellationResult>;
67
+ /**
68
+ * Cancels a stable schedule using an explicitly resolved configuration.
69
+ * @param {object} args - Cancellation request.
70
+ * @param {import("../configuration.js").default} args.configuration - Configuration.
71
+ * @param {string} args.scheduleKey - Stable logical schedule key.
72
+ * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Cancellation result.
73
+ */
74
+ export declare function cancelScheduledBackgroundJobForConfiguration({ configuration, scheduleKey }: {
75
+ configuration: import("../configuration.js").default;
76
+ scheduleKey: string;
77
+ }): Promise<import("./types.js").BackgroundJobCancellationResult>;
78
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/runtime.js"],"names":[],"mappings":"AA8BA;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,EAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAC,EALvE;IAAyD,QAAQ,EAAzD,cAAc,mBAAmB,EAAE,OAAO,CAClD;IAAmD,OAAO,EAAlD,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C;IAAoE,UAAU,EAAtE,OAAO,YAAY,EAAE,oBAAoB,GAAG,SAAS,CAC7D;CAEuE,GAF7D,OAAO,CAAC,MAAM,CAAC,CAM3B;AAED;;;;;;;;GAQG;AACH,wBAAsB,oCAAoC,CAAC,EAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAC,EANtG;IAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;IAAyD,QAAQ,EAAzD,cAAc,mBAAmB,EAAE,OAAO,CAClD;IAAmD,OAAO,EAAlD,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C;IAAoE,UAAU,EAAtE,OAAO,YAAY,EAAE,oBAAoB,GAAG,SAAS,CAC7D;CAEsG,GAF5F,OAAO,CAAC,MAAM,CAAC,CAkC3B;AAED;;;;;;;;GAQG;AACH,wBAAsB,6BAA6B,CAAC,EAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAC,EAN7F;IAAyD,QAAQ,EAAzD,cAAc,mBAAmB,EAAE,OAAO,CAClD;IAAqB,WAAW,EAAxB,MAAM,CACd;IAAmD,OAAO,EAAlD,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C;IAAoE,UAAU,EAAtE,OAAO,YAAY,EAAE,oBAAoB,GAAG,SAAS,CAC7D;CAE6F,GAFnF,OAAO,CAAC,OAAO,YAAY,EAAE,8BAA8B,CAAC,CAMxE;AAED;;;;;;;;;GASG;AACH,wBAAsB,6CAA6C,CAAC,EAAC,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAC,EAP5H;IAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;IAAyD,QAAQ,EAAzD,cAAc,mBAAmB,EAAE,OAAO,CAClD;IAAqB,WAAW,EAAxB,MAAM,CACd;IAAmD,OAAO,EAAlD,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C;IAAoE,UAAU,EAAtE,OAAO,YAAY,EAAE,oBAAoB,GAAG,SAAS,CAC7D;CAE4H,GAFlH,OAAO,CAAC,OAAO,YAAY,EAAE,8BAA8B,CAAC,CAgBxE;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,CAAC,WAAW,EAHnD,MAGmD,GAFjD,OAAO,CAAC,OAAO,YAAY,EAAE,+BAA+B,CAAC,CAMzE;AAED;;;;;;GAMG;AACH,wBAAsB,4CAA4C,CAAC,EAAC,aAAa,EAAE,WAAW,EAAC,EAJ5F;IAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;IAAqB,WAAW,EAAxB,MAAM,CACd;CAE4F,GAFlF,OAAO,CAAC,OAAO,YAAY,EAAE,+BAA+B,CAAC,CAWzE"}
@@ -0,0 +1,132 @@
1
+ // @ts-check
2
+ import { currentConfiguration } from "../current-configuration.js";
3
+ import performBackgroundJob from "./perform-job.js";
4
+ import BackgroundJobRescheduleSignal from "./reschedule-signal.js";
5
+ let inlinePerformanceSequence = 0;
6
+ /**
7
+ * Rejects options whose semantics require durable queue state.
8
+ * @param {import("./types.js").BackgroundJobOptions | undefined} options - Requested options.
9
+ * @returns {void}
10
+ */
11
+ function validateInlineOptions(options) {
12
+ const optionNames = Object.keys(options || {});
13
+ if (optionNames.length > 0) {
14
+ throw new Error(`Background job option ${optionNames[0]} is not supported in inline mode`);
15
+ }
16
+ }
17
+ /**
18
+ * Builds an ephemeral inline performance id.
19
+ * @returns {string} - Performance id.
20
+ */
21
+ function inlineJobId() {
22
+ inlinePerformanceSequence++;
23
+ return `inline-${Date.now()}-${inlinePerformanceSequence}`;
24
+ }
25
+ /**
26
+ * Enqueues durably in background mode or performs immediately in inline mode.
27
+ * @param {object} args - Enqueue request.
28
+ * @param {typeof import("./platform-job.js").default} args.JobClass - Job class.
29
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.jobArgs - Job arguments.
30
+ * @param {import("./types.js").BackgroundJobOptions | undefined} args.jobOptions - Job options.
31
+ * @returns {Promise<string>} - Durable job id or ephemeral inline performance id.
32
+ */
33
+ export async function enqueueBackgroundJob({ JobClass, jobArgs, jobOptions }) {
34
+ const configuration = currentConfiguration();
35
+ return await enqueueBackgroundJobForConfiguration({ configuration, JobClass, jobArgs, jobOptions });
36
+ }
37
+ /**
38
+ * Enqueues using an explicitly resolved configuration.
39
+ * @param {object} args - Enqueue request.
40
+ * @param {import("../configuration.js").default} args.configuration - Configuration.
41
+ * @param {typeof import("./platform-job.js").default} args.JobClass - Job class.
42
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.jobArgs - Job arguments.
43
+ * @param {import("./types.js").BackgroundJobOptions | undefined} args.jobOptions - Job options.
44
+ * @returns {Promise<string>} - Durable job id or ephemeral inline performance id.
45
+ */
46
+ export async function enqueueBackgroundJobForConfiguration({ configuration, JobClass, jobArgs, jobOptions }) {
47
+ if (configuration.getBackgroundJobsConfig().mode === "inline") {
48
+ validateInlineOptions(jobOptions);
49
+ configuration.setCurrent();
50
+ await configuration.initialize({ type: "background-jobs-inline" });
51
+ try {
52
+ await performBackgroundJob({
53
+ configuration,
54
+ JobClass,
55
+ jobArgs,
56
+ name: `Background job inline mode: ${JobClass.jobName()}`
57
+ });
58
+ }
59
+ catch (error) {
60
+ if (error instanceof BackgroundJobRescheduleSignal) {
61
+ throw new Error("rescheduleIn is not supported in inline mode", { cause: error });
62
+ }
63
+ throw error;
64
+ }
65
+ return inlineJobId();
66
+ }
67
+ const client = configuration.getEnvironmentHandler().backgroundJobsClient({ configuration });
68
+ return await client.enqueue({
69
+ jobName: JobClass.jobName(),
70
+ args: jobArgs,
71
+ options: JobClass._withQueue(jobOptions)
72
+ });
73
+ }
74
+ /**
75
+ * Replaces a stable durable schedule in background mode.
76
+ * @param {object} args - Replacement request.
77
+ * @param {typeof import("./platform-job.js").default} args.JobClass - Job class.
78
+ * @param {string} args.scheduleKey - Stable schedule key.
79
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.jobArgs - Job arguments.
80
+ * @param {import("./types.js").BackgroundJobOptions | undefined} args.jobOptions - Job options.
81
+ * @returns {Promise<import("./types.js").BackgroundJobReplacementResult>} - Replacement result.
82
+ */
83
+ export async function replaceScheduledBackgroundJob({ JobClass, scheduleKey, jobArgs, jobOptions }) {
84
+ const configuration = currentConfiguration();
85
+ return await replaceScheduledBackgroundJobForConfiguration({ configuration, JobClass, scheduleKey, jobArgs, jobOptions });
86
+ }
87
+ /**
88
+ * Replaces a stable schedule using an explicitly resolved configuration.
89
+ * @param {object} args - Replacement request.
90
+ * @param {import("../configuration.js").default} args.configuration - Configuration.
91
+ * @param {typeof import("./platform-job.js").default} args.JobClass - Job class.
92
+ * @param {string} args.scheduleKey - Stable schedule key.
93
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.jobArgs - Job arguments.
94
+ * @param {import("./types.js").BackgroundJobOptions | undefined} args.jobOptions - Job options.
95
+ * @returns {Promise<import("./types.js").BackgroundJobReplacementResult>} - Replacement result.
96
+ */
97
+ export async function replaceScheduledBackgroundJobForConfiguration({ configuration, JobClass, scheduleKey, jobArgs, jobOptions }) {
98
+ if (configuration.getBackgroundJobsConfig().mode === "inline") {
99
+ throw new Error("replaceScheduled is not supported in inline mode");
100
+ }
101
+ const client = configuration.getEnvironmentHandler().backgroundJobsClient({ configuration });
102
+ return await client.replaceScheduled({
103
+ scheduleKey,
104
+ jobName: JobClass.jobName(),
105
+ args: jobArgs,
106
+ options: JobClass._withQueue(jobOptions)
107
+ });
108
+ }
109
+ /**
110
+ * Cancels a stable durable schedule in background mode.
111
+ * @param {string} scheduleKey - Stable schedule key.
112
+ * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Cancellation result.
113
+ */
114
+ export async function cancelScheduledBackgroundJob(scheduleKey) {
115
+ const configuration = currentConfiguration();
116
+ return await cancelScheduledBackgroundJobForConfiguration({ configuration, scheduleKey });
117
+ }
118
+ /**
119
+ * Cancels a stable schedule using an explicitly resolved configuration.
120
+ * @param {object} args - Cancellation request.
121
+ * @param {import("../configuration.js").default} args.configuration - Configuration.
122
+ * @param {string} args.scheduleKey - Stable logical schedule key.
123
+ * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Cancellation result.
124
+ */
125
+ export async function cancelScheduledBackgroundJobForConfiguration({ configuration, scheduleKey }) {
126
+ if (configuration.getBackgroundJobsConfig().mode === "inline") {
127
+ throw new Error("cancelScheduled is not supported in inline mode");
128
+ }
129
+ const client = configuration.getEnvironmentHandler().backgroundJobsClient({ configuration });
130
+ return await client.cancelScheduled({ scheduleKey });
131
+ }
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvcnVudGltZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDaEUsT0FBTyxvQkFBb0IsTUFBTSxrQkFBa0IsQ0FBQTtBQUNuRCxPQUFPLDZCQUE2QixNQUFNLHdCQUF3QixDQUFBO0FBRWxFLElBQUkseUJBQXlCLEdBQUcsQ0FBQyxDQUFBO0FBRWpDOzs7O0dBSUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLE9BQU87SUFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUE7SUFFOUMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLFdBQVcsQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUM1RixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsV0FBVztJQUNsQix5QkFBeUIsRUFBRSxDQUFBO0lBQzNCLE9BQU8sVUFBVSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUkseUJBQXlCLEVBQUUsQ0FBQTtBQUM1RCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQUMsRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQztJQUN4RSxNQUFNLGFBQWEsR0FBRyxvQkFBb0IsRUFBRSxDQUFBO0lBRTVDLE9BQU8sTUFBTSxvQ0FBb0MsQ0FBQyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7QUFDbkcsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQ0FBb0MsQ0FBQyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQztJQUV2RyxJQUFJLGFBQWEsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5RCxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNqQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDMUIsTUFBTSxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFDLENBQUMsQ0FBQTtRQUVoRSxJQUFJLENBQUM7WUFDSCxNQUFNLG9CQUFvQixDQUFDO2dCQUN6QixhQUFhO2dCQUNiLFFBQVE7Z0JBQ1IsT0FBTztnQkFDUCxJQUFJLEVBQUUsK0JBQStCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRTthQUMxRCxDQUFDLENBQUE7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxZQUFZLDZCQUE2QixFQUFFLENBQUM7Z0JBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLEVBQUUsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtZQUNqRixDQUFDO1lBRUQsTUFBTSxLQUFLLENBQUE7UUFDYixDQUFDO1FBRUQsT0FBTyxXQUFXLEVBQUUsQ0FBQTtJQUN0QixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO0lBRTFGLE9BQU8sTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzFCLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQzNCLElBQUksRUFBRSxPQUFPO1FBQ2IsT0FBTyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO0tBQ3pDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsNkJBQTZCLENBQUMsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUM7SUFDOUYsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQTtJQUU1QyxPQUFPLE1BQU0sNkNBQTZDLENBQUMsRUFBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtBQUN6SCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSw2Q0FBNkMsQ0FBQyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUM7SUFFN0gsSUFBSSxhQUFhLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7SUFFMUYsT0FBTyxNQUFNLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNuQyxXQUFXO1FBQ1gsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUU7UUFDM0IsSUFBSSxFQUFFLE9BQU87UUFDYixPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7S0FDekMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLDRCQUE0QixDQUFDLFdBQVc7SUFDNUQsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQTtJQUU1QyxPQUFPLE1BQU0sNENBQTRDLENBQUMsRUFBQyxhQUFhLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtBQUN6RixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSw0Q0FBNEMsQ0FBQyxFQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUM7SUFFN0YsSUFBSSxhQUFhLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFBO0lBQ3BFLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7SUFFMUYsT0FBTyxNQUFNLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFBO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjdXJyZW50Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4uL2N1cnJlbnQtY29uZmlndXJhdGlvbi5qc1wiXG5pbXBvcnQgcGVyZm9ybUJhY2tncm91bmRKb2IgZnJvbSBcIi4vcGVyZm9ybS1qb2IuanNcIlxuaW1wb3J0IEJhY2tncm91bmRKb2JSZXNjaGVkdWxlU2lnbmFsIGZyb20gXCIuL3Jlc2NoZWR1bGUtc2lnbmFsLmpzXCJcblxubGV0IGlubGluZVBlcmZvcm1hbmNlU2VxdWVuY2UgPSAwXG5cbi8qKlxuICogUmVqZWN0cyBvcHRpb25zIHdob3NlIHNlbWFudGljcyByZXF1aXJlIGR1cmFibGUgcXVldWUgc3RhdGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnMgfCB1bmRlZmluZWR9IG9wdGlvbnMgLSBSZXF1ZXN0ZWQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUlubGluZU9wdGlvbnMob3B0aW9ucykge1xuICBjb25zdCBvcHRpb25OYW1lcyA9IE9iamVjdC5rZXlzKG9wdGlvbnMgfHwge30pXG5cbiAgaWYgKG9wdGlvbk5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJhY2tncm91bmQgam9iIG9wdGlvbiAke29wdGlvbk5hbWVzWzBdfSBpcyBub3Qgc3VwcG9ydGVkIGluIGlubGluZSBtb2RlYClcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbiBlcGhlbWVyYWwgaW5saW5lIHBlcmZvcm1hbmNlIGlkLlxuICogQHJldHVybnMge3N0cmluZ30gLSBQZXJmb3JtYW5jZSBpZC5cbiAqL1xuZnVuY3Rpb24gaW5saW5lSm9iSWQoKSB7XG4gIGlubGluZVBlcmZvcm1hbmNlU2VxdWVuY2UrK1xuICByZXR1cm4gYGlubGluZS0ke0RhdGUubm93KCl9LSR7aW5saW5lUGVyZm9ybWFuY2VTZXF1ZW5jZX1gXG59XG5cbi8qKlxuICogRW5xdWV1ZXMgZHVyYWJseSBpbiBiYWNrZ3JvdW5kIG1vZGUgb3IgcGVyZm9ybXMgaW1tZWRpYXRlbHkgaW4gaW5saW5lIG1vZGUuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEVucXVldWUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4vcGxhdGZvcm0tam9iLmpzXCIpLmRlZmF1bHR9IGFyZ3MuSm9iQ2xhc3MgLSBKb2IgY2xhc3MuXG4gKiBAcGFyYW0ge0FycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gYXJncy5qb2JBcmdzIC0gSm9iIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iT3B0aW9ucyB8IHVuZGVmaW5lZH0gYXJncy5qb2JPcHRpb25zIC0gSm9iIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIER1cmFibGUgam9iIGlkIG9yIGVwaGVtZXJhbCBpbmxpbmUgcGVyZm9ybWFuY2UgaWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnF1ZXVlQmFja2dyb3VuZEpvYih7Sm9iQ2xhc3MsIGpvYkFyZ3MsIGpvYk9wdGlvbnN9KSB7XG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBjdXJyZW50Q29uZmlndXJhdGlvbigpXG5cbiAgcmV0dXJuIGF3YWl0IGVucXVldWVCYWNrZ3JvdW5kSm9iRm9yQ29uZmlndXJhdGlvbih7Y29uZmlndXJhdGlvbiwgSm9iQ2xhc3MsIGpvYkFyZ3MsIGpvYk9wdGlvbnN9KVxufVxuXG4vKipcbiAqIEVucXVldWVzIHVzaW5nIGFuIGV4cGxpY2l0bHkgcmVzb2x2ZWQgY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gRW5xdWV1ZSByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuL3BsYXRmb3JtLWpvYi5qc1wiKS5kZWZhdWx0fSBhcmdzLkpvYkNsYXNzIC0gSm9iIGNsYXNzLlxuICogQHBhcmFtIHtBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IGFyZ3Muam9iQXJncyAtIEpvYiBhcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnMgfCB1bmRlZmluZWR9IGFyZ3Muam9iT3B0aW9ucyAtIEpvYiBvcHRpb25zLlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBEdXJhYmxlIGpvYiBpZCBvciBlcGhlbWVyYWwgaW5saW5lIHBlcmZvcm1hbmNlIGlkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5xdWV1ZUJhY2tncm91bmRKb2JGb3JDb25maWd1cmF0aW9uKHtjb25maWd1cmF0aW9uLCBKb2JDbGFzcywgam9iQXJncywgam9iT3B0aW9uc30pIHtcblxuICBpZiAoY29uZmlndXJhdGlvbi5nZXRCYWNrZ3JvdW5kSm9ic0NvbmZpZygpLm1vZGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICB2YWxpZGF0ZUlubGluZU9wdGlvbnMoam9iT3B0aW9ucylcbiAgICBjb25maWd1cmF0aW9uLnNldEN1cnJlbnQoKVxuICAgIGF3YWl0IGNvbmZpZ3VyYXRpb24uaW5pdGlhbGl6ZSh7dHlwZTogXCJiYWNrZ3JvdW5kLWpvYnMtaW5saW5lXCJ9KVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBlcmZvcm1CYWNrZ3JvdW5kSm9iKHtcbiAgICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgICAgSm9iQ2xhc3MsXG4gICAgICAgIGpvYkFyZ3MsXG4gICAgICAgIG5hbWU6IGBCYWNrZ3JvdW5kIGpvYiBpbmxpbmUgbW9kZTogJHtKb2JDbGFzcy5qb2JOYW1lKCl9YFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQmFja2dyb3VuZEpvYlJlc2NoZWR1bGVTaWduYWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVzY2hlZHVsZUluIGlzIG5vdCBzdXBwb3J0ZWQgaW4gaW5saW5lIG1vZGVcIiwge2NhdXNlOiBlcnJvcn0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIGlubGluZUpvYklkKClcbiAgfVxuXG4gIGNvbnN0IGNsaWVudCA9IGNvbmZpZ3VyYXRpb24uZ2V0RW52aXJvbm1lbnRIYW5kbGVyKCkuYmFja2dyb3VuZEpvYnNDbGllbnQoe2NvbmZpZ3VyYXRpb259KVxuXG4gIHJldHVybiBhd2FpdCBjbGllbnQuZW5xdWV1ZSh7XG4gICAgam9iTmFtZTogSm9iQ2xhc3Muam9iTmFtZSgpLFxuICAgIGFyZ3M6IGpvYkFyZ3MsXG4gICAgb3B0aW9uczogSm9iQ2xhc3MuX3dpdGhRdWV1ZShqb2JPcHRpb25zKVxuICB9KVxufVxuXG4vKipcbiAqIFJlcGxhY2VzIGEgc3RhYmxlIGR1cmFibGUgc2NoZWR1bGUgaW4gYmFja2dyb3VuZCBtb2RlLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBSZXBsYWNlbWVudCByZXF1ZXN0LlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi9wbGF0Zm9ybS1qb2IuanNcIikuZGVmYXVsdH0gYXJncy5Kb2JDbGFzcyAtIEpvYiBjbGFzcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnNjaGVkdWxlS2V5IC0gU3RhYmxlIHNjaGVkdWxlIGtleS5cbiAqIEBwYXJhbSB7QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBhcmdzLmpvYkFyZ3MgLSBKb2IgYXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JPcHRpb25zIHwgdW5kZWZpbmVkfSBhcmdzLmpvYk9wdGlvbnMgLSBKb2Igb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlJlcGxhY2VtZW50UmVzdWx0Pn0gLSBSZXBsYWNlbWVudCByZXN1bHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlU2NoZWR1bGVkQmFja2dyb3VuZEpvYih7Sm9iQ2xhc3MsIHNjaGVkdWxlS2V5LCBqb2JBcmdzLCBqb2JPcHRpb25zfSkge1xuICBjb25zdCBjb25maWd1cmF0aW9uID0gY3VycmVudENvbmZpZ3VyYXRpb24oKVxuXG4gIHJldHVybiBhd2FpdCByZXBsYWNlU2NoZWR1bGVkQmFja2dyb3VuZEpvYkZvckNvbmZpZ3VyYXRpb24oe2NvbmZpZ3VyYXRpb24sIEpvYkNsYXNzLCBzY2hlZHVsZUtleSwgam9iQXJncywgam9iT3B0aW9uc30pXG59XG5cbi8qKlxuICogUmVwbGFjZXMgYSBzdGFibGUgc2NoZWR1bGUgdXNpbmcgYW4gZXhwbGljaXRseSByZXNvbHZlZCBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBSZXBsYWNlbWVudCByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuL3BsYXRmb3JtLWpvYi5qc1wiKS5kZWZhdWx0fSBhcmdzLkpvYkNsYXNzIC0gSm9iIGNsYXNzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muc2NoZWR1bGVLZXkgLSBTdGFibGUgc2NoZWR1bGUga2V5LlxuICogQHBhcmFtIHtBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IGFyZ3Muam9iQXJncyAtIEpvYiBhcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnMgfCB1bmRlZmluZWR9IGFyZ3Muam9iT3B0aW9ucyAtIEpvYiBvcHRpb25zLlxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUmVwbGFjZW1lbnRSZXN1bHQ+fSAtIFJlcGxhY2VtZW50IHJlc3VsdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRm9yQ29uZmlndXJhdGlvbih7Y29uZmlndXJhdGlvbiwgSm9iQ2xhc3MsIHNjaGVkdWxlS2V5LCBqb2JBcmdzLCBqb2JPcHRpb25zfSkge1xuXG4gIGlmIChjb25maWd1cmF0aW9uLmdldEJhY2tncm91bmRKb2JzQ29uZmlnKCkubW9kZSA9PT0gXCJpbmxpbmVcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcInJlcGxhY2VTY2hlZHVsZWQgaXMgbm90IHN1cHBvcnRlZCBpbiBpbmxpbmUgbW9kZVwiKVxuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKS5iYWNrZ3JvdW5kSm9ic0NsaWVudCh7Y29uZmlndXJhdGlvbn0pXG5cbiAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXBsYWNlU2NoZWR1bGVkKHtcbiAgICBzY2hlZHVsZUtleSxcbiAgICBqb2JOYW1lOiBKb2JDbGFzcy5qb2JOYW1lKCksXG4gICAgYXJnczogam9iQXJncyxcbiAgICBvcHRpb25zOiBKb2JDbGFzcy5fd2l0aFF1ZXVlKGpvYk9wdGlvbnMpXG4gIH0pXG59XG5cbi8qKlxuICogQ2FuY2VscyBhIHN0YWJsZSBkdXJhYmxlIHNjaGVkdWxlIGluIGJhY2tncm91bmQgbW9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlZHVsZUtleSAtIFN0YWJsZSBzY2hlZHVsZSBrZXkuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JDYW5jZWxsYXRpb25SZXN1bHQ+fSAtIENhbmNlbGxhdGlvbiByZXN1bHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYW5jZWxTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iKHNjaGVkdWxlS2V5KSB7XG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBjdXJyZW50Q29uZmlndXJhdGlvbigpXG5cbiAgcmV0dXJuIGF3YWl0IGNhbmNlbFNjaGVkdWxlZEJhY2tncm91bmRKb2JGb3JDb25maWd1cmF0aW9uKHtjb25maWd1cmF0aW9uLCBzY2hlZHVsZUtleX0pXG59XG5cbi8qKlxuICogQ2FuY2VscyBhIHN0YWJsZSBzY2hlZHVsZSB1c2luZyBhbiBleHBsaWNpdGx5IHJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIENhbmNlbGxhdGlvbiByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zY2hlZHVsZUtleSAtIFN0YWJsZSBsb2dpY2FsIHNjaGVkdWxlIGtleS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkNhbmNlbGxhdGlvblJlc3VsdD59IC0gQ2FuY2VsbGF0aW9uIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhbmNlbFNjaGVkdWxlZEJhY2tncm91bmRKb2JGb3JDb25maWd1cmF0aW9uKHtjb25maWd1cmF0aW9uLCBzY2hlZHVsZUtleX0pIHtcblxuICBpZiAoY29uZmlndXJhdGlvbi5nZXRCYWNrZ3JvdW5kSm9ic0NvbmZpZygpLm1vZGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjYW5jZWxTY2hlZHVsZWQgaXMgbm90IHN1cHBvcnRlZCBpbiBpbmxpbmUgbW9kZVwiKVxuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKS5iYWNrZ3JvdW5kSm9ic0NsaWVudCh7Y29uZmlndXJhdGlvbn0pXG5cbiAgcmV0dXJuIGF3YWl0IGNsaWVudC5jYW5jZWxTY2hlZHVsZWQoe3NjaGVkdWxlS2V5fSlcbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import BackgroundJobsStore from "./store.js";
2
+ /** Built-in SQL adapter preserving the existing durable store implementation. */
3
+ export default class SqlBackgroundJobsAdapter extends BackgroundJobsStore {
4
+ /**
5
+ * Ensures the built-in SQL schema during migration.
6
+ * @param {{dbs: Record<string, import("../database/drivers/base.js").default>}} args - Migrated databases.
7
+ * @returns {Promise<void>} - Resolves when the SQL schema is present.
8
+ */
9
+ ensureFrameworkSchema({ dbs }: {
10
+ dbs: Record<string, import("../database/drivers/base.js").default>;
11
+ }): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=sql-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-adapter.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/sql-adapter.js"],"names":[],"mappings":"AAEA,OAAO,mBAAmB,MAAM,YAAY,CAAA;AAE5C,iFAAiF;AACjF,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,mBAAmB;IACvE;;;;OAIG;IACG,qBAAqB,CAAC,EAAC,GAAG,EAAC,EAHtB;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,OAAO,CAAC,CAAA;KAG7C,GAFpB,OAAO,CAAC,IAAI,CAAC,CASzB;CACF"}
@@ -0,0 +1,18 @@
1
+ // @ts-check
2
+ import BackgroundJobsStore from "./store.js";
3
+ /** Built-in SQL adapter preserving the existing durable store implementation. */
4
+ export default class SqlBackgroundJobsAdapter extends BackgroundJobsStore {
5
+ /**
6
+ * Ensures the built-in SQL schema during migration.
7
+ * @param {{dbs: Record<string, import("../database/drivers/base.js").default>}} args - Migrated databases.
8
+ * @returns {Promise<void>} - Resolves when the SQL schema is present.
9
+ */
10
+ async ensureFrameworkSchema({ dbs }) {
11
+ const databaseIdentifier = this.getDatabaseIdentifier() || "default";
12
+ const frameworkDb = dbs[databaseIdentifier];
13
+ if (!frameworkDb)
14
+ return;
15
+ await this.ensureSchema(frameworkDb);
16
+ }
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2dyb3VuZC1qb2JzL3NxbC1hZGFwdGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLG1CQUFtQixNQUFNLFlBQVksQ0FBQTtBQUU1QyxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE9BQU8sT0FBTyx3QkFBeUIsU0FBUSxtQkFBbUI7SUFDdkU7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDLEdBQUcsRUFBQztRQUMvQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLFNBQVMsQ0FBQTtRQUNwRSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUUzQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU07UUFFeEIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQmFja2dyb3VuZEpvYnNTdG9yZSBmcm9tIFwiLi9zdG9yZS5qc1wiXG5cbi8qKiBCdWlsdC1pbiBTUUwgYWRhcHRlciBwcmVzZXJ2aW5nIHRoZSBleGlzdGluZyBkdXJhYmxlIHN0b3JlIGltcGxlbWVudGF0aW9uLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3FsQmFja2dyb3VuZEpvYnNBZGFwdGVyIGV4dGVuZHMgQmFja2dyb3VuZEpvYnNTdG9yZSB7XG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoZSBidWlsdC1pbiBTUUwgc2NoZW1hIGR1cmluZyBtaWdyYXRpb24uXG4gICAqIEBwYXJhbSB7e2RiczogUmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fX0gYXJncyAtIE1pZ3JhdGVkIGRhdGFiYXNlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiB0aGUgU1FMIHNjaGVtYSBpcyBwcmVzZW50LlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlRnJhbWV3b3JrU2NoZW1hKHtkYnN9KSB7XG4gICAgY29uc3QgZGF0YWJhc2VJZGVudGlmaWVyID0gdGhpcy5nZXREYXRhYmFzZUlkZW50aWZpZXIoKSB8fCBcImRlZmF1bHRcIlxuICAgIGNvbnN0IGZyYW1ld29ya0RiID0gZGJzW2RhdGFiYXNlSWRlbnRpZmllcl1cblxuICAgIGlmICghZnJhbWV3b3JrRGIpIHJldHVyblxuXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVTY2hlbWEoZnJhbWV3b3JrRGIpXG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import BackgroundJobsAdapter from "./adapter.js";
1
2
  import Logger from "../logger.js";
2
3
  export type PreparedBackgroundJob = {
3
4
  /**
@@ -43,7 +44,7 @@ export type PreparedBackgroundJob = {
43
44
  };
44
45
  export declare const BACKGROUND_JOB_COUNTS_CHANNEL = "velocious-background-job-counts";
45
46
  export declare const BACKGROUND_JOB_COUNT_BUCKETS: string[];
46
- export default class BackgroundJobsStore {
47
+ export default class BackgroundJobsStore extends BackgroundJobsAdapter {
47
48
  configuration: import("../configuration.js").default;
48
49
  databaseIdentifier: string | undefined;
49
50
  logger: Logger;