@camstack/addon-training 0.1.6 → 0.1.8

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 (43) hide show
  1. package/dist/MaskShapeCanvas-Kfg9dl6B.mjs +686 -0
  2. package/dist/{MotionZonesSettings-DPtcv80q.mjs → MotionZonesSettings-DKtYdHUO.mjs} +101 -119
  3. package/dist/{PrivacyMaskSettings-Wsn5QL0_.mjs → PrivacyMaskSettings-BvLUVz86.mjs} +45 -70
  4. package/dist/ReactKonva-DGuYUN0L.mjs +5416 -0
  5. package/dist/{SceneMonitorEditor-BlMwyiH8.mjs → SceneMonitorEditor-rFYGkGHV.mjs} +82 -82
  6. package/dist/_stub.js +28225 -12866
  7. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-Cbrdn9ib.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-B3xXUcaU.mjs} +3 -3
  8. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C7dks3FG.mjs +26 -0
  9. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DpjirGmB.mjs +89 -0
  10. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_trpc_mf_1_client__loadShare__.js-CFCVuRAs.mjs +58 -0
  11. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_trpc_mf_1_react_mf_2_query__loadShare__.js-BkvDudqY.mjs +62 -0
  12. package/dist/{_virtual_mf___mfe_internal__addon_training_page__loadShare__react__loadShare__.js-BT_wL8s3.mjs → _virtual_mf___mfe_internal__addon_training_page__loadShare__react__loadShare__.js-DeDbF7NI.mjs} +1 -1
  13. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DnrbBvrw.mjs +34 -0
  14. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_2_dom__loadShare__.js-DAZkHxxU.mjs +45 -0
  15. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-CHqN9NLt.mjs +34 -0
  16. package/dist/addon-training.css +1 -1
  17. package/dist/{dist-BhCRZEE4.js → dist-DVDBSrjw.js} +270 -146
  18. package/dist/{dist-Cqa2fHNk.mjs → dist-Phot2UwD.mjs} +271 -141
  19. package/dist/grid-2x2-Bl3xw1w7.mjs +21 -0
  20. package/dist/{hostInit-BI98RYIm.mjs → hostInit-BAGO4XYA.mjs} +2 -2
  21. package/dist/index.js +100 -39
  22. package/dist/index.mjs +99 -38
  23. package/dist/lib-CVGFTwe0.mjs +7770 -0
  24. package/dist/orchestrator/training.addon.js +376 -222
  25. package/dist/orchestrator/training.addon.mjs +376 -222
  26. package/dist/{player-overlays-BX3obOMu.mjs → player-overlays-BT-6fK9N.mjs} +26 -7
  27. package/dist/providers/modal/training-modal.addon.js +361 -155
  28. package/dist/providers/modal/training-modal.addon.mjs +364 -158
  29. package/dist/remoteEntry.js +1 -1
  30. package/dist/{responsive-CdDIJCpI.mjs → responsive-Dy5RAD1s.mjs} +42 -38
  31. package/dist/{scene-monitor-copy-5u5w3K-Y.mjs → scene-monitor-copy-7HImRbA5.mjs} +4 -4
  32. package/dist/{square-C-P1-89Q.mjs → square-DoPBhbZN.mjs} +29 -4
  33. package/dist/{trash-2-BikGYiWf.mjs → trash-2-BwunNgLf.mjs} +1 -1
  34. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-DGLUs0o6.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-gU49KvnZ.mjs} +399 -390
  35. package/package.json +1 -1
  36. package/dist/MaskShapeCanvas-BokARvOj.mjs +0 -13806
  37. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BkKuzhOJ.mjs +0 -26
  38. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CaB1jnkt.mjs +0 -25
  39. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_trpc_mf_1_client__loadShare__.js-B3rryujf.mjs +0 -25
  40. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_trpc_mf_1_react_mf_2_query__loadShare__.js-nL4MGFRP.mjs +0 -26
  41. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DDBEvLdo.mjs +0 -26
  42. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_2_dom__loadShare__.js-i_pnGDxd.mjs +0 -25
  43. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-gTIQrhKs.mjs +0 -25
@@ -0,0 +1,21 @@
1
+ import { g as e } from "./responsive-Dy5RAD1s.mjs";
2
+ var t = e("grid-2x2", [
3
+ ["path", {
4
+ d: "M12 3v18",
5
+ key: "108xh3"
6
+ }],
7
+ ["path", {
8
+ d: "M3 12h18",
9
+ key: "1i2n21"
10
+ }],
11
+ ["rect", {
12
+ x: "3",
13
+ y: "3",
14
+ width: "18",
15
+ height: "18",
16
+ rx: "2",
17
+ key: "h1oib"
18
+ }]
19
+ ]);
20
+ //#endregion
21
+ export { t };
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.339",
39
+ version: "1.2.340",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.259",
84
+ version: "1.2.260",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
package/dist/index.js CHANGED
@@ -1,18 +1,27 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("./dist-BhCRZEE4.js");
2
+ require("./dist-DVDBSrjw.js");
3
3
  const require_orchestrator_training_addon = require("./orchestrator/training.addon.js");
4
4
  const require_providers_modal_training_modal_addon = require("./providers/modal/training-modal.addon.js");
5
5
  //#region src/providers/fake/fake-provider.ts
6
+ var FAKE_TYPE_ID = "fake";
7
+ var FAKE_ICON_ASSET = "assets/training/icon.svg";
8
+ var FAKE_DEFAULT_ENTRY_ID = "fake-default";
6
9
  var FakeTrainingProvider = class {
7
10
  addonId;
11
+ defaultEntryId;
8
12
  jobs = /* @__PURE__ */ new Map();
9
13
  calls = [];
10
- configured;
14
+ entries;
11
15
  options;
12
16
  constructor(options) {
13
17
  this.options = options;
14
18
  this.addonId = options.addonId ?? "training-fake";
15
- this.configured = options.configured ?? true;
19
+ this.defaultEntryId = FAKE_DEFAULT_ENTRY_ID;
20
+ this.entries = options.entries ? [...options.entries] : [{
21
+ entryId: FAKE_DEFAULT_ENTRY_ID,
22
+ name: "Default",
23
+ configured: options.configured ?? true
24
+ }];
16
25
  }
17
26
  advance(jobKey, state, exitCode) {
18
27
  const job = this.require(jobKey);
@@ -44,41 +53,52 @@ var FakeTrainingProvider = class {
44
53
  }
45
54
  /** A job started outside our records (a crashed hub, a second hub on the account). */
46
55
  plantOrphan(jobKey) {
47
- this.jobs.set(jobKey, this.blank(jobKey, "running"));
56
+ this.jobs.set(jobKey, this.blank(jobKey, this.defaultEntryId, "running"));
48
57
  }
49
- describe = async () => [{
50
- addonId: this.addonId,
51
- kind: "fake",
58
+ describe = async () => this.entries.map((entry) => this.descriptorOf(entry));
59
+ describeTypes = async () => [{
60
+ typeId: FAKE_TYPE_ID,
52
61
  label: "Fake cloud",
53
- gpuTypes: [{
54
- id: "L4",
55
- label: "L4",
56
- usdPerHour: .8,
57
- vramGb: 24
58
- }],
59
- regions: [{
60
- id: "",
61
- label: "Any",
62
- priceMultiplier: 1
63
- }],
64
- maxDatasetBytes: 10 * 1024 ** 3,
65
- maxRuntimeSec: 24 * 3600,
66
- dataResidencyNote: "The fake keeps everything in memory.",
67
- configured: this.configured,
68
- defaults: {
69
- gpuType: "L4",
70
- region: "",
71
- costCapUsd: this.options.costCapUsd ?? 5,
72
- maxRuntimeSec: 4 * 3600,
73
- failedDatasetGraceHours: this.options.failedDatasetGraceHours ?? 24
74
- }
62
+ iconAsset: FAKE_ICON_ASSET,
63
+ addonId: this.addonId
75
64
  }];
76
- validateCredentials = async () => this.configured ? {
77
- ok: true,
78
- account: "fake-workspace"
79
- } : {
80
- ok: false,
81
- reason: "missing"
65
+ listEntries = async () => this.entries.map((entry) => ({
66
+ entryId: entry.entryId,
67
+ typeId: FAKE_TYPE_ID,
68
+ name: entry.name,
69
+ addonId: this.addonId,
70
+ configured: entry.configured
71
+ }));
72
+ createEntry = async (input) => {
73
+ if (input.typeId !== "fake") throw new Error(`unknown type "${input.typeId}"`);
74
+ const entryId = `fake-${String(this.entries.length + 1)}`;
75
+ this.entries.push({
76
+ entryId,
77
+ name: input.name,
78
+ configured: false
79
+ });
80
+ return { entryId };
81
+ };
82
+ deleteEntry = async (input) => {
83
+ const before = this.entries.length;
84
+ this.entries = this.entries.filter((e) => e.entryId !== input.entryId);
85
+ if (this.entries.length === before) throw new Error(`unknown entry "${input.entryId}"`);
86
+ return { ok: true };
87
+ };
88
+ validateCredentials = async (input) => {
89
+ const entry = this.entries.find((e) => e.entryId === input.entryId);
90
+ if (entry === void 0) return {
91
+ ok: false,
92
+ reason: "missing",
93
+ detail: "unknown entry"
94
+ };
95
+ return entry.configured ? {
96
+ ok: true,
97
+ account: "fake-workspace"
98
+ } : {
99
+ ok: false,
100
+ reason: "missing"
101
+ };
82
102
  };
83
103
  estimateJob = async (input) => ({
84
104
  usdLow: input.gpuSecondsLow / 3600 * .8,
@@ -86,9 +106,10 @@ var FakeTrainingProvider = class {
86
106
  notes: []
87
107
  });
88
108
  uploadDataset = async (input) => {
109
+ this.requireEntry(input.entryId);
89
110
  this.calls.push(`upload:${input.jobKey}`);
90
111
  const taken = await this.options.peer.take(input.ticket);
91
- const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, "pending");
112
+ const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, input.entryId, "pending");
92
113
  job.dataset = {
93
114
  bytes: taken.bytes.length,
94
115
  sha256: taken.sha256
@@ -101,8 +122,9 @@ var FakeTrainingProvider = class {
101
122
  };
102
123
  };
103
124
  submitJob = async (input) => {
125
+ this.requireEntry(input.entryId);
104
126
  this.calls.push(`submit:${input.jobKey}`);
105
- const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, "pending");
127
+ const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, input.entryId, "pending");
106
128
  job.submits += 1;
107
129
  if (job.jobSpecJson === null) job.jobSpecJson = input.jobSpecJson;
108
130
  this.jobs.set(input.jobKey, job);
@@ -149,15 +171,21 @@ var FakeTrainingProvider = class {
149
171
  job.datasetDeleted = true;
150
172
  return { deleted: [`cst-ds-${input.jobKey}`] };
151
173
  };
152
- listJobs = async () => [...this.jobs.values()].filter((j) => !j.datasetDeleted).map((j) => this.status(j));
174
+ listJobs = async (input) => [...this.jobs.values()].filter((j) => !j.datasetDeleted).filter((j) => input.entryId === void 0 || j.entryId === input.entryId).map((j) => this.status(j));
175
+ requireEntry(entryId) {
176
+ const entry = this.entries.find((e) => e.entryId === entryId);
177
+ if (entry === void 0) throw new Error(`fake provider: unknown entry ${entryId}`);
178
+ return entry;
179
+ }
153
180
  require(jobKey) {
154
181
  const job = this.jobs.get(jobKey);
155
182
  if (job === void 0) throw new Error(`fake provider: no job ${jobKey}`);
156
183
  return job;
157
184
  }
158
- blank(jobKey, state) {
185
+ blank(jobKey, entryId, state) {
159
186
  return {
160
187
  jobKey,
188
+ entryId,
161
189
  state,
162
190
  submits: 0,
163
191
  startedAt: state === "running" ? this.options.now() : null,
@@ -172,6 +200,39 @@ var FakeTrainingProvider = class {
172
200
  bundle: null
173
201
  };
174
202
  }
203
+ descriptorOf(entry) {
204
+ return {
205
+ addonId: this.addonId,
206
+ entryId: entry.entryId,
207
+ typeId: FAKE_TYPE_ID,
208
+ name: entry.name,
209
+ iconAsset: FAKE_ICON_ASSET,
210
+ kind: FAKE_TYPE_ID,
211
+ label: "Fake cloud",
212
+ gpuTypes: [{
213
+ id: "L4",
214
+ label: "L4",
215
+ usdPerHour: .8,
216
+ vramGb: 24
217
+ }],
218
+ regions: [{
219
+ id: "",
220
+ label: "Any",
221
+ priceMultiplier: 1
222
+ }],
223
+ maxDatasetBytes: 10 * 1024 ** 3,
224
+ maxRuntimeSec: 24 * 3600,
225
+ dataResidencyNote: "The fake keeps everything in memory.",
226
+ configured: entry.configured,
227
+ defaults: {
228
+ gpuType: "L4",
229
+ region: "",
230
+ costCapUsd: this.options.costCapUsd ?? 5,
231
+ maxRuntimeSec: 4 * 3600,
232
+ failedDatasetGraceHours: this.options.failedDatasetGraceHours ?? 24
233
+ }
234
+ };
235
+ }
175
236
  status(job) {
176
237
  return {
177
238
  jobKey: job.jobKey,
package/dist/index.mjs CHANGED
@@ -1,16 +1,25 @@
1
1
  import { TrainingAddon } from "./orchestrator/training.addon.mjs";
2
2
  import { TrainingModalAddon } from "./providers/modal/training-modal.addon.mjs";
3
3
  //#region src/providers/fake/fake-provider.ts
4
+ var FAKE_TYPE_ID = "fake";
5
+ var FAKE_ICON_ASSET = "assets/training/icon.svg";
6
+ var FAKE_DEFAULT_ENTRY_ID = "fake-default";
4
7
  var FakeTrainingProvider = class {
5
8
  addonId;
9
+ defaultEntryId;
6
10
  jobs = /* @__PURE__ */ new Map();
7
11
  calls = [];
8
- configured;
12
+ entries;
9
13
  options;
10
14
  constructor(options) {
11
15
  this.options = options;
12
16
  this.addonId = options.addonId ?? "training-fake";
13
- this.configured = options.configured ?? true;
17
+ this.defaultEntryId = FAKE_DEFAULT_ENTRY_ID;
18
+ this.entries = options.entries ? [...options.entries] : [{
19
+ entryId: FAKE_DEFAULT_ENTRY_ID,
20
+ name: "Default",
21
+ configured: options.configured ?? true
22
+ }];
14
23
  }
15
24
  advance(jobKey, state, exitCode) {
16
25
  const job = this.require(jobKey);
@@ -42,41 +51,52 @@ var FakeTrainingProvider = class {
42
51
  }
43
52
  /** A job started outside our records (a crashed hub, a second hub on the account). */
44
53
  plantOrphan(jobKey) {
45
- this.jobs.set(jobKey, this.blank(jobKey, "running"));
54
+ this.jobs.set(jobKey, this.blank(jobKey, this.defaultEntryId, "running"));
46
55
  }
47
- describe = async () => [{
48
- addonId: this.addonId,
49
- kind: "fake",
56
+ describe = async () => this.entries.map((entry) => this.descriptorOf(entry));
57
+ describeTypes = async () => [{
58
+ typeId: FAKE_TYPE_ID,
50
59
  label: "Fake cloud",
51
- gpuTypes: [{
52
- id: "L4",
53
- label: "L4",
54
- usdPerHour: .8,
55
- vramGb: 24
56
- }],
57
- regions: [{
58
- id: "",
59
- label: "Any",
60
- priceMultiplier: 1
61
- }],
62
- maxDatasetBytes: 10 * 1024 ** 3,
63
- maxRuntimeSec: 24 * 3600,
64
- dataResidencyNote: "The fake keeps everything in memory.",
65
- configured: this.configured,
66
- defaults: {
67
- gpuType: "L4",
68
- region: "",
69
- costCapUsd: this.options.costCapUsd ?? 5,
70
- maxRuntimeSec: 4 * 3600,
71
- failedDatasetGraceHours: this.options.failedDatasetGraceHours ?? 24
72
- }
60
+ iconAsset: FAKE_ICON_ASSET,
61
+ addonId: this.addonId
73
62
  }];
74
- validateCredentials = async () => this.configured ? {
75
- ok: true,
76
- account: "fake-workspace"
77
- } : {
78
- ok: false,
79
- reason: "missing"
63
+ listEntries = async () => this.entries.map((entry) => ({
64
+ entryId: entry.entryId,
65
+ typeId: FAKE_TYPE_ID,
66
+ name: entry.name,
67
+ addonId: this.addonId,
68
+ configured: entry.configured
69
+ }));
70
+ createEntry = async (input) => {
71
+ if (input.typeId !== "fake") throw new Error(`unknown type "${input.typeId}"`);
72
+ const entryId = `fake-${String(this.entries.length + 1)}`;
73
+ this.entries.push({
74
+ entryId,
75
+ name: input.name,
76
+ configured: false
77
+ });
78
+ return { entryId };
79
+ };
80
+ deleteEntry = async (input) => {
81
+ const before = this.entries.length;
82
+ this.entries = this.entries.filter((e) => e.entryId !== input.entryId);
83
+ if (this.entries.length === before) throw new Error(`unknown entry "${input.entryId}"`);
84
+ return { ok: true };
85
+ };
86
+ validateCredentials = async (input) => {
87
+ const entry = this.entries.find((e) => e.entryId === input.entryId);
88
+ if (entry === void 0) return {
89
+ ok: false,
90
+ reason: "missing",
91
+ detail: "unknown entry"
92
+ };
93
+ return entry.configured ? {
94
+ ok: true,
95
+ account: "fake-workspace"
96
+ } : {
97
+ ok: false,
98
+ reason: "missing"
99
+ };
80
100
  };
81
101
  estimateJob = async (input) => ({
82
102
  usdLow: input.gpuSecondsLow / 3600 * .8,
@@ -84,9 +104,10 @@ var FakeTrainingProvider = class {
84
104
  notes: []
85
105
  });
86
106
  uploadDataset = async (input) => {
107
+ this.requireEntry(input.entryId);
87
108
  this.calls.push(`upload:${input.jobKey}`);
88
109
  const taken = await this.options.peer.take(input.ticket);
89
- const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, "pending");
110
+ const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, input.entryId, "pending");
90
111
  job.dataset = {
91
112
  bytes: taken.bytes.length,
92
113
  sha256: taken.sha256
@@ -99,8 +120,9 @@ var FakeTrainingProvider = class {
99
120
  };
100
121
  };
101
122
  submitJob = async (input) => {
123
+ this.requireEntry(input.entryId);
102
124
  this.calls.push(`submit:${input.jobKey}`);
103
- const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, "pending");
125
+ const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, input.entryId, "pending");
104
126
  job.submits += 1;
105
127
  if (job.jobSpecJson === null) job.jobSpecJson = input.jobSpecJson;
106
128
  this.jobs.set(input.jobKey, job);
@@ -147,15 +169,21 @@ var FakeTrainingProvider = class {
147
169
  job.datasetDeleted = true;
148
170
  return { deleted: [`cst-ds-${input.jobKey}`] };
149
171
  };
150
- listJobs = async () => [...this.jobs.values()].filter((j) => !j.datasetDeleted).map((j) => this.status(j));
172
+ listJobs = async (input) => [...this.jobs.values()].filter((j) => !j.datasetDeleted).filter((j) => input.entryId === void 0 || j.entryId === input.entryId).map((j) => this.status(j));
173
+ requireEntry(entryId) {
174
+ const entry = this.entries.find((e) => e.entryId === entryId);
175
+ if (entry === void 0) throw new Error(`fake provider: unknown entry ${entryId}`);
176
+ return entry;
177
+ }
151
178
  require(jobKey) {
152
179
  const job = this.jobs.get(jobKey);
153
180
  if (job === void 0) throw new Error(`fake provider: no job ${jobKey}`);
154
181
  return job;
155
182
  }
156
- blank(jobKey, state) {
183
+ blank(jobKey, entryId, state) {
157
184
  return {
158
185
  jobKey,
186
+ entryId,
159
187
  state,
160
188
  submits: 0,
161
189
  startedAt: state === "running" ? this.options.now() : null,
@@ -170,6 +198,39 @@ var FakeTrainingProvider = class {
170
198
  bundle: null
171
199
  };
172
200
  }
201
+ descriptorOf(entry) {
202
+ return {
203
+ addonId: this.addonId,
204
+ entryId: entry.entryId,
205
+ typeId: FAKE_TYPE_ID,
206
+ name: entry.name,
207
+ iconAsset: FAKE_ICON_ASSET,
208
+ kind: FAKE_TYPE_ID,
209
+ label: "Fake cloud",
210
+ gpuTypes: [{
211
+ id: "L4",
212
+ label: "L4",
213
+ usdPerHour: .8,
214
+ vramGb: 24
215
+ }],
216
+ regions: [{
217
+ id: "",
218
+ label: "Any",
219
+ priceMultiplier: 1
220
+ }],
221
+ maxDatasetBytes: 10 * 1024 ** 3,
222
+ maxRuntimeSec: 24 * 3600,
223
+ dataResidencyNote: "The fake keeps everything in memory.",
224
+ configured: entry.configured,
225
+ defaults: {
226
+ gpuType: "L4",
227
+ region: "",
228
+ costCapUsd: this.options.costCapUsd ?? 5,
229
+ maxRuntimeSec: 4 * 3600,
230
+ failedDatasetGraceHours: this.options.failedDatasetGraceHours ?? 24
231
+ }
232
+ };
233
+ }
173
234
  status(job) {
174
235
  return {
175
236
  jobKey: job.jobKey,