@sogni-ai/sogni-client 0.4.0-aplha.3 → 0.4.0-aplha.5
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/dist/Projects/Job.d.ts +20 -1
- package/dist/Projects/Job.js +72 -1
- package/dist/Projects/Job.js.map +1 -1
- package/dist/Projects/Project.d.ts +21 -3
- package/dist/Projects/Project.js +110 -2
- package/dist/Projects/Project.js.map +1 -1
- package/dist/Projects/index.d.ts +21 -3
- package/dist/Projects/index.js +29 -2
- package/dist/Projects/index.js.map +1 -1
- package/dist/Projects/types/RawProject.d.ts +87 -0
- package/dist/Projects/types/RawProject.js +3 -0
- package/dist/Projects/types/RawProject.js.map +1 -0
- package/dist/lib/DataEntity.d.ts +1 -0
- package/dist/lib/DataEntity.js +2 -0
- package/dist/lib/DataEntity.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/Projects/Job.ts +82 -1
- package/src/Projects/Project.ts +134 -5
- package/src/Projects/index.ts +33 -4
- package/src/Projects/types/RawProject.ts +121 -0
- package/src/lib/DataEntity.ts +3 -0
- package/src/version.ts +1 -1
package/dist/Projects/Job.d.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import DataEntity, { EntityEvents } from '../lib/DataEntity';
|
|
2
2
|
import ErrorData from '../types/ErrorData';
|
|
3
|
+
import { RawJob, RawProject } from './types/RawProject';
|
|
4
|
+
import ProjectsApi from './index';
|
|
5
|
+
import { Logger } from '../lib/DefaultLogger';
|
|
3
6
|
export type JobStatus = 'pending' | 'initiating' | 'processing' | 'completed' | 'failed' | 'canceled';
|
|
4
7
|
/**
|
|
5
8
|
* @inline
|
|
6
9
|
*/
|
|
7
10
|
export interface JobData {
|
|
8
11
|
id: string;
|
|
12
|
+
projectId: string;
|
|
9
13
|
status: JobStatus;
|
|
10
14
|
step: number;
|
|
11
15
|
stepCount: number;
|
|
@@ -22,13 +26,22 @@ export interface JobEventMap extends EntityEvents {
|
|
|
22
26
|
completed: string;
|
|
23
27
|
failed: ErrorData;
|
|
24
28
|
}
|
|
29
|
+
export interface JobOptions {
|
|
30
|
+
api: ProjectsApi;
|
|
31
|
+
logger: Logger;
|
|
32
|
+
}
|
|
25
33
|
declare class Job extends DataEntity<JobData, JobEventMap> {
|
|
26
|
-
|
|
34
|
+
static fromRaw(rawProject: RawProject, rawJob: RawJob, options: JobOptions): Job;
|
|
35
|
+
private readonly _api;
|
|
36
|
+
private readonly _logger;
|
|
37
|
+
constructor(data: JobData, options: JobOptions);
|
|
27
38
|
get id(): string;
|
|
39
|
+
get projectId(): string;
|
|
28
40
|
/**
|
|
29
41
|
* Current status of the job.
|
|
30
42
|
*/
|
|
31
43
|
get status(): JobStatus;
|
|
44
|
+
get finished(): boolean;
|
|
32
45
|
/**
|
|
33
46
|
* Progress of the job in percentage (0-100).
|
|
34
47
|
*/
|
|
@@ -66,6 +79,12 @@ declare class Job extends DataEntity<JobData, JobEventMap> {
|
|
|
66
79
|
* Name of the worker that is processing this job.
|
|
67
80
|
*/
|
|
68
81
|
get workerName(): string | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Syncs the job data with the data received from the REST API.
|
|
84
|
+
* @internal
|
|
85
|
+
* @param data
|
|
86
|
+
*/
|
|
87
|
+
_syncWithRestData(data: RawJob): Promise<void>;
|
|
69
88
|
private handleUpdated;
|
|
70
89
|
}
|
|
71
90
|
export default Job;
|
package/dist/Projects/Job.js
CHANGED
|
@@ -1,23 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
2
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
13
|
};
|
|
5
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
15
|
const DataEntity_1 = __importDefault(require("../lib/DataEntity"));
|
|
16
|
+
const getUUID_1 = __importDefault(require("../lib/getUUID"));
|
|
17
|
+
const JOB_STATUS_MAP = {
|
|
18
|
+
created: 'pending',
|
|
19
|
+
queued: 'pending',
|
|
20
|
+
assigned: 'initiating',
|
|
21
|
+
initiatingModel: 'initiating',
|
|
22
|
+
jobStarted: 'processing',
|
|
23
|
+
jobProgress: 'processing',
|
|
24
|
+
jobCompleted: 'completed',
|
|
25
|
+
jobError: 'failed'
|
|
26
|
+
};
|
|
7
27
|
class Job extends DataEntity_1.default {
|
|
8
|
-
|
|
28
|
+
static fromRaw(rawProject, rawJob, options) {
|
|
29
|
+
return new Job({
|
|
30
|
+
id: rawJob.imgID || (0, getUUID_1.default)(),
|
|
31
|
+
projectId: rawProject.id,
|
|
32
|
+
status: JOB_STATUS_MAP[rawJob.status],
|
|
33
|
+
step: rawJob.performedSteps,
|
|
34
|
+
stepCount: rawProject.stepCount,
|
|
35
|
+
workerName: rawJob.worker.name,
|
|
36
|
+
seed: rawJob.seedUsed,
|
|
37
|
+
isNSFW: rawJob.triggeredNSFWFilter
|
|
38
|
+
}, options);
|
|
39
|
+
}
|
|
40
|
+
constructor(data, options) {
|
|
9
41
|
super(data);
|
|
42
|
+
this._api = options.api;
|
|
43
|
+
this._logger = options.logger;
|
|
10
44
|
this.on('updated', this.handleUpdated.bind(this));
|
|
11
45
|
}
|
|
12
46
|
get id() {
|
|
13
47
|
return this.data.id;
|
|
14
48
|
}
|
|
49
|
+
get projectId() {
|
|
50
|
+
return this.data.projectId;
|
|
51
|
+
}
|
|
15
52
|
/**
|
|
16
53
|
* Current status of the job.
|
|
17
54
|
*/
|
|
18
55
|
get status() {
|
|
19
56
|
return this.data.status;
|
|
20
57
|
}
|
|
58
|
+
get finished() {
|
|
59
|
+
return ['completed', 'failed', 'canceled'].includes(this.status);
|
|
60
|
+
}
|
|
21
61
|
/**
|
|
22
62
|
* Progress of the job in percentage (0-100).
|
|
23
63
|
*/
|
|
@@ -75,6 +115,37 @@ class Job extends DataEntity_1.default {
|
|
|
75
115
|
get workerName() {
|
|
76
116
|
return this.data.workerName;
|
|
77
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Syncs the job data with the data received from the REST API.
|
|
120
|
+
* @internal
|
|
121
|
+
* @param data
|
|
122
|
+
*/
|
|
123
|
+
_syncWithRestData(data) {
|
|
124
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
const delta = {
|
|
126
|
+
step: data.performedSteps,
|
|
127
|
+
workerName: data.worker.name,
|
|
128
|
+
seed: data.seedUsed,
|
|
129
|
+
isNSFW: data.triggeredNSFWFilter
|
|
130
|
+
};
|
|
131
|
+
if (JOB_STATUS_MAP[data.status]) {
|
|
132
|
+
delta.status = JOB_STATUS_MAP[data.status];
|
|
133
|
+
}
|
|
134
|
+
if (!this.data.resultUrl && delta.status === 'completed' && !data.triggeredNSFWFilter) {
|
|
135
|
+
try {
|
|
136
|
+
delta.resultUrl = yield this._api.downloadUrl({
|
|
137
|
+
jobId: this.projectId,
|
|
138
|
+
imageId: this.id,
|
|
139
|
+
type: 'complete'
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
this._logger.error(error);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
this._update(delta);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
78
149
|
handleUpdated(keys) {
|
|
79
150
|
if (keys.includes('step') || keys.includes('stepCount')) {
|
|
80
151
|
this.emit('progress', this.progress);
|
package/dist/Projects/Job.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Job.js","sourceRoot":"","sources":["../../src/Projects/Job.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Job.js","sourceRoot":"","sources":["../../src/Projects/Job.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,9 @@ import Job, { JobData } from './Job';
|
|
|
2
2
|
import DataEntity, { EntityEvents } from '../lib/DataEntity';
|
|
3
3
|
import { ProjectParams } from './types';
|
|
4
4
|
import ErrorData from '../types/ErrorData';
|
|
5
|
-
|
|
5
|
+
import ProjectsApi from './index';
|
|
6
|
+
import { Logger } from '../lib/DefaultLogger';
|
|
7
|
+
export type ProjectStatus = 'pending' | 'queued' | 'processing' | 'completed' | 'failed' | 'canceled';
|
|
6
8
|
/**
|
|
7
9
|
* @inline
|
|
8
10
|
*/
|
|
@@ -25,13 +27,22 @@ export interface ProjectEventMap extends EntityEvents {
|
|
|
25
27
|
jobCompleted: Job;
|
|
26
28
|
jobFailed: Job;
|
|
27
29
|
}
|
|
30
|
+
export interface ProjectOptions {
|
|
31
|
+
api: ProjectsApi;
|
|
32
|
+
logger: Logger;
|
|
33
|
+
}
|
|
28
34
|
declare class Project extends DataEntity<ProjectData, ProjectEventMap> {
|
|
29
35
|
private _jobs;
|
|
30
36
|
private _lastEmitedProgress;
|
|
31
|
-
|
|
37
|
+
private readonly _api;
|
|
38
|
+
private readonly _logger;
|
|
39
|
+
private _timeout;
|
|
40
|
+
private _failedSyncAttempts;
|
|
41
|
+
constructor(data: ProjectParams, options: ProjectOptions);
|
|
32
42
|
get id(): string;
|
|
33
43
|
get params(): ProjectParams;
|
|
34
44
|
get status(): ProjectStatus;
|
|
45
|
+
get finished(): boolean;
|
|
35
46
|
get error(): ErrorData | undefined;
|
|
36
47
|
/**
|
|
37
48
|
* Progress of the project in percentage (0-100).
|
|
@@ -71,7 +82,14 @@ declare class Project extends DataEntity<ProjectData, ProjectEventMap> {
|
|
|
71
82
|
* @internal
|
|
72
83
|
* @param data
|
|
73
84
|
*/
|
|
74
|
-
_addJob(data: JobData): Job;
|
|
85
|
+
_addJob(data: JobData | Job): Job;
|
|
86
|
+
private _handleJobFinished;
|
|
87
|
+
private _checkForTimeout;
|
|
88
|
+
/**
|
|
89
|
+
* Sync project data with the data received from the REST API.
|
|
90
|
+
* @internal
|
|
91
|
+
*/
|
|
92
|
+
_syncToServer(): Promise<void>;
|
|
75
93
|
/**
|
|
76
94
|
* Get full project data snapshot. Can be used to serialize the project and store it in a database.
|
|
77
95
|
*/
|
package/dist/Projects/Project.js
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
2
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
13
|
};
|
|
@@ -7,8 +16,20 @@ const Job_1 = __importDefault(require("./Job"));
|
|
|
7
16
|
const DataEntity_1 = __importDefault(require("../lib/DataEntity"));
|
|
8
17
|
const cloneDeep_1 = __importDefault(require("lodash/cloneDeep"));
|
|
9
18
|
const getUUID_1 = __importDefault(require("../lib/getUUID"));
|
|
19
|
+
// If project is not finished and had no updates for 1 minute, force refresh
|
|
20
|
+
const PROJECT_TIMEOUT = 60 * 1000;
|
|
21
|
+
const MAX_FAILED_SYNC_ATTEMPTS = 3;
|
|
22
|
+
const PROJECT_STATUS_MAP = {
|
|
23
|
+
pending: 'pending',
|
|
24
|
+
active: 'queued',
|
|
25
|
+
assigned: 'processing',
|
|
26
|
+
progress: 'processing',
|
|
27
|
+
completed: 'completed',
|
|
28
|
+
errored: 'failed',
|
|
29
|
+
cancelled: 'canceled'
|
|
30
|
+
};
|
|
10
31
|
class Project extends DataEntity_1.default {
|
|
11
|
-
constructor(data) {
|
|
32
|
+
constructor(data, options) {
|
|
12
33
|
super({
|
|
13
34
|
id: (0, getUUID_1.default)(),
|
|
14
35
|
startedAt: new Date(),
|
|
@@ -18,6 +39,11 @@ class Project extends DataEntity_1.default {
|
|
|
18
39
|
});
|
|
19
40
|
this._jobs = [];
|
|
20
41
|
this._lastEmitedProgress = -1;
|
|
42
|
+
this._timeout = null;
|
|
43
|
+
this._failedSyncAttempts = 0;
|
|
44
|
+
this._api = options.api;
|
|
45
|
+
this._logger = options.logger;
|
|
46
|
+
this._timeout = setInterval(this._checkForTimeout.bind(this), PROJECT_TIMEOUT);
|
|
21
47
|
this.on('updated', this.handleUpdated.bind(this));
|
|
22
48
|
}
|
|
23
49
|
get id() {
|
|
@@ -29,6 +55,9 @@ class Project extends DataEntity_1.default {
|
|
|
29
55
|
get status() {
|
|
30
56
|
return this.data.status;
|
|
31
57
|
}
|
|
58
|
+
get finished() {
|
|
59
|
+
return ['completed', 'failed', 'canceled'].includes(this.status);
|
|
60
|
+
}
|
|
32
61
|
get error() {
|
|
33
62
|
return this.data.error;
|
|
34
63
|
}
|
|
@@ -99,6 +128,11 @@ class Project extends DataEntity_1.default {
|
|
|
99
128
|
this.emit('progress', progress);
|
|
100
129
|
this._lastEmitedProgress = progress;
|
|
101
130
|
}
|
|
131
|
+
// If project is finished stop watching for timeout
|
|
132
|
+
if (this._timeout && this.finished) {
|
|
133
|
+
clearInterval(this._timeout);
|
|
134
|
+
this._timeout = null;
|
|
135
|
+
}
|
|
102
136
|
if (keys.includes('status') || keys.includes('jobs')) {
|
|
103
137
|
const allJobsDone = this.jobs.every((job) => ['completed', 'failed', 'canceled'].includes(job.status));
|
|
104
138
|
if (this.data.status === 'completed' && allJobsDone) {
|
|
@@ -115,19 +149,93 @@ class Project extends DataEntity_1.default {
|
|
|
115
149
|
* @param data
|
|
116
150
|
*/
|
|
117
151
|
_addJob(data) {
|
|
118
|
-
const job = new Job_1.default(data);
|
|
152
|
+
const job = data instanceof Job_1.default ? data : new Job_1.default(data, { api: this._api, logger: this._logger });
|
|
119
153
|
this._jobs.push(job);
|
|
120
154
|
job.on('updated', () => {
|
|
155
|
+
this.lastUpdated = new Date();
|
|
121
156
|
this.emit('updated', ['jobs']);
|
|
122
157
|
});
|
|
123
158
|
job.on('completed', () => {
|
|
124
159
|
this.emit('jobCompleted', job);
|
|
160
|
+
this._handleJobFinished(job);
|
|
125
161
|
});
|
|
126
162
|
job.on('failed', () => {
|
|
127
163
|
this.emit('jobFailed', job);
|
|
164
|
+
this._handleJobFinished(job);
|
|
128
165
|
});
|
|
129
166
|
return job;
|
|
130
167
|
}
|
|
168
|
+
_handleJobFinished(job) {
|
|
169
|
+
const finalStatus = ['completed', 'failed', 'canceled'];
|
|
170
|
+
const allJobsDone = this.jobs.every((job) => finalStatus.includes(job.status));
|
|
171
|
+
// If all jobs are done and project is not already failed or completed, update the project status
|
|
172
|
+
if (allJobsDone && this.status !== 'failed' && this.status !== 'completed') {
|
|
173
|
+
const allJobsFailed = this.jobs.every((job) => job.status === 'failed');
|
|
174
|
+
if (allJobsFailed) {
|
|
175
|
+
this._update({ status: 'failed' });
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
this._update({ status: 'completed' });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
_checkForTimeout() {
|
|
183
|
+
if (this.lastUpdated.getTime() + PROJECT_TIMEOUT < Date.now()) {
|
|
184
|
+
this._syncToServer().catch((error) => {
|
|
185
|
+
this._logger.error(error);
|
|
186
|
+
this._failedSyncAttempts++;
|
|
187
|
+
if (this._failedSyncAttempts > MAX_FAILED_SYNC_ATTEMPTS) {
|
|
188
|
+
this._logger.error(`Failed to sync project data after ${MAX_FAILED_SYNC_ATTEMPTS} attempts. Stopping further attempts.`);
|
|
189
|
+
clearInterval(this._timeout);
|
|
190
|
+
this._timeout = null;
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Sync project data with the data received from the REST API.
|
|
197
|
+
* @internal
|
|
198
|
+
*/
|
|
199
|
+
_syncToServer() {
|
|
200
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
201
|
+
const data = yield this._api.get(this.id);
|
|
202
|
+
const jobData = data.completedWorkerJobs.reduce((acc, job) => {
|
|
203
|
+
const jobId = job.imgID || (0, getUUID_1.default)();
|
|
204
|
+
acc[jobId] = job;
|
|
205
|
+
return acc;
|
|
206
|
+
}, {});
|
|
207
|
+
for (const job of this._jobs) {
|
|
208
|
+
const restJob = jobData[job.id];
|
|
209
|
+
// This should never happen, but just in case we log a warning
|
|
210
|
+
if (!restJob) {
|
|
211
|
+
this._logger.warn(`Job with id ${job.id} not found in the REST project data`);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
yield job._syncWithRestData(restJob);
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
this._logger.error(error);
|
|
219
|
+
this._logger.error(`Failed to sync job ${job.id}`);
|
|
220
|
+
}
|
|
221
|
+
delete jobData[job.id];
|
|
222
|
+
}
|
|
223
|
+
// If there are any jobs left in jobData, it means they are new jobs that are not in the project yet
|
|
224
|
+
if (Object.keys(jobData).length) {
|
|
225
|
+
for (const job of Object.values(jobData)) {
|
|
226
|
+
const jobInstance = Job_1.default.fromRaw(data, job, { api: this._api, logger: this._logger });
|
|
227
|
+
this._addJob(jobInstance);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
const delta = {
|
|
231
|
+
params: Object.assign(Object.assign({}, this.data.params), { numberOfImages: data.imageCount, steps: data.stepCount, numberOfPreviews: data.previewCount })
|
|
232
|
+
};
|
|
233
|
+
if (PROJECT_STATUS_MAP[data.status]) {
|
|
234
|
+
delta.status = PROJECT_STATUS_MAP[data.status];
|
|
235
|
+
}
|
|
236
|
+
this._update(delta);
|
|
237
|
+
});
|
|
238
|
+
}
|
|
131
239
|
/**
|
|
132
240
|
* Get full project data snapshot. Can be used to serialize the project and store it in a database.
|
|
133
241
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Project.js","sourceRoot":"","sources":["../../src/Projects/Project.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Project.js","sourceRoot":"","sources":["../../src/Projects/Project.ts"],"names":[],"mappings":"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"}
|
package/dist/Projects/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import ApiGroup, { ApiConfig } from '../ApiGroup';
|
|
2
|
-
import { AvailableModel, EstimateRequest, ProjectParams } from './types';
|
|
2
|
+
import { AvailableModel, EstimateRequest, ImageUrlParams, ProjectParams } from './types';
|
|
3
3
|
import Project from './Project';
|
|
4
4
|
import { ProjectApiEvents } from './types/events';
|
|
5
|
+
import { RawProject } from './types/RawProject';
|
|
5
6
|
declare class ProjectsApi extends ApiGroup<ProjectApiEvents> {
|
|
6
7
|
private _availableModels;
|
|
7
8
|
private projects;
|
|
@@ -28,6 +29,13 @@ declare class ProjectsApi extends ApiGroup<ProjectApiEvents> {
|
|
|
28
29
|
* @param data
|
|
29
30
|
*/
|
|
30
31
|
create(data: ProjectParams): Promise<Project>;
|
|
32
|
+
/**
|
|
33
|
+
* Get project by id, this API returns project data from the server only if the project is
|
|
34
|
+
* completed or failed. If the project is still processing, it will throw 404 error.
|
|
35
|
+
* @internal
|
|
36
|
+
* @param projectId
|
|
37
|
+
*/
|
|
38
|
+
get(projectId: string): Promise<RawProject>;
|
|
31
39
|
private uploadGuideImage;
|
|
32
40
|
/**
|
|
33
41
|
* Estimate project cost
|
|
@@ -36,7 +44,17 @@ declare class ProjectsApi extends ApiGroup<ProjectApiEvents> {
|
|
|
36
44
|
token: string;
|
|
37
45
|
usd: string;
|
|
38
46
|
}>;
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Get upload URL for image
|
|
49
|
+
* @internal
|
|
50
|
+
* @param params
|
|
51
|
+
*/
|
|
52
|
+
uploadUrl(params: ImageUrlParams): Promise<string>;
|
|
53
|
+
/**
|
|
54
|
+
* Get download URL for image
|
|
55
|
+
* @internal
|
|
56
|
+
* @param params
|
|
57
|
+
*/
|
|
58
|
+
downloadUrl(params: ImageUrlParams): Promise<string>;
|
|
41
59
|
}
|
|
42
60
|
export default ProjectsApi;
|
package/dist/Projects/index.js
CHANGED
|
@@ -183,7 +183,11 @@ class ProjectsApi extends ApiGroup_1.default {
|
|
|
183
183
|
error: event.error
|
|
184
184
|
});
|
|
185
185
|
}
|
|
186
|
-
if (project.
|
|
186
|
+
if (project.finished) {
|
|
187
|
+
// Sync project data with the server and remove it from the list after some time
|
|
188
|
+
project._syncToServer().catch((e) => {
|
|
189
|
+
this.client.logger.error(e);
|
|
190
|
+
});
|
|
187
191
|
setTimeout(() => {
|
|
188
192
|
this.projects = this.projects.filter((p) => p.id !== event.projectId);
|
|
189
193
|
}, GARBAGE_COLLECT_TIMEOUT);
|
|
@@ -198,6 +202,7 @@ class ProjectsApi extends ApiGroup_1.default {
|
|
|
198
202
|
if (!job) {
|
|
199
203
|
job = project._addJob({
|
|
200
204
|
id: event.jobId,
|
|
205
|
+
projectId: event.projectId,
|
|
201
206
|
status: 'pending',
|
|
202
207
|
step: 0,
|
|
203
208
|
stepCount: project.params.steps
|
|
@@ -277,7 +282,7 @@ class ProjectsApi extends ApiGroup_1.default {
|
|
|
277
282
|
*/
|
|
278
283
|
create(data) {
|
|
279
284
|
return __awaiter(this, void 0, void 0, function* () {
|
|
280
|
-
const project = new Project_1.default(Object.assign({}, data));
|
|
285
|
+
const project = new Project_1.default(Object.assign({}, data), { api: this, logger: this.client.logger });
|
|
281
286
|
if (data.startingImage) {
|
|
282
287
|
yield this.uploadGuideImage(project.id, data.startingImage);
|
|
283
288
|
}
|
|
@@ -287,6 +292,18 @@ class ProjectsApi extends ApiGroup_1.default {
|
|
|
287
292
|
return project;
|
|
288
293
|
});
|
|
289
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Get project by id, this API returns project data from the server only if the project is
|
|
297
|
+
* completed or failed. If the project is still processing, it will throw 404 error.
|
|
298
|
+
* @internal
|
|
299
|
+
* @param projectId
|
|
300
|
+
*/
|
|
301
|
+
get(projectId) {
|
|
302
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
303
|
+
const { data } = yield this.client.rest.get(`/v1/projects/${projectId}`);
|
|
304
|
+
return data;
|
|
305
|
+
});
|
|
306
|
+
}
|
|
290
307
|
uploadGuideImage(projectId, file) {
|
|
291
308
|
return __awaiter(this, void 0, void 0, function* () {
|
|
292
309
|
const imageId = (0, getUUID_1.default)();
|
|
@@ -321,12 +338,22 @@ class ProjectsApi extends ApiGroup_1.default {
|
|
|
321
338
|
};
|
|
322
339
|
});
|
|
323
340
|
}
|
|
341
|
+
/**
|
|
342
|
+
* Get upload URL for image
|
|
343
|
+
* @internal
|
|
344
|
+
* @param params
|
|
345
|
+
*/
|
|
324
346
|
uploadUrl(params) {
|
|
325
347
|
return __awaiter(this, void 0, void 0, function* () {
|
|
326
348
|
const r = yield this.client.rest.get(`/v1/image/uploadUrl`, params);
|
|
327
349
|
return r.data.uploadUrl;
|
|
328
350
|
});
|
|
329
351
|
}
|
|
352
|
+
/**
|
|
353
|
+
* Get download URL for image
|
|
354
|
+
* @internal
|
|
355
|
+
* @param params
|
|
356
|
+
*/
|
|
330
357
|
downloadUrl(params) {
|
|
331
358
|
return __awaiter(this, void 0, void 0, function* () {
|
|
332
359
|
const r = yield this.client.rest.get(`/v1/image/downloadUrl`, params);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Projects/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,2DAAkD;AAClD,gEAAmC;AASnC,wDAAgC;AAChC,wFAAgE;AAChE,4CAAoD;AAGpD,6DAAqC;AAErC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAEtC,MAAM,WAAY,SAAQ,kBAA0B;IAIlD,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,YAAY,MAAiB;QAC3B,KAAK,CAAC,MAAM,CAAC,CAAC;QARR,qBAAgB,GAAqB,EAAE,CAAC;QACxC,aAAQ,GAAc,EAAE,CAAC;QAQ/B,kEAAkE;QAClE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,oCAAoC;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,wEAAwE;QACxE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC;IAEO,iBAAiB,CAAC,IAAmC;QAC3D,MAAM,UAAU,GAAG,qBAAM,CAAC,MAAM,CAAC,CAAC,GAAwB,EAAE,KAAK,EAAE,EAAE;YACnE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YAC3B,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;YACvE,EAAE;YACF,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;YAC5D,WAAW;SACZ,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC;IAEO,cAAc,CAAC,IAAkB;QACvC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ;gBACX,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACnB,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,IAAI,CAAC,KAAK;oBACrB,aAAa,EAAE,IAAI,CAAC,aAAa;iBAClC,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,cAAc;gBACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBACnE,OAAO;YACT,KAAK,iBAAiB;gBACpB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACf,IAAI,EAAE,YAAY;oBAClB,SAAS,EAAE,IAAI,CAAC,KAAK;oBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B,CAAC,CAAC;gBACH,OAAO;YACT,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACf,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,IAAI,CAAC,KAAK;oBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAEa,iBAAiB,CAAC,IAAqB;;YACnD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACf,IAAI,EAAE,UAAU;gBAChB,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,WAAW,CAAC;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,OAAO,EAAE,IAAI,CAAC,KAAK;oBACnB,IAAI,EAAE,SAAS;iBAChB,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;oBACd,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;wBACf,IAAI,EAAE,SAAS;wBACf,SAAS,EAAE,IAAI,CAAC,KAAK;wBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,GAAG;qBACJ,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KAAA;IAEa,eAAe,CAAC,IAAmB;;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/D,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAChG,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,4FAA4F;YAC5F,uCAAuC;YACvC,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxC,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;oBACnC,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,OAAO,EAAE,IAAI,CAAC,KAAK;oBACnB,IAAI,EAAE,UAAU;iBACjB,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACf,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,kBAAkB;gBAC9B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC3B,SAAS,EAAE,WAAW;gBACtB,MAAM,EAAE,IAAI,CAAC,mBAAmB;gBAChC,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC,CAAC,CAAC;QACL,CAAC;KAAA;IAEO,cAAc,CAAC,IAAkB;QACvC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,KAAK,EAAE;oBACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;oBACxB,OAAO,EAAE,IAAI,CAAC,aAAa;iBAC5B;aACF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBACxB,OAAO,EAAE,IAAI,CAAC,aAAa;aAC5B;SACF,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,KAAmB;QAC5C,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,OAAO,CAAC,OAAO,CAAC;oBACd,MAAM,EAAE,QAAQ;oBAChB,aAAa,EAAE,KAAK,CAAC,aAAa;iBACnC,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,WAAW;gBACd,OAAO,CAAC,OAAO,CAAC;oBACd,MAAM,EAAE,WAAW;iBACpB,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,OAAO;gBACV,OAAO,CAAC,OAAO,CAAC;oBACd,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAC,CAAC;QACP,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAClE,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;YACxE,CAAC,EAAE,uBAAuB,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,KAAe;QACpC,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;gBACpB,EAAE,EAAE,KAAK,CAAC,KAAK;gBACf,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,CAAC;gBACP,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;aAChC,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,YAAY;gBACf,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;gBACpE,MAAM;YACR,KAAK,SAAS;gBACZ,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;gBACpE,MAAM;YACR,KAAK,UAAU;gBACb,GAAG,CAAC,OAAO,CAAC;oBACV,MAAM,EAAE,YAAY;oBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;oBACpC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;gBAC5C,CAAC;gBACD,MAAM;YACR,KAAK,SAAS;gBACZ,GAAG,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvC,MAAM;YACR,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,GAAG,CAAC,OAAO,CAAC;oBACV,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW;oBACrD,IAAI,EAAE,KAAK,CAAC,KAAK;oBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,YAAY,EAAE,KAAK,CAAC,YAAY;iBACjC,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YACD,KAAK,OAAO;gBACV,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACtD,MAAM;QACV,CAAC;IACH,CAAC;IAEO,wBAAwB;QAC9B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,OAAO,GAAG,KAAK;QAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAClD,CAAC,EAAE,OAAO,CAAC,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,EAAE;gBACtC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACG,MAAM,CAAC,IAAmB;;YAC9B,MAAM,OAAO,GAAG,IAAI,iBAAO,mBAAM,IAAI,EAAG,CAAC;YACzC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,OAAO,GAAG,IAAA,iCAAuB,EAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;IAEa,gBAAgB,CAAC,SAAiB,EAAE,IAA0B;;YAC1E,MAAM,OAAO,GAAG,IAAA,iBAAO,GAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;gBACxC,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,eAAe;aACtB,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;gBACpC,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,oBAAQ,CAAC,GAAG,CAAC,MAAM,EAAE;oBAC7B,MAAM,EAAE,OAAO;oBACf,SAAS,EAAE,CAAC;oBACZ,OAAO,EAAE,8BAA8B;iBACxC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;IAED;;OAEG;IACG,YAAY;6DAAC,EACjB,OAAO,EACP,KAAK,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,SAAS,EACT,qBAAqB,EACL;YAChB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CACpC,wBAAwB,OAAO,IAAI,KAAK,IAAI,UAAU,IAAI,SAAS,IAAI,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CACpK,CAAC;YACF,OAAO;gBACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW;gBAClC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS;aAC/B,CAAC;QACJ,CAAC;KAAA;IAEa,SAAS,CAAC,MAAsB;;YAC5C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAClC,qBAAqB,EACrB,MAAM,CACP,CAAC;YACF,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;KAAA;IAEa,WAAW,CAAC,MAAsB;;YAC9C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAClC,uBAAuB,EACvB,MAAM,CACP,CAAC;YACF,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;KAAA;CACF;AAED,kBAAe,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Projects/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { SupernetType } from '../../ApiClient/WebSocketClient/types';
|
|
2
|
+
export interface RawProject {
|
|
3
|
+
id: string;
|
|
4
|
+
SID: number;
|
|
5
|
+
artist: Account;
|
|
6
|
+
model: ProjectModel;
|
|
7
|
+
imageCount: number;
|
|
8
|
+
stepCount: number;
|
|
9
|
+
previewCount: number;
|
|
10
|
+
hasGuideImage: boolean;
|
|
11
|
+
denoiseStrength: string;
|
|
12
|
+
costEstimate: CostEstimate;
|
|
13
|
+
costActual: CostActual;
|
|
14
|
+
createTime: number;
|
|
15
|
+
updateTime: number;
|
|
16
|
+
endTime: number;
|
|
17
|
+
status: RawProjectStatus;
|
|
18
|
+
reason: 'allJobsCompleted' | 'artistCanceled';
|
|
19
|
+
network: SupernetType;
|
|
20
|
+
txId: string;
|
|
21
|
+
workerJobs: RawJob[];
|
|
22
|
+
completedWorkerJobs: RawJob[];
|
|
23
|
+
}
|
|
24
|
+
type RawProjectStatus = 'pending' | 'active' | 'assigned' | 'progress' | 'errored' | 'completed' | 'cancelled';
|
|
25
|
+
export interface Account {
|
|
26
|
+
id?: string;
|
|
27
|
+
clientSID?: number;
|
|
28
|
+
address?: string;
|
|
29
|
+
addressSID?: number;
|
|
30
|
+
name?: string;
|
|
31
|
+
username?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface RawJob {
|
|
34
|
+
id: string;
|
|
35
|
+
SID: string;
|
|
36
|
+
imgID?: string;
|
|
37
|
+
worker: Account;
|
|
38
|
+
createTime: number;
|
|
39
|
+
startTime: number | null;
|
|
40
|
+
updateTime: number;
|
|
41
|
+
endTime: number;
|
|
42
|
+
status: WorkerJobStatus;
|
|
43
|
+
reason: WorkerJobReason;
|
|
44
|
+
performedSteps: number;
|
|
45
|
+
triggeredNSFWFilter: boolean;
|
|
46
|
+
seedUsed: number;
|
|
47
|
+
costActual: CostActual;
|
|
48
|
+
network: SupernetType;
|
|
49
|
+
txId?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface CostActual {
|
|
52
|
+
costInRenderSec: string;
|
|
53
|
+
costInUSD: string;
|
|
54
|
+
costInToken: string;
|
|
55
|
+
calculatedStepCount?: number;
|
|
56
|
+
}
|
|
57
|
+
export type WorkerJobReason = 'artistCanceled' | 'artistDisconnected' | 'genfailure' | 'imgUploadFailure' | 'jobCompleted' | 'jobTimedOut' | 'workerDisconnected' | 'workerReconnected';
|
|
58
|
+
export type WorkerJobStatus = 'created' | 'queued' | 'assigned' | 'initiatingModel' | 'jobStarted' | 'jobProgress' | 'jobCompleted' | 'jobError';
|
|
59
|
+
export interface CostEstimate {
|
|
60
|
+
rate: Rate;
|
|
61
|
+
quote: Quote;
|
|
62
|
+
}
|
|
63
|
+
export interface Quote {
|
|
64
|
+
model: QuoteModel;
|
|
65
|
+
job: CostActual;
|
|
66
|
+
project: CostActual;
|
|
67
|
+
}
|
|
68
|
+
export interface QuoteModel {
|
|
69
|
+
weight: string;
|
|
70
|
+
secPerStep: string;
|
|
71
|
+
secPerPreview: string;
|
|
72
|
+
secForCN: string;
|
|
73
|
+
}
|
|
74
|
+
export interface Rate {
|
|
75
|
+
costPerBaseHQRenderInUSD: string;
|
|
76
|
+
tokenMarkePriceUSD: string;
|
|
77
|
+
costPerRenderSecUSD: string;
|
|
78
|
+
costPerRenderSecToken: string;
|
|
79
|
+
network: SupernetType;
|
|
80
|
+
networkCostMultiplier: string;
|
|
81
|
+
}
|
|
82
|
+
export interface ProjectModel {
|
|
83
|
+
id: string;
|
|
84
|
+
SID: number;
|
|
85
|
+
name: string;
|
|
86
|
+
}
|
|
87
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RawProject.js","sourceRoot":"","sources":["../../../src/Projects/types/RawProject.ts"],"names":[],"mappings":""}
|
package/dist/lib/DataEntity.d.ts
CHANGED
package/dist/lib/DataEntity.js
CHANGED
|
@@ -8,6 +8,7 @@ const TypedEventEmitter_1 = __importDefault(require("./TypedEventEmitter"));
|
|
|
8
8
|
class DataEntity extends TypedEventEmitter_1.default {
|
|
9
9
|
constructor(data) {
|
|
10
10
|
super();
|
|
11
|
+
this.lastUpdated = new Date();
|
|
11
12
|
this.data = data;
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
@@ -18,6 +19,7 @@ class DataEntity extends TypedEventEmitter_1.default {
|
|
|
18
19
|
//@ts-ignore
|
|
19
20
|
const changedKeys = Object.keys(delta).filter((key) => this.data[key] !== delta[key]);
|
|
20
21
|
this.data = Object.assign(Object.assign({}, this.data), delta);
|
|
22
|
+
this.lastUpdated = new Date();
|
|
21
23
|
this.emit('updated', changedKeys);
|
|
22
24
|
}
|
|
23
25
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataEntity.js","sourceRoot":"","sources":["../../src/lib/DataEntity.ts"],"names":[],"mappings":";;;;;AAAA,mCAAmC;AACnC,4EAAoD;AASpD,MAAe,UAAqD,SAAQ,2BAAoB;
|
|
1
|
+
{"version":3,"file":"DataEntity.js","sourceRoot":"","sources":["../../src/lib/DataEntity.ts"],"names":[],"mappings":";;;;;AAAA,mCAAmC;AACnC,4EAAoD;AASpD,MAAe,UAAqD,SAAQ,2BAAoB;IAK9F,YAAY,IAAO;QACjB,KAAK,EAAE,CAAC;QAHA,gBAAW,GAAS,IAAI,IAAI,EAAE,CAAC;QAIvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,KAAiB;QACvB,YAAY;QACZ,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,IAAI,mCAAQ,IAAI,CAAC,IAAI,GAAK,KAAK,CAAE,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAA,kBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,kBAAe,UAAU,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "0.4.0-aplha.
|
|
1
|
+
export declare const LIB_VERSION = "0.4.0-aplha.5";
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
package/src/Projects/Job.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import DataEntity, { EntityEvents } from '../lib/DataEntity';
|
|
2
2
|
import ErrorData from '../types/ErrorData';
|
|
3
|
+
import { RawJob, RawProject } from './types/RawProject';
|
|
4
|
+
import ProjectsApi from './index';
|
|
5
|
+
import { Logger } from '../lib/DefaultLogger';
|
|
6
|
+
import getUUID from '../lib/getUUID';
|
|
3
7
|
|
|
4
8
|
export type JobStatus =
|
|
5
9
|
| 'pending'
|
|
@@ -9,11 +13,23 @@ export type JobStatus =
|
|
|
9
13
|
| 'failed'
|
|
10
14
|
| 'canceled';
|
|
11
15
|
|
|
16
|
+
const JOB_STATUS_MAP: Record<RawJob['status'], JobStatus> = {
|
|
17
|
+
created: 'pending',
|
|
18
|
+
queued: 'pending',
|
|
19
|
+
assigned: 'initiating',
|
|
20
|
+
initiatingModel: 'initiating',
|
|
21
|
+
jobStarted: 'processing',
|
|
22
|
+
jobProgress: 'processing',
|
|
23
|
+
jobCompleted: 'completed',
|
|
24
|
+
jobError: 'failed'
|
|
25
|
+
};
|
|
26
|
+
|
|
12
27
|
/**
|
|
13
28
|
* @inline
|
|
14
29
|
*/
|
|
15
30
|
export interface JobData {
|
|
16
31
|
id: string;
|
|
32
|
+
projectId: string;
|
|
17
33
|
status: JobStatus;
|
|
18
34
|
step: number;
|
|
19
35
|
stepCount: number;
|
|
@@ -32,9 +48,37 @@ export interface JobEventMap extends EntityEvents {
|
|
|
32
48
|
failed: ErrorData;
|
|
33
49
|
}
|
|
34
50
|
|
|
51
|
+
export interface JobOptions {
|
|
52
|
+
api: ProjectsApi;
|
|
53
|
+
logger: Logger;
|
|
54
|
+
}
|
|
55
|
+
|
|
35
56
|
class Job extends DataEntity<JobData, JobEventMap> {
|
|
36
|
-
|
|
57
|
+
static fromRaw(rawProject: RawProject, rawJob: RawJob, options: JobOptions) {
|
|
58
|
+
return new Job(
|
|
59
|
+
{
|
|
60
|
+
id: rawJob.imgID || getUUID(),
|
|
61
|
+
projectId: rawProject.id,
|
|
62
|
+
status: JOB_STATUS_MAP[rawJob.status],
|
|
63
|
+
step: rawJob.performedSteps,
|
|
64
|
+
stepCount: rawProject.stepCount,
|
|
65
|
+
workerName: rawJob.worker.name,
|
|
66
|
+
seed: rawJob.seedUsed,
|
|
67
|
+
isNSFW: rawJob.triggeredNSFWFilter
|
|
68
|
+
},
|
|
69
|
+
options
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private readonly _api: ProjectsApi;
|
|
74
|
+
private readonly _logger: Logger;
|
|
75
|
+
|
|
76
|
+
constructor(data: JobData, options: JobOptions) {
|
|
37
77
|
super(data);
|
|
78
|
+
|
|
79
|
+
this._api = options.api;
|
|
80
|
+
this._logger = options.logger;
|
|
81
|
+
|
|
38
82
|
this.on('updated', this.handleUpdated.bind(this));
|
|
39
83
|
}
|
|
40
84
|
|
|
@@ -42,6 +86,10 @@ class Job extends DataEntity<JobData, JobEventMap> {
|
|
|
42
86
|
return this.data.id;
|
|
43
87
|
}
|
|
44
88
|
|
|
89
|
+
get projectId() {
|
|
90
|
+
return this.data.projectId;
|
|
91
|
+
}
|
|
92
|
+
|
|
45
93
|
/**
|
|
46
94
|
* Current status of the job.
|
|
47
95
|
*/
|
|
@@ -49,6 +97,10 @@ class Job extends DataEntity<JobData, JobEventMap> {
|
|
|
49
97
|
return this.data.status;
|
|
50
98
|
}
|
|
51
99
|
|
|
100
|
+
get finished() {
|
|
101
|
+
return ['completed', 'failed', 'canceled'].includes(this.status);
|
|
102
|
+
}
|
|
103
|
+
|
|
52
104
|
/**
|
|
53
105
|
* Progress of the job in percentage (0-100).
|
|
54
106
|
*/
|
|
@@ -116,6 +168,35 @@ class Job extends DataEntity<JobData, JobEventMap> {
|
|
|
116
168
|
return this.data.workerName;
|
|
117
169
|
}
|
|
118
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Syncs the job data with the data received from the REST API.
|
|
173
|
+
* @internal
|
|
174
|
+
* @param data
|
|
175
|
+
*/
|
|
176
|
+
async _syncWithRestData(data: RawJob) {
|
|
177
|
+
const delta: Partial<JobData> = {
|
|
178
|
+
step: data.performedSteps,
|
|
179
|
+
workerName: data.worker.name,
|
|
180
|
+
seed: data.seedUsed,
|
|
181
|
+
isNSFW: data.triggeredNSFWFilter
|
|
182
|
+
};
|
|
183
|
+
if (JOB_STATUS_MAP[data.status]) {
|
|
184
|
+
delta.status = JOB_STATUS_MAP[data.status];
|
|
185
|
+
}
|
|
186
|
+
if (!this.data.resultUrl && delta.status === 'completed' && !data.triggeredNSFWFilter) {
|
|
187
|
+
try {
|
|
188
|
+
delta.resultUrl = await this._api.downloadUrl({
|
|
189
|
+
jobId: this.projectId,
|
|
190
|
+
imageId: this.id,
|
|
191
|
+
type: 'complete'
|
|
192
|
+
});
|
|
193
|
+
} catch (error) {
|
|
194
|
+
this._logger.error(error);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
this._update(delta);
|
|
198
|
+
}
|
|
199
|
+
|
|
119
200
|
private handleUpdated(keys: string[]) {
|
|
120
201
|
if (keys.includes('step') || keys.includes('stepCount')) {
|
|
121
202
|
this.emit('progress', this.progress);
|
package/src/Projects/Project.ts
CHANGED
|
@@ -1,11 +1,34 @@
|
|
|
1
|
-
import Job, { JobData } from './Job';
|
|
1
|
+
import Job, { JobData, JobStatus } from './Job';
|
|
2
2
|
import DataEntity, { EntityEvents } from '../lib/DataEntity';
|
|
3
3
|
import { ProjectParams } from './types';
|
|
4
4
|
import cloneDeep from 'lodash/cloneDeep';
|
|
5
5
|
import ErrorData from '../types/ErrorData';
|
|
6
6
|
import getUUID from '../lib/getUUID';
|
|
7
|
+
import { RawJob, RawProject } from './types/RawProject';
|
|
8
|
+
import ProjectsApi from './index';
|
|
9
|
+
import { Logger } from '../lib/DefaultLogger';
|
|
7
10
|
|
|
8
|
-
|
|
11
|
+
// If project is not finished and had no updates for 1 minute, force refresh
|
|
12
|
+
const PROJECT_TIMEOUT = 60 * 1000;
|
|
13
|
+
const MAX_FAILED_SYNC_ATTEMPTS = 3;
|
|
14
|
+
|
|
15
|
+
export type ProjectStatus =
|
|
16
|
+
| 'pending'
|
|
17
|
+
| 'queued'
|
|
18
|
+
| 'processing'
|
|
19
|
+
| 'completed'
|
|
20
|
+
| 'failed'
|
|
21
|
+
| 'canceled';
|
|
22
|
+
|
|
23
|
+
const PROJECT_STATUS_MAP: Record<RawProject['status'], ProjectStatus> = {
|
|
24
|
+
pending: 'pending',
|
|
25
|
+
active: 'queued',
|
|
26
|
+
assigned: 'processing',
|
|
27
|
+
progress: 'processing',
|
|
28
|
+
completed: 'completed',
|
|
29
|
+
errored: 'failed',
|
|
30
|
+
cancelled: 'canceled'
|
|
31
|
+
};
|
|
9
32
|
|
|
10
33
|
/**
|
|
11
34
|
* @inline
|
|
@@ -31,11 +54,20 @@ export interface ProjectEventMap extends EntityEvents {
|
|
|
31
54
|
jobFailed: Job;
|
|
32
55
|
}
|
|
33
56
|
|
|
57
|
+
export interface ProjectOptions {
|
|
58
|
+
api: ProjectsApi;
|
|
59
|
+
logger: Logger;
|
|
60
|
+
}
|
|
61
|
+
|
|
34
62
|
class Project extends DataEntity<ProjectData, ProjectEventMap> {
|
|
35
63
|
private _jobs: Job[] = [];
|
|
36
64
|
private _lastEmitedProgress = -1;
|
|
65
|
+
private readonly _api: ProjectsApi;
|
|
66
|
+
private readonly _logger: Logger;
|
|
67
|
+
private _timeout: NodeJS.Timeout | null = null;
|
|
68
|
+
private _failedSyncAttempts = 0;
|
|
37
69
|
|
|
38
|
-
constructor(data: ProjectParams) {
|
|
70
|
+
constructor(data: ProjectParams, options: ProjectOptions) {
|
|
39
71
|
super({
|
|
40
72
|
id: getUUID(),
|
|
41
73
|
startedAt: new Date(),
|
|
@@ -44,6 +76,11 @@ class Project extends DataEntity<ProjectData, ProjectEventMap> {
|
|
|
44
76
|
status: 'pending'
|
|
45
77
|
});
|
|
46
78
|
|
|
79
|
+
this._api = options.api;
|
|
80
|
+
this._logger = options.logger;
|
|
81
|
+
|
|
82
|
+
this._timeout = setInterval(this._checkForTimeout.bind(this), PROJECT_TIMEOUT);
|
|
83
|
+
|
|
47
84
|
this.on('updated', this.handleUpdated.bind(this));
|
|
48
85
|
}
|
|
49
86
|
|
|
@@ -59,6 +96,10 @@ class Project extends DataEntity<ProjectData, ProjectEventMap> {
|
|
|
59
96
|
return this.data.status;
|
|
60
97
|
}
|
|
61
98
|
|
|
99
|
+
get finished() {
|
|
100
|
+
return ['completed', 'failed', 'canceled'].includes(this.status);
|
|
101
|
+
}
|
|
102
|
+
|
|
62
103
|
get error() {
|
|
63
104
|
return this.data.error;
|
|
64
105
|
}
|
|
@@ -137,6 +178,11 @@ class Project extends DataEntity<ProjectData, ProjectEventMap> {
|
|
|
137
178
|
this.emit('progress', progress);
|
|
138
179
|
this._lastEmitedProgress = progress;
|
|
139
180
|
}
|
|
181
|
+
// If project is finished stop watching for timeout
|
|
182
|
+
if (this._timeout && this.finished) {
|
|
183
|
+
clearInterval(this._timeout!);
|
|
184
|
+
this._timeout = null;
|
|
185
|
+
}
|
|
140
186
|
if (keys.includes('status') || keys.includes('jobs')) {
|
|
141
187
|
const allJobsDone = this.jobs.every((job) =>
|
|
142
188
|
['completed', 'failed', 'canceled'].includes(job.status)
|
|
@@ -155,21 +201,104 @@ class Project extends DataEntity<ProjectData, ProjectEventMap> {
|
|
|
155
201
|
* @internal
|
|
156
202
|
* @param data
|
|
157
203
|
*/
|
|
158
|
-
_addJob(data: JobData) {
|
|
159
|
-
const job =
|
|
204
|
+
_addJob(data: JobData | Job) {
|
|
205
|
+
const job =
|
|
206
|
+
data instanceof Job ? data : new Job(data, { api: this._api, logger: this._logger });
|
|
160
207
|
this._jobs.push(job);
|
|
161
208
|
job.on('updated', () => {
|
|
209
|
+
this.lastUpdated = new Date();
|
|
162
210
|
this.emit('updated', ['jobs']);
|
|
163
211
|
});
|
|
164
212
|
job.on('completed', () => {
|
|
165
213
|
this.emit('jobCompleted', job);
|
|
214
|
+
this._handleJobFinished(job);
|
|
166
215
|
});
|
|
167
216
|
job.on('failed', () => {
|
|
168
217
|
this.emit('jobFailed', job);
|
|
218
|
+
this._handleJobFinished(job);
|
|
169
219
|
});
|
|
170
220
|
return job;
|
|
171
221
|
}
|
|
172
222
|
|
|
223
|
+
private _handleJobFinished(job: Job) {
|
|
224
|
+
const finalStatus: JobStatus[] = ['completed', 'failed', 'canceled'];
|
|
225
|
+
const allJobsDone = this.jobs.every((job) => finalStatus.includes(job.status));
|
|
226
|
+
// If all jobs are done and project is not already failed or completed, update the project status
|
|
227
|
+
if (allJobsDone && this.status !== 'failed' && this.status !== 'completed') {
|
|
228
|
+
const allJobsFailed = this.jobs.every((job) => job.status === 'failed');
|
|
229
|
+
if (allJobsFailed) {
|
|
230
|
+
this._update({ status: 'failed' });
|
|
231
|
+
} else {
|
|
232
|
+
this._update({ status: 'completed' });
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
private _checkForTimeout() {
|
|
238
|
+
if (this.lastUpdated.getTime() + PROJECT_TIMEOUT < Date.now()) {
|
|
239
|
+
this._syncToServer().catch((error) => {
|
|
240
|
+
this._logger.error(error);
|
|
241
|
+
this._failedSyncAttempts++;
|
|
242
|
+
if (this._failedSyncAttempts > MAX_FAILED_SYNC_ATTEMPTS) {
|
|
243
|
+
this._logger.error(
|
|
244
|
+
`Failed to sync project data after ${MAX_FAILED_SYNC_ATTEMPTS} attempts. Stopping further attempts.`
|
|
245
|
+
);
|
|
246
|
+
clearInterval(this._timeout!);
|
|
247
|
+
this._timeout = null;
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Sync project data with the data received from the REST API.
|
|
255
|
+
* @internal
|
|
256
|
+
*/
|
|
257
|
+
async _syncToServer() {
|
|
258
|
+
const data = await this._api.get(this.id);
|
|
259
|
+
const jobData = data.completedWorkerJobs.reduce((acc: Record<string, RawJob>, job) => {
|
|
260
|
+
const jobId = job.imgID || getUUID();
|
|
261
|
+
acc[jobId] = job;
|
|
262
|
+
return acc;
|
|
263
|
+
}, {});
|
|
264
|
+
for (const job of this._jobs) {
|
|
265
|
+
const restJob = jobData[job.id];
|
|
266
|
+
// This should never happen, but just in case we log a warning
|
|
267
|
+
if (!restJob) {
|
|
268
|
+
this._logger.warn(`Job with id ${job.id} not found in the REST project data`);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
await job._syncWithRestData(restJob);
|
|
273
|
+
} catch (error) {
|
|
274
|
+
this._logger.error(error);
|
|
275
|
+
this._logger.error(`Failed to sync job ${job.id}`);
|
|
276
|
+
}
|
|
277
|
+
delete jobData[job.id];
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// If there are any jobs left in jobData, it means they are new jobs that are not in the project yet
|
|
281
|
+
if (Object.keys(jobData).length) {
|
|
282
|
+
for (const job of Object.values(jobData)) {
|
|
283
|
+
const jobInstance = Job.fromRaw(data, job, { api: this._api, logger: this._logger });
|
|
284
|
+
this._addJob(jobInstance);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const delta: Partial<ProjectData> = {
|
|
289
|
+
params: {
|
|
290
|
+
...this.data.params,
|
|
291
|
+
numberOfImages: data.imageCount,
|
|
292
|
+
steps: data.stepCount,
|
|
293
|
+
numberOfPreviews: data.previewCount
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
if (PROJECT_STATUS_MAP[data.status]) {
|
|
297
|
+
delta.status = PROJECT_STATUS_MAP[data.status];
|
|
298
|
+
}
|
|
299
|
+
this._update(delta);
|
|
300
|
+
}
|
|
301
|
+
|
|
173
302
|
/**
|
|
174
303
|
* Get full project data snapshot. Can be used to serialize the project and store it in a database.
|
|
175
304
|
*/
|
package/src/Projects/index.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { ApiError, ApiReponse } from '../ApiClient';
|
|
|
14
14
|
import { EstimationResponse } from './types/EstimationResponse';
|
|
15
15
|
import { JobEvent, ProjectApiEvents, ProjectEvent } from './types/events';
|
|
16
16
|
import getUUID from '../lib/getUUID';
|
|
17
|
+
import { RawProject } from './types/RawProject';
|
|
17
18
|
|
|
18
19
|
const GARBAGE_COLLECT_TIMEOUT = 10000;
|
|
19
20
|
|
|
@@ -188,7 +189,11 @@ class ProjectsApi extends ApiGroup<ProjectApiEvents> {
|
|
|
188
189
|
error: event.error
|
|
189
190
|
});
|
|
190
191
|
}
|
|
191
|
-
if (project.
|
|
192
|
+
if (project.finished) {
|
|
193
|
+
// Sync project data with the server and remove it from the list after some time
|
|
194
|
+
project._syncToServer().catch((e) => {
|
|
195
|
+
this.client.logger.error(e);
|
|
196
|
+
});
|
|
192
197
|
setTimeout(() => {
|
|
193
198
|
this.projects = this.projects.filter((p) => p.id !== event.projectId);
|
|
194
199
|
}, GARBAGE_COLLECT_TIMEOUT);
|
|
@@ -204,6 +209,7 @@ class ProjectsApi extends ApiGroup<ProjectApiEvents> {
|
|
|
204
209
|
if (!job) {
|
|
205
210
|
job = project._addJob({
|
|
206
211
|
id: event.jobId,
|
|
212
|
+
projectId: event.projectId,
|
|
207
213
|
status: 'pending',
|
|
208
214
|
step: 0,
|
|
209
215
|
stepCount: project.params.steps
|
|
@@ -284,7 +290,7 @@ class ProjectsApi extends ApiGroup<ProjectApiEvents> {
|
|
|
284
290
|
* @param data
|
|
285
291
|
*/
|
|
286
292
|
async create(data: ProjectParams): Promise<Project> {
|
|
287
|
-
const project = new Project({ ...data });
|
|
293
|
+
const project = new Project({ ...data }, { api: this, logger: this.client.logger });
|
|
288
294
|
if (data.startingImage) {
|
|
289
295
|
await this.uploadGuideImage(project.id, data.startingImage);
|
|
290
296
|
}
|
|
@@ -294,6 +300,19 @@ class ProjectsApi extends ApiGroup<ProjectApiEvents> {
|
|
|
294
300
|
return project;
|
|
295
301
|
}
|
|
296
302
|
|
|
303
|
+
/**
|
|
304
|
+
* Get project by id, this API returns project data from the server only if the project is
|
|
305
|
+
* completed or failed. If the project is still processing, it will throw 404 error.
|
|
306
|
+
* @internal
|
|
307
|
+
* @param projectId
|
|
308
|
+
*/
|
|
309
|
+
async get(projectId: string) {
|
|
310
|
+
const { data } = await this.client.rest.get<ApiReponse<RawProject>>(
|
|
311
|
+
`/v1/projects/${projectId}`
|
|
312
|
+
);
|
|
313
|
+
return data;
|
|
314
|
+
}
|
|
315
|
+
|
|
297
316
|
private async uploadGuideImage(projectId: string, file: File | Buffer | Blob) {
|
|
298
317
|
const imageId = getUUID();
|
|
299
318
|
const presignedUrl = await this.uploadUrl({
|
|
@@ -336,7 +355,12 @@ class ProjectsApi extends ApiGroup<ProjectApiEvents> {
|
|
|
336
355
|
};
|
|
337
356
|
}
|
|
338
357
|
|
|
339
|
-
|
|
358
|
+
/**
|
|
359
|
+
* Get upload URL for image
|
|
360
|
+
* @internal
|
|
361
|
+
* @param params
|
|
362
|
+
*/
|
|
363
|
+
async uploadUrl(params: ImageUrlParams) {
|
|
340
364
|
const r = await this.client.rest.get<ApiReponse<{ uploadUrl: string }>>(
|
|
341
365
|
`/v1/image/uploadUrl`,
|
|
342
366
|
params
|
|
@@ -344,7 +368,12 @@ class ProjectsApi extends ApiGroup<ProjectApiEvents> {
|
|
|
344
368
|
return r.data.uploadUrl;
|
|
345
369
|
}
|
|
346
370
|
|
|
347
|
-
|
|
371
|
+
/**
|
|
372
|
+
* Get download URL for image
|
|
373
|
+
* @internal
|
|
374
|
+
* @param params
|
|
375
|
+
*/
|
|
376
|
+
async downloadUrl(params: ImageUrlParams) {
|
|
348
377
|
const r = await this.client.rest.get<ApiReponse<{ downloadUrl: string }>>(
|
|
349
378
|
`/v1/image/downloadUrl`,
|
|
350
379
|
params
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { SupernetType } from '../../ApiClient/WebSocketClient/types';
|
|
2
|
+
|
|
3
|
+
export interface RawProject {
|
|
4
|
+
id: string;
|
|
5
|
+
SID: number;
|
|
6
|
+
artist: Account;
|
|
7
|
+
model: ProjectModel;
|
|
8
|
+
imageCount: number;
|
|
9
|
+
stepCount: number;
|
|
10
|
+
previewCount: number;
|
|
11
|
+
hasGuideImage: boolean;
|
|
12
|
+
denoiseStrength: string;
|
|
13
|
+
costEstimate: CostEstimate;
|
|
14
|
+
costActual: CostActual;
|
|
15
|
+
createTime: number;
|
|
16
|
+
updateTime: number;
|
|
17
|
+
endTime: number;
|
|
18
|
+
status: RawProjectStatus;
|
|
19
|
+
reason: 'allJobsCompleted' | 'artistCanceled';
|
|
20
|
+
network: SupernetType;
|
|
21
|
+
txId: string;
|
|
22
|
+
workerJobs: RawJob[];
|
|
23
|
+
completedWorkerJobs: RawJob[];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type RawProjectStatus =
|
|
27
|
+
| 'pending'
|
|
28
|
+
| 'active'
|
|
29
|
+
| 'assigned'
|
|
30
|
+
| 'progress'
|
|
31
|
+
| 'errored'
|
|
32
|
+
| 'completed'
|
|
33
|
+
| 'cancelled';
|
|
34
|
+
|
|
35
|
+
export interface Account {
|
|
36
|
+
id?: string;
|
|
37
|
+
clientSID?: number;
|
|
38
|
+
address?: string;
|
|
39
|
+
addressSID?: number;
|
|
40
|
+
name?: string;
|
|
41
|
+
username?: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface RawJob {
|
|
45
|
+
id: string;
|
|
46
|
+
SID: string;
|
|
47
|
+
imgID?: string;
|
|
48
|
+
worker: Account;
|
|
49
|
+
createTime: number;
|
|
50
|
+
startTime: number | null;
|
|
51
|
+
updateTime: number;
|
|
52
|
+
endTime: number;
|
|
53
|
+
status: WorkerJobStatus;
|
|
54
|
+
reason: WorkerJobReason;
|
|
55
|
+
performedSteps: number;
|
|
56
|
+
triggeredNSFWFilter: boolean;
|
|
57
|
+
seedUsed: number;
|
|
58
|
+
costActual: CostActual;
|
|
59
|
+
network: SupernetType;
|
|
60
|
+
txId?: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface CostActual {
|
|
64
|
+
costInRenderSec: string;
|
|
65
|
+
costInUSD: string;
|
|
66
|
+
costInToken: string;
|
|
67
|
+
calculatedStepCount?: number;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export type WorkerJobReason =
|
|
71
|
+
| 'artistCanceled'
|
|
72
|
+
| 'artistDisconnected'
|
|
73
|
+
| 'genfailure'
|
|
74
|
+
| 'imgUploadFailure'
|
|
75
|
+
| 'jobCompleted'
|
|
76
|
+
| 'jobTimedOut'
|
|
77
|
+
| 'workerDisconnected'
|
|
78
|
+
| 'workerReconnected';
|
|
79
|
+
|
|
80
|
+
export type WorkerJobStatus =
|
|
81
|
+
| 'created'
|
|
82
|
+
| 'queued'
|
|
83
|
+
| 'assigned'
|
|
84
|
+
| 'initiatingModel'
|
|
85
|
+
| 'jobStarted'
|
|
86
|
+
| 'jobProgress'
|
|
87
|
+
| 'jobCompleted'
|
|
88
|
+
| 'jobError';
|
|
89
|
+
|
|
90
|
+
export interface CostEstimate {
|
|
91
|
+
rate: Rate;
|
|
92
|
+
quote: Quote;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface Quote {
|
|
96
|
+
model: QuoteModel;
|
|
97
|
+
job: CostActual;
|
|
98
|
+
project: CostActual;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface QuoteModel {
|
|
102
|
+
weight: string;
|
|
103
|
+
secPerStep: string;
|
|
104
|
+
secPerPreview: string;
|
|
105
|
+
secForCN: string;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface Rate {
|
|
109
|
+
costPerBaseHQRenderInUSD: string;
|
|
110
|
+
tokenMarkePriceUSD: string;
|
|
111
|
+
costPerRenderSecUSD: string;
|
|
112
|
+
costPerRenderSecToken: string;
|
|
113
|
+
network: SupernetType;
|
|
114
|
+
networkCostMultiplier: string;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface ProjectModel {
|
|
118
|
+
id: string;
|
|
119
|
+
SID: number;
|
|
120
|
+
name: string;
|
|
121
|
+
}
|
package/src/lib/DataEntity.ts
CHANGED
|
@@ -11,6 +11,8 @@ export interface EntityEvents {
|
|
|
11
11
|
abstract class DataEntity<D, E extends EntityEvents = EntityEvents> extends TypedEventEmitter<E> {
|
|
12
12
|
protected data: D;
|
|
13
13
|
|
|
14
|
+
protected lastUpdated: Date = new Date();
|
|
15
|
+
|
|
14
16
|
constructor(data: D) {
|
|
15
17
|
super();
|
|
16
18
|
this.data = data;
|
|
@@ -24,6 +26,7 @@ abstract class DataEntity<D, E extends EntityEvents = EntityEvents> extends Type
|
|
|
24
26
|
//@ts-ignore
|
|
25
27
|
const changedKeys = Object.keys(delta).filter((key) => this.data[key] !== delta[key]);
|
|
26
28
|
this.data = { ...this.data, ...delta };
|
|
29
|
+
this.lastUpdated = new Date();
|
|
27
30
|
this.emit('updated', changedKeys);
|
|
28
31
|
}
|
|
29
32
|
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const LIB_VERSION = "0.4.0-aplha.
|
|
1
|
+
export const LIB_VERSION = "0.4.0-aplha.5";
|