@sogni-ai/expo-client 1.0.0-alpha.10

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 (262) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.md +411 -0
  3. package/dist/cjs/Account/index.d.ts +60 -0
  4. package/dist/cjs/Account/index.d.ts.map +1 -0
  5. package/dist/cjs/Account/index.js +188 -0
  6. package/dist/cjs/Account/index.js.map +1 -0
  7. package/dist/cjs/Account/types.d.ts +43 -0
  8. package/dist/cjs/Account/types.d.ts.map +1 -0
  9. package/dist/cjs/Account/types.js +18 -0
  10. package/dist/cjs/Account/types.js.map +1 -0
  11. package/dist/cjs/ApiClient/WebSocketClient/events.d.ts +139 -0
  12. package/dist/cjs/ApiClient/WebSocketClient/events.d.ts.map +1 -0
  13. package/dist/cjs/ApiClient/WebSocketClient/events.js +3 -0
  14. package/dist/cjs/ApiClient/WebSocketClient/events.js.map +1 -0
  15. package/dist/cjs/ApiClient/WebSocketClient/index.d.ts +45 -0
  16. package/dist/cjs/ApiClient/WebSocketClient/index.d.ts.map +1 -0
  17. package/dist/cjs/ApiClient/WebSocketClient/index.js +283 -0
  18. package/dist/cjs/ApiClient/WebSocketClient/index.js.map +1 -0
  19. package/dist/cjs/ApiClient/WebSocketClient/normalize.d.ts +45 -0
  20. package/dist/cjs/ApiClient/WebSocketClient/normalize.d.ts.map +1 -0
  21. package/dist/cjs/ApiClient/WebSocketClient/normalize.js +245 -0
  22. package/dist/cjs/ApiClient/WebSocketClient/normalize.js.map +1 -0
  23. package/dist/cjs/ApiClient/WebSocketClient/types.d.ts +9 -0
  24. package/dist/cjs/ApiClient/WebSocketClient/types.d.ts.map +1 -0
  25. package/dist/cjs/ApiClient/WebSocketClient/types.js +3 -0
  26. package/dist/cjs/ApiClient/WebSocketClient/types.js.map +1 -0
  27. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.d.ts +161 -0
  28. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.d.ts.map +1 -0
  29. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.js +11 -0
  30. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.js.map +1 -0
  31. package/dist/cjs/ApiClient/index.d.ts +60 -0
  32. package/dist/cjs/ApiClient/index.d.ts.map +1 -0
  33. package/dist/cjs/ApiClient/index.js +87 -0
  34. package/dist/cjs/ApiClient/index.js.map +1 -0
  35. package/dist/cjs/Chat/ChatStream.d.ts +42 -0
  36. package/dist/cjs/Chat/ChatStream.d.ts.map +1 -0
  37. package/dist/cjs/Chat/ChatStream.js +146 -0
  38. package/dist/cjs/Chat/ChatStream.js.map +1 -0
  39. package/dist/cjs/Chat/index.d.ts +61 -0
  40. package/dist/cjs/Chat/index.d.ts.map +1 -0
  41. package/dist/cjs/Chat/index.js +179 -0
  42. package/dist/cjs/Chat/index.js.map +1 -0
  43. package/dist/cjs/Chat/tools.d.ts +13 -0
  44. package/dist/cjs/Chat/tools.d.ts.map +1 -0
  45. package/dist/cjs/Chat/tools.js +22 -0
  46. package/dist/cjs/Chat/tools.js.map +1 -0
  47. package/dist/cjs/Chat/types.d.ts +153 -0
  48. package/dist/cjs/Chat/types.d.ts.map +1 -0
  49. package/dist/cjs/Chat/types.js +3 -0
  50. package/dist/cjs/Chat/types.js.map +1 -0
  51. package/dist/cjs/Projects/ControlNet.d.ts +30 -0
  52. package/dist/cjs/Projects/ControlNet.d.ts.map +1 -0
  53. package/dist/cjs/Projects/ControlNet.js +45 -0
  54. package/dist/cjs/Projects/ControlNet.js.map +1 -0
  55. package/dist/cjs/Projects/createJobRequestMessage.d.ts +11 -0
  56. package/dist/cjs/Projects/createJobRequestMessage.d.ts.map +1 -0
  57. package/dist/cjs/Projects/createJobRequestMessage.js +239 -0
  58. package/dist/cjs/Projects/createJobRequestMessage.js.map +1 -0
  59. package/dist/cjs/Projects/index.d.ts +96 -0
  60. package/dist/cjs/Projects/index.d.ts.map +1 -0
  61. package/dist/cjs/Projects/index.js +536 -0
  62. package/dist/cjs/Projects/index.js.map +1 -0
  63. package/dist/cjs/Projects/restNormalize.d.ts +60 -0
  64. package/dist/cjs/Projects/restNormalize.d.ts.map +1 -0
  65. package/dist/cjs/Projects/restNormalize.js +89 -0
  66. package/dist/cjs/Projects/restNormalize.js.map +1 -0
  67. package/dist/cjs/Projects/types.d.ts +233 -0
  68. package/dist/cjs/Projects/types.d.ts.map +1 -0
  69. package/dist/cjs/Projects/types.js +3 -0
  70. package/dist/cjs/Projects/types.js.map +1 -0
  71. package/dist/cjs/Projects/utils.d.ts +23 -0
  72. package/dist/cjs/Projects/utils.d.ts.map +1 -0
  73. package/dist/cjs/Projects/utils.js +65 -0
  74. package/dist/cjs/Projects/utils.js.map +1 -0
  75. package/dist/cjs/index.d.ts +63 -0
  76. package/dist/cjs/index.d.ts.map +1 -0
  77. package/dist/cjs/index.js +116 -0
  78. package/dist/cjs/index.js.map +1 -0
  79. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.d.ts +15 -0
  80. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.d.ts.map +1 -0
  81. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.js +47 -0
  82. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
  83. package/dist/cjs/lib/AuthManager/AuthManagerBase.d.ts +23 -0
  84. package/dist/cjs/lib/AuthManager/AuthManagerBase.d.ts.map +1 -0
  85. package/dist/cjs/lib/AuthManager/AuthManagerBase.js +14 -0
  86. package/dist/cjs/lib/AuthManager/AuthManagerBase.js.map +1 -0
  87. package/dist/cjs/lib/AuthManager/AuthStorage.d.ts +11 -0
  88. package/dist/cjs/lib/AuthManager/AuthStorage.d.ts.map +1 -0
  89. package/dist/cjs/lib/AuthManager/AuthStorage.js +50 -0
  90. package/dist/cjs/lib/AuthManager/AuthStorage.js.map +1 -0
  91. package/dist/cjs/lib/AuthManager/TokenAuthManager.d.ts +35 -0
  92. package/dist/cjs/lib/AuthManager/TokenAuthManager.d.ts.map +1 -0
  93. package/dist/cjs/lib/AuthManager/TokenAuthManager.js +164 -0
  94. package/dist/cjs/lib/AuthManager/TokenAuthManager.js.map +1 -0
  95. package/dist/cjs/lib/AuthManager/index.d.ts +7 -0
  96. package/dist/cjs/lib/AuthManager/index.d.ts.map +1 -0
  97. package/dist/cjs/lib/AuthManager/index.js +13 -0
  98. package/dist/cjs/lib/AuthManager/index.js.map +1 -0
  99. package/dist/cjs/lib/Cache.d.ts +12 -0
  100. package/dist/cjs/lib/Cache.d.ts.map +1 -0
  101. package/dist/cjs/lib/Cache.js +36 -0
  102. package/dist/cjs/lib/Cache.js.map +1 -0
  103. package/dist/cjs/lib/DefaultLogger.d.ts +17 -0
  104. package/dist/cjs/lib/DefaultLogger.d.ts.map +1 -0
  105. package/dist/cjs/lib/DefaultLogger.js +36 -0
  106. package/dist/cjs/lib/DefaultLogger.js.map +1 -0
  107. package/dist/cjs/lib/RestClient.d.ts +18 -0
  108. package/dist/cjs/lib/RestClient.d.ts.map +1 -0
  109. package/dist/cjs/lib/RestClient.js +67 -0
  110. package/dist/cjs/lib/RestClient.js.map +1 -0
  111. package/dist/cjs/lib/TypedEventEmitter.d.ts +16 -0
  112. package/dist/cjs/lib/TypedEventEmitter.d.ts.map +1 -0
  113. package/dist/cjs/lib/TypedEventEmitter.js +46 -0
  114. package/dist/cjs/lib/TypedEventEmitter.js.map +1 -0
  115. package/dist/cjs/lib/base64.d.ts +3 -0
  116. package/dist/cjs/lib/base64.d.ts.map +1 -0
  117. package/dist/cjs/lib/base64.js +21 -0
  118. package/dist/cjs/lib/base64.js.map +1 -0
  119. package/dist/cjs/lib/getUUID.d.ts +12 -0
  120. package/dist/cjs/lib/getUUID.d.ts.map +1 -0
  121. package/dist/cjs/lib/getUUID.js +29 -0
  122. package/dist/cjs/lib/getUUID.js.map +1 -0
  123. package/dist/cjs/lib/mediaInput.d.ts +33 -0
  124. package/dist/cjs/lib/mediaInput.d.ts.map +1 -0
  125. package/dist/cjs/lib/mediaInput.js +32 -0
  126. package/dist/cjs/lib/mediaInput.js.map +1 -0
  127. package/dist/cjs/lib/utils.d.ts +10 -0
  128. package/dist/cjs/lib/utils.d.ts.map +1 -0
  129. package/dist/cjs/lib/utils.js +24 -0
  130. package/dist/cjs/lib/utils.js.map +1 -0
  131. package/dist/cjs/types/ErrorData.d.ts +7 -0
  132. package/dist/cjs/types/ErrorData.d.ts.map +1 -0
  133. package/dist/cjs/types/ErrorData.js +3 -0
  134. package/dist/cjs/types/ErrorData.js.map +1 -0
  135. package/dist/cjs/types/json.d.ts +6 -0
  136. package/dist/cjs/types/json.d.ts.map +1 -0
  137. package/dist/cjs/types/json.js +3 -0
  138. package/dist/cjs/types/json.js.map +1 -0
  139. package/dist/cjs/types/token.d.ts +2 -0
  140. package/dist/cjs/types/token.d.ts.map +1 -0
  141. package/dist/cjs/types/token.js +3 -0
  142. package/dist/cjs/types/token.js.map +1 -0
  143. package/dist/cjs/version.d.ts +2 -0
  144. package/dist/cjs/version.d.ts.map +1 -0
  145. package/dist/cjs/version.js +5 -0
  146. package/dist/cjs/version.js.map +1 -0
  147. package/dist/cjs/wallet.d.ts +59 -0
  148. package/dist/cjs/wallet.d.ts.map +1 -0
  149. package/dist/cjs/wallet.js +125 -0
  150. package/dist/cjs/wallet.js.map +1 -0
  151. package/dist/esm/Account/index.js +183 -0
  152. package/dist/esm/Account/index.js.map +1 -0
  153. package/dist/esm/Account/types.js +15 -0
  154. package/dist/esm/Account/types.js.map +1 -0
  155. package/dist/esm/ApiClient/WebSocketClient/events.js +2 -0
  156. package/dist/esm/ApiClient/WebSocketClient/events.js.map +1 -0
  157. package/dist/esm/ApiClient/WebSocketClient/index.js +278 -0
  158. package/dist/esm/ApiClient/WebSocketClient/index.js.map +1 -0
  159. package/dist/esm/ApiClient/WebSocketClient/normalize.js +229 -0
  160. package/dist/esm/ApiClient/WebSocketClient/normalize.js.map +1 -0
  161. package/dist/esm/ApiClient/WebSocketClient/types.js +2 -0
  162. package/dist/esm/ApiClient/WebSocketClient/types.js.map +1 -0
  163. package/dist/esm/ApiClient/WebSocketClient/wireTypes.js +10 -0
  164. package/dist/esm/ApiClient/WebSocketClient/wireTypes.js.map +1 -0
  165. package/dist/esm/ApiClient/index.js +80 -0
  166. package/dist/esm/ApiClient/index.js.map +1 -0
  167. package/dist/esm/Chat/ChatStream.js +144 -0
  168. package/dist/esm/Chat/ChatStream.js.map +1 -0
  169. package/dist/esm/Chat/index.js +174 -0
  170. package/dist/esm/Chat/index.js.map +1 -0
  171. package/dist/esm/Chat/tools.js +19 -0
  172. package/dist/esm/Chat/tools.js.map +1 -0
  173. package/dist/esm/Chat/types.js +2 -0
  174. package/dist/esm/Chat/types.js.map +1 -0
  175. package/dist/esm/Projects/ControlNet.js +41 -0
  176. package/dist/esm/Projects/ControlNet.js.map +1 -0
  177. package/dist/esm/Projects/createJobRequestMessage.js +236 -0
  178. package/dist/esm/Projects/createJobRequestMessage.js.map +1 -0
  179. package/dist/esm/Projects/index.js +531 -0
  180. package/dist/esm/Projects/index.js.map +1 -0
  181. package/dist/esm/Projects/restNormalize.js +86 -0
  182. package/dist/esm/Projects/restNormalize.js.map +1 -0
  183. package/dist/esm/Projects/types.js +2 -0
  184. package/dist/esm/Projects/types.js.map +1 -0
  185. package/dist/esm/Projects/utils.js +55 -0
  186. package/dist/esm/Projects/utils.js.map +1 -0
  187. package/dist/esm/index.js +72 -0
  188. package/dist/esm/index.js.map +1 -0
  189. package/dist/esm/lib/AuthManager/ApiKeyAuthManager.js +42 -0
  190. package/dist/esm/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
  191. package/dist/esm/lib/AuthManager/AuthManagerBase.js +9 -0
  192. package/dist/esm/lib/AuthManager/AuthManagerBase.js.map +1 -0
  193. package/dist/esm/lib/AuthManager/AuthStorage.js +13 -0
  194. package/dist/esm/lib/AuthManager/AuthStorage.js.map +1 -0
  195. package/dist/esm/lib/AuthManager/TokenAuthManager.js +159 -0
  196. package/dist/esm/lib/AuthManager/TokenAuthManager.js.map +1 -0
  197. package/dist/esm/lib/AuthManager/index.js +5 -0
  198. package/dist/esm/lib/AuthManager/index.js.map +1 -0
  199. package/dist/esm/lib/Cache.js +33 -0
  200. package/dist/esm/lib/Cache.js.map +1 -0
  201. package/dist/esm/lib/DefaultLogger.js +32 -0
  202. package/dist/esm/lib/DefaultLogger.js.map +1 -0
  203. package/dist/esm/lib/RestClient.js +62 -0
  204. package/dist/esm/lib/RestClient.js.map +1 -0
  205. package/dist/esm/lib/TypedEventEmitter.js +44 -0
  206. package/dist/esm/lib/TypedEventEmitter.js.map +1 -0
  207. package/dist/esm/lib/base64.js +17 -0
  208. package/dist/esm/lib/base64.js.map +1 -0
  209. package/dist/esm/lib/getUUID.js +26 -0
  210. package/dist/esm/lib/getUUID.js.map +1 -0
  211. package/dist/esm/lib/mediaInput.js +28 -0
  212. package/dist/esm/lib/mediaInput.js.map +1 -0
  213. package/dist/esm/lib/utils.js +19 -0
  214. package/dist/esm/lib/utils.js.map +1 -0
  215. package/dist/esm/types/ErrorData.js +2 -0
  216. package/dist/esm/types/ErrorData.js.map +1 -0
  217. package/dist/esm/types/json.js +2 -0
  218. package/dist/esm/types/json.js.map +1 -0
  219. package/dist/esm/types/token.js +2 -0
  220. package/dist/esm/types/token.js.map +1 -0
  221. package/dist/esm/version.js +2 -0
  222. package/dist/esm/version.js.map +1 -0
  223. package/dist/esm/wallet.js +117 -0
  224. package/dist/esm/wallet.js.map +1 -0
  225. package/package.json +92 -0
  226. package/src/Account/index.ts +214 -0
  227. package/src/Account/types.ts +61 -0
  228. package/src/ApiClient/WebSocketClient/events.ts +168 -0
  229. package/src/ApiClient/WebSocketClient/index.ts +345 -0
  230. package/src/ApiClient/WebSocketClient/normalize.ts +287 -0
  231. package/src/ApiClient/WebSocketClient/types.ts +10 -0
  232. package/src/ApiClient/WebSocketClient/wireTypes.ts +183 -0
  233. package/src/ApiClient/index.ts +147 -0
  234. package/src/Chat/ChatStream.ts +164 -0
  235. package/src/Chat/index.ts +224 -0
  236. package/src/Chat/tools.ts +23 -0
  237. package/src/Chat/types.ts +165 -0
  238. package/src/Projects/ControlNet.ts +84 -0
  239. package/src/Projects/createJobRequestMessage.ts +241 -0
  240. package/src/Projects/index.ts +608 -0
  241. package/src/Projects/restNormalize.ts +154 -0
  242. package/src/Projects/types.ts +266 -0
  243. package/src/Projects/utils.ts +60 -0
  244. package/src/index.ts +217 -0
  245. package/src/lib/AuthManager/ApiKeyAuthManager.ts +52 -0
  246. package/src/lib/AuthManager/AuthManagerBase.ts +35 -0
  247. package/src/lib/AuthManager/AuthStorage.ts +21 -0
  248. package/src/lib/AuthManager/TokenAuthManager.ts +179 -0
  249. package/src/lib/AuthManager/index.ts +8 -0
  250. package/src/lib/Cache.ts +45 -0
  251. package/src/lib/DefaultLogger.ts +47 -0
  252. package/src/lib/RestClient.ts +77 -0
  253. package/src/lib/TypedEventEmitter.ts +52 -0
  254. package/src/lib/base64.ts +17 -0
  255. package/src/lib/getUUID.ts +27 -0
  256. package/src/lib/mediaInput.ts +54 -0
  257. package/src/lib/utils.ts +21 -0
  258. package/src/types/ErrorData.ts +7 -0
  259. package/src/types/json.ts +5 -0
  260. package/src/types/token.ts +1 -0
  261. package/src/version.ts +1 -0
  262. package/src/wallet.ts +158 -0
@@ -0,0 +1,536 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ApiClient_1 = require("../ApiClient");
7
+ const TypedEventEmitter_1 = __importDefault(require("../lib/TypedEventEmitter"));
8
+ const getUUID_1 = __importDefault(require("../lib/getUUID"));
9
+ const mediaInput_1 = require("../lib/mediaInput");
10
+ const createJobRequestMessage_1 = __importDefault(require("./createJobRequestMessage"));
11
+ const ControlNet_1 = require("./ControlNet");
12
+ const restNormalize_1 = require("./restNormalize");
13
+ const TERMINAL_PROJECT_STATUSES = ['completed', 'failed', 'canceled'];
14
+ const TERMINAL_JOB_STATUSES = ['completed', 'failed', 'canceled'];
15
+ const GC_DELAY_MS = 30000;
16
+ class ProjectsApi extends TypedEventEmitter_1.default {
17
+ constructor(client) {
18
+ super();
19
+ this._projects = new Map();
20
+ this._subscribers = new Map();
21
+ this._gcTimers = new Map();
22
+ this._client = client;
23
+ this._wireSocketHandlers();
24
+ }
25
+ /** List models available on the given network. Defaults to the client's current network. */
26
+ async getAvailableModels(network) {
27
+ const net = network ?? this._client.socket.supernetType;
28
+ const res = await this._client.socketRest.get(`/api/v1/status/network/${net}/models`);
29
+ // The endpoint returns either an array of models directly or wrapped in
30
+ // { models: [...] }. Accept either shape.
31
+ const data = res.data;
32
+ if (Array.isArray(data))
33
+ return data;
34
+ if (data && Array.isArray(data.models))
35
+ return data.models;
36
+ return [];
37
+ }
38
+ /**
39
+ * Create a generation project (image, video, or audio).
40
+ *
41
+ * Returns the initial Project snapshot immediately; subscribe via
42
+ * `subscribe(id, cb)` or `waitForCompletion(id)` to observe state changes as
43
+ * the server processes it.
44
+ *
45
+ * For image projects, `startingImage`, `contextImages[]`, and
46
+ * `controlNet.image` are uploaded first. For video projects, `referenceImage`,
47
+ * `referenceImageEnd`, `referenceAudio`, and `referenceVideo` are uploaded
48
+ * first. Reference uploads happen in parallel; the WS `jobRequest` is sent
49
+ * once all uploads complete.
50
+ */
51
+ async create(params) {
52
+ if (!this._client.socket.isConnected) {
53
+ throw new Error('Cannot create project: WebSocket is not connected. Authenticate first and wait for `connected` event.');
54
+ }
55
+ const id = (0, getUUID_1.default)();
56
+ const project = {
57
+ id,
58
+ params,
59
+ status: 'pending',
60
+ progress: 0,
61
+ eta: null,
62
+ jobs: [],
63
+ resultUrls: [],
64
+ error: null,
65
+ createdAt: Date.now(),
66
+ updatedAt: Date.now()
67
+ };
68
+ this._projects.set(id, project);
69
+ const type = params.type ?? 'image';
70
+ if (type === 'image') {
71
+ await this._uploadImageRefs(id, params);
72
+ }
73
+ else if (type === 'video') {
74
+ await this._uploadVideoRefs(id, params);
75
+ }
76
+ const message = (0, createJobRequestMessage_1.default)(id, params);
77
+ await this._client.socket.send('jobRequest', message);
78
+ this._notifyChanged(project);
79
+ return project;
80
+ }
81
+ async _uploadImageRefs(projectId, params) {
82
+ if (params.startingImage) {
83
+ await this._uploadMedia(projectId, 'startingImage', params.startingImage);
84
+ }
85
+ if (params.contextImages && params.contextImages.length) {
86
+ const max = (0, ControlNet_1.getMaxContextImages)(params.modelId);
87
+ if (params.contextImages.length > max) {
88
+ throw new Error(`Model ${params.modelId} accepts at most ${max} context images (got ${params.contextImages.length})`);
89
+ }
90
+ await Promise.all(params.contextImages.map((img, idx) => this._uploadMedia(projectId, `contextImage${idx + 1}`, img)));
91
+ }
92
+ if (params.controlNet?.image) {
93
+ await this._uploadMedia(projectId, 'cnImage', params.controlNet.image);
94
+ }
95
+ }
96
+ async _uploadVideoRefs(projectId, params) {
97
+ const uploads = [];
98
+ if (params.referenceImage) {
99
+ uploads.push(this._uploadMedia(projectId, 'referenceImage', params.referenceImage));
100
+ }
101
+ if (params.referenceImageEnd) {
102
+ uploads.push(this._uploadMedia(projectId, 'referenceImageEnd', params.referenceImageEnd));
103
+ }
104
+ if (params.referenceAudio) {
105
+ uploads.push(this._uploadMedia(projectId, 'referenceAudio', params.referenceAudio));
106
+ }
107
+ if (params.referenceVideo) {
108
+ uploads.push(this._uploadMedia(projectId, 'referenceVideo', params.referenceVideo));
109
+ }
110
+ if (uploads.length)
111
+ await Promise.all(uploads);
112
+ }
113
+ async _uploadMedia(projectId, type, media) {
114
+ const imageId = (0, getUUID_1.default)();
115
+ const { body, contentType } = await (0, mediaInput_1.toFetchBody)(media);
116
+ const presignedUrl = await this._getUploadUrl({
117
+ imageId,
118
+ jobId: projectId,
119
+ type,
120
+ ...(contentType ? { contentType } : {})
121
+ });
122
+ const headers = {};
123
+ if (contentType)
124
+ headers['Content-Type'] = contentType;
125
+ const res = await fetch(presignedUrl, {
126
+ method: 'PUT',
127
+ headers,
128
+ body
129
+ });
130
+ if (!res.ok) {
131
+ throw new ApiClient_1.ApiError(res.status, {
132
+ status: 'error',
133
+ errorCode: 0,
134
+ message: `Failed to upload ${type} (HTTP ${res.status})`
135
+ });
136
+ }
137
+ return imageId;
138
+ }
139
+ async _getUploadUrl(params) {
140
+ const res = await this._client.socketRest.get('/v1/image/uploadUrl', params);
141
+ const d = res.data;
142
+ return typeof d === 'string' ? d : d.url;
143
+ }
144
+ /** Get the cached snapshot for a project, or undefined if unknown. */
145
+ get(projectId) {
146
+ return this._projects.get(projectId.toUpperCase());
147
+ }
148
+ /**
149
+ * Fetch a project's current state from REST and cache it.
150
+ *
151
+ * Use this on cold launch when you have a persisted project ID but no
152
+ * in-memory snapshot (e.g., the app was killed mid-generation). The server
153
+ * returns the latest known state; if the project is still in flight, the
154
+ * SDK will keep updating the snapshot via socket events.
155
+ *
156
+ * @param projectId Server project ID.
157
+ * @param paramsOverride Optional. The original ProjectParams used to create
158
+ * the project. The REST response only includes a subset of generation
159
+ * settings; pass the original params if you persisted them (e.g., in MMKV)
160
+ * so the returned snapshot's `params` field is fully populated.
161
+ */
162
+ async fetch(projectId, paramsOverride) {
163
+ const id = projectId.toUpperCase();
164
+ const res = await this._client.rest.get(`/v1/projects/${id}`);
165
+ const project = (0, restNormalize_1.rawProjectToProject)(res.data, paramsOverride);
166
+ this._projects.set(project.id, project);
167
+ this._notifyChanged(project);
168
+ return project;
169
+ }
170
+ /** Subscribe to changes for a specific project. Returns an unsubscribe function. */
171
+ subscribe(projectId, listener) {
172
+ const id = projectId.toUpperCase();
173
+ let set = this._subscribers.get(id);
174
+ if (!set) {
175
+ set = new Set();
176
+ this._subscribers.set(id, set);
177
+ }
178
+ set.add(listener);
179
+ return () => {
180
+ const current = this._subscribers.get(id);
181
+ if (!current)
182
+ return;
183
+ current.delete(listener);
184
+ if (current.size === 0)
185
+ this._subscribers.delete(id);
186
+ };
187
+ }
188
+ /**
189
+ * Resolve when the project reaches a terminal state. On success, returns the
190
+ * downloadable result URLs (fetched from the server). On failure or cancel,
191
+ * rejects with an Error describing the reason.
192
+ */
193
+ async waitForCompletion(projectId) {
194
+ const id = projectId.toUpperCase();
195
+ const project = this._projects.get(id);
196
+ if (!project) {
197
+ throw new Error(`Project ${projectId} is not known to this client`);
198
+ }
199
+ if (project.status === 'completed') {
200
+ return project.resultUrls.length ? project.resultUrls : this._fetchResultUrls(project);
201
+ }
202
+ if (project.status === 'failed' || project.status === 'canceled') {
203
+ throw new Error(project.error?.message || `Project ${project.status}`);
204
+ }
205
+ return new Promise((resolve, reject) => {
206
+ const unsubscribe = this.subscribe(id, (p) => {
207
+ if (p.status === 'completed') {
208
+ unsubscribe();
209
+ if (p.resultUrls.length)
210
+ resolve(p.resultUrls);
211
+ else
212
+ this._fetchResultUrls(p).then(resolve).catch(reject);
213
+ }
214
+ else if (p.status === 'failed' || p.status === 'canceled') {
215
+ unsubscribe();
216
+ reject(new Error(p.error?.message || `Project ${p.status}`));
217
+ }
218
+ });
219
+ });
220
+ }
221
+ /** Request a download URL for a specific job's result image. */
222
+ async getResultUrl(projectId, jobId) {
223
+ const res = await this._client.socketRest.get(`/v1/image/downloadUrl`, { projectId: projectId.toUpperCase(), jobId: jobId.toUpperCase(), type: 'complete' });
224
+ const d = res.data;
225
+ return typeof d === 'string' ? d : d.url;
226
+ }
227
+ /**
228
+ * Request cancellation of a project. Server confirms via
229
+ * `artistCancelConfirmation`; the project's status flips to 'canceled' if
230
+ * accepted, otherwise stays in its current state.
231
+ */
232
+ async cancel(projectId) {
233
+ const id = projectId.toUpperCase();
234
+ await this._client.socket.send('jobError', {
235
+ jobID: id,
236
+ error: 'artistCanceled',
237
+ error_message: 'Artist Cancelled Job',
238
+ isFromWorker: false
239
+ });
240
+ }
241
+ // ===========================================================================
242
+ // Internal: event wiring
243
+ // ===========================================================================
244
+ _wireSocketHandlers() {
245
+ const s = this._client.socket;
246
+ s.on('jobStarted', (e) => this._onJobStarted(e));
247
+ s.on('jobInitiatingModel', (e) => this._onJobInitiatingModel(e));
248
+ s.on('jobLifecycleCompleted', (e) => this._onJobLifecycleCompleted(e));
249
+ s.on('jobProgress', (e) => this._onJobProgress(e));
250
+ s.on('jobResult', (e) => this._onJobResult(e));
251
+ s.on('jobError', (e) => this._onJobError(e));
252
+ s.on('jobETA', (e) => this._onJobETA(e));
253
+ s.on('artistCancelConfirmation', (e) => this._onCancelConfirmation(e));
254
+ }
255
+ _onJobStarted(e) {
256
+ const project = this._projects.get(e.projectId);
257
+ if (!project)
258
+ return;
259
+ const next = this._withJobMutation(project, e.jobId, (job) => ({
260
+ ...job,
261
+ status: 'processing',
262
+ workerName: e.workerName
263
+ }));
264
+ this._setStatusIfPending(next, 'processing');
265
+ this._notifyChanged(next);
266
+ }
267
+ _onJobInitiatingModel(e) {
268
+ const project = this._projects.get(e.projectId);
269
+ if (!project)
270
+ return;
271
+ const next = this._withJobMutation(project, e.jobId, (job) => ({
272
+ ...job,
273
+ status: 'initiatingModel'
274
+ }));
275
+ this._setStatusIfPending(next, 'processing');
276
+ this._notifyChanged(next);
277
+ }
278
+ _onJobLifecycleCompleted(e) {
279
+ // jobState.type === 'jobCompleted' is the lifecycle marker from server.
280
+ // The real result data arrives via jobResult; we just ensure the job is
281
+ // marked completed here if it wasn't already.
282
+ const project = this._projects.get(e.projectId);
283
+ if (!project)
284
+ return;
285
+ const next = this._withJobMutation(project, e.jobId, (job) => ({
286
+ ...job,
287
+ status: job.status === 'failed' ? 'failed' : 'completed',
288
+ progress: 1
289
+ }));
290
+ this._maybeFinalizeProject(next);
291
+ }
292
+ _onJobProgress(e) {
293
+ const project = this._projects.get(e.projectId);
294
+ if (!project)
295
+ return;
296
+ const next = this._withJobMutation(project, e.jobId, (job) => ({
297
+ ...job,
298
+ status: 'processing',
299
+ progress: e.progress,
300
+ step: e.step,
301
+ stepCount: e.stepCount
302
+ }));
303
+ this._setStatusIfPending(next, 'processing');
304
+ next.progress = this._computeOverallProgress(next.jobs);
305
+ this._notifyChanged(next);
306
+ this.emit('progress', { project: next, jobId: e.jobId });
307
+ }
308
+ _onJobResult(e) {
309
+ const project = this._projects.get(e.projectId);
310
+ if (!project)
311
+ return;
312
+ if (e.userCanceled) {
313
+ const error = {
314
+ code: 5004,
315
+ originalCode: 'artistCanceled',
316
+ message: 'Artist cancelled the job'
317
+ };
318
+ const next = this._withJobMutation(project, e.jobId, (job) => ({
319
+ ...job,
320
+ status: 'canceled',
321
+ error
322
+ }));
323
+ this._maybeFinalizeProject(next);
324
+ return;
325
+ }
326
+ if (e.triggeredNSFWFilter) {
327
+ const error = {
328
+ code: 5006,
329
+ originalCode: 'sensitiveContent',
330
+ message: 'NSFW filter triggered'
331
+ };
332
+ const next = this._withJobMutation(project, e.jobId, (job) => ({
333
+ ...job,
334
+ status: 'failed',
335
+ isNSFW: true,
336
+ seed: e.seed,
337
+ error
338
+ }));
339
+ this._maybeFinalizeProject(next);
340
+ return;
341
+ }
342
+ const next = this._withJobMutation(project, e.jobId, (job) => ({
343
+ ...job,
344
+ status: 'completed',
345
+ progress: 1,
346
+ seed: e.seed
347
+ }));
348
+ this._maybeFinalizeProject(next);
349
+ }
350
+ _onJobError(e) {
351
+ const project = this._projects.get(e.projectId);
352
+ if (!project)
353
+ return;
354
+ const error = {
355
+ code: 5000,
356
+ originalCode: e.rawCode,
357
+ message: e.message
358
+ };
359
+ if (e.jobId) {
360
+ const next = this._withJobMutation(project, e.jobId, (job) => ({
361
+ ...job,
362
+ status: 'failed',
363
+ error
364
+ }));
365
+ this._maybeFinalizeProject(next);
366
+ return;
367
+ }
368
+ // Project-level error
369
+ const next = {
370
+ ...project,
371
+ status: 'failed',
372
+ error,
373
+ updatedAt: Date.now()
374
+ };
375
+ this._projects.set(project.id, next);
376
+ this._notifyChanged(next);
377
+ this.emit('failed', next);
378
+ this._scheduleGC(next.id);
379
+ }
380
+ _onJobETA(e) {
381
+ const project = this._projects.get(e.projectId);
382
+ if (!project)
383
+ return;
384
+ const next = { ...project, eta: e.etaSeconds, updatedAt: Date.now() };
385
+ this._projects.set(project.id, next);
386
+ this._notifyChanged(next);
387
+ }
388
+ _onCancelConfirmation(e) {
389
+ const project = this._projects.get(e.projectId);
390
+ if (!project)
391
+ return;
392
+ if (!e.didCancel) {
393
+ this._client.logger.warn(`Cancel request for ${e.projectId} was rejected: ${e.errorMessage || 'unknown reason'}`);
394
+ return;
395
+ }
396
+ const next = {
397
+ ...project,
398
+ status: 'canceled',
399
+ error: { code: 5004, originalCode: 'artistCanceled', message: 'Artist canceled project' },
400
+ updatedAt: Date.now()
401
+ };
402
+ this._projects.set(project.id, next);
403
+ this._notifyChanged(next);
404
+ this.emit('failed', next);
405
+ this._scheduleGC(next.id);
406
+ }
407
+ // ===========================================================================
408
+ // Internal: state machinery
409
+ // ===========================================================================
410
+ _withJobMutation(project, jobId, mutate) {
411
+ if (!jobId) {
412
+ // Some events (jobStarted before imgID is assigned) carry no jobId. We
413
+ // don't synthesize a job in that case; just bump the updatedAt.
414
+ const next = { ...project, updatedAt: Date.now() };
415
+ this._projects.set(project.id, next);
416
+ return next;
417
+ }
418
+ const existingIdx = project.jobs.findIndex((j) => j.id === jobId);
419
+ const existing = existingIdx >= 0 ? project.jobs[existingIdx] : this._emptyJob(project.id, jobId);
420
+ const updated = mutate(existing);
421
+ const jobs = existingIdx >= 0
422
+ ? project.jobs.map((j, i) => (i === existingIdx ? updated : j))
423
+ : [...project.jobs, updated];
424
+ const next = { ...project, jobs, updatedAt: Date.now() };
425
+ this._projects.set(project.id, next);
426
+ return next;
427
+ }
428
+ _emptyJob(projectId, jobId) {
429
+ return {
430
+ id: jobId,
431
+ projectId,
432
+ status: 'pending',
433
+ progress: 0,
434
+ step: 0,
435
+ stepCount: 0,
436
+ seed: null,
437
+ resultUrl: null,
438
+ previewUrl: null,
439
+ isNSFW: false,
440
+ workerName: null,
441
+ error: null
442
+ };
443
+ }
444
+ _setStatusIfPending(project, status) {
445
+ if (project.status !== 'pending')
446
+ return;
447
+ const next = { ...project, status, updatedAt: Date.now() };
448
+ this._projects.set(project.id, next);
449
+ }
450
+ _computeOverallProgress(jobs) {
451
+ if (!jobs.length)
452
+ return 0;
453
+ const sum = jobs.reduce((acc, j) => acc + (j.progress || 0), 0);
454
+ return sum / jobs.length;
455
+ }
456
+ _maybeFinalizeProject(project) {
457
+ const expected = Math.max(1, project.params.numberOfMedia);
458
+ const knownJobs = project.jobs.length;
459
+ const completedJobs = project.jobs.filter((j) => j.status === 'completed').length;
460
+ const allKnownTerminal = knownJobs > 0 && project.jobs.every((j) => TERMINAL_JOB_STATUSES.includes(j.status));
461
+ if (knownJobs >= expected && allKnownTerminal) {
462
+ const anyCompleted = completedJobs > 0;
463
+ const next = {
464
+ ...project,
465
+ status: anyCompleted ? 'completed' : 'failed',
466
+ progress: this._computeOverallProgress(project.jobs),
467
+ error: anyCompleted
468
+ ? null
469
+ : (project.jobs.find((j) => j.error)?.error ?? {
470
+ code: 5000,
471
+ message: 'All jobs failed'
472
+ }),
473
+ updatedAt: Date.now()
474
+ };
475
+ this._projects.set(project.id, next);
476
+ this._notifyChanged(next);
477
+ if (next.status === 'completed') {
478
+ this.emit('completed', next);
479
+ }
480
+ else {
481
+ this.emit('failed', next);
482
+ }
483
+ this._scheduleGC(next.id);
484
+ return;
485
+ }
486
+ // Not terminal yet — just notify of the in-progress change.
487
+ const nextProgress = this._computeOverallProgress(project.jobs);
488
+ const next = { ...project, progress: nextProgress, updatedAt: Date.now() };
489
+ this._projects.set(project.id, next);
490
+ this._notifyChanged(next);
491
+ }
492
+ async _fetchResultUrls(project) {
493
+ const urls = [];
494
+ for (const job of project.jobs) {
495
+ if (job.status !== 'completed')
496
+ continue;
497
+ try {
498
+ const url = await this.getResultUrl(project.id, job.id);
499
+ urls.push(url);
500
+ // Update cached snapshot with the resolved URL
501
+ const cached = this._projects.get(project.id);
502
+ if (cached) {
503
+ const jobs = cached.jobs.map((j) => (j.id === job.id ? { ...j, resultUrl: url } : j));
504
+ const next = { ...cached, jobs, resultUrls: urls.slice() };
505
+ this._projects.set(project.id, next);
506
+ this._notifyChanged(next);
507
+ }
508
+ }
509
+ catch (e) {
510
+ this._client.logger.warn(`Failed to fetch result URL for job ${job.id}:`, e);
511
+ }
512
+ }
513
+ return urls;
514
+ }
515
+ _notifyChanged(project) {
516
+ const subs = this._subscribers.get(project.id);
517
+ if (subs) {
518
+ for (const fn of subs)
519
+ fn(project);
520
+ }
521
+ this.emit('changed', project);
522
+ }
523
+ _scheduleGC(projectId) {
524
+ const existing = this._gcTimers.get(projectId);
525
+ if (existing)
526
+ clearTimeout(existing);
527
+ const timer = setTimeout(() => {
528
+ this._projects.delete(projectId);
529
+ this._subscribers.delete(projectId);
530
+ this._gcTimers.delete(projectId);
531
+ }, GC_DELAY_MS);
532
+ this._gcTimers.set(projectId, timer);
533
+ }
534
+ }
535
+ exports.default = ProjectsApi;
536
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Projects/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Translate RawProject / RawJob shapes returned by the /v1/projects/:id
3
+ * endpoint into our public Project / Job types.
4
+ *
5
+ * Same wire-quirk pattern as the socket normalizer: the server uses `imgID`
6
+ * to mean "job id" and its `status` enum uses different values from ours.
7
+ * Everything gets translated here so the rest of the SDK only sees clean
8
+ * public shapes.
9
+ */
10
+ import { Project, ProjectParams } from './types';
11
+ import { SupernetType } from '../ApiClient/WebSocketClient/types';
12
+ export type RawProjectStatus = 'pending' | 'active' | 'assigned' | 'progress' | 'errored' | 'completed' | 'cancelled';
13
+ export type RawWorkerJobStatus = 'pending' | 'jobStarted' | 'initiatingModel' | 'jobProgress' | 'jobCompleted' | 'jobError' | 'cancelled';
14
+ export interface RawAccount {
15
+ id?: string;
16
+ address?: string;
17
+ name?: string;
18
+ username?: string;
19
+ }
20
+ export interface RawWorkerJob {
21
+ id: string;
22
+ imgID?: string;
23
+ worker?: RawAccount;
24
+ createTime?: number;
25
+ startTime?: number | null;
26
+ updateTime?: number;
27
+ endTime?: number;
28
+ status: RawWorkerJobStatus;
29
+ reason?: string;
30
+ performedSteps?: number;
31
+ triggeredNSFWFilter?: boolean;
32
+ seedUsed?: number;
33
+ resultUrl?: string | null;
34
+ }
35
+ export interface RawProject {
36
+ id: string;
37
+ imageCount: number;
38
+ stepCount?: number;
39
+ previewCount?: number;
40
+ createTime?: number;
41
+ updateTime?: number;
42
+ endTime?: number;
43
+ status: RawProjectStatus;
44
+ reason?: string;
45
+ network?: SupernetType;
46
+ workerJobs?: RawWorkerJob[];
47
+ completedWorkerJobs?: RawWorkerJob[];
48
+ model?: {
49
+ id?: string;
50
+ };
51
+ }
52
+ /**
53
+ * Build a Project snapshot from the REST GET /v1/projects/:id payload.
54
+ * `params` is best-effort reconstructed from the few fields the server
55
+ * returns — most generation-time settings (prompt, model options, etc.)
56
+ * are NOT in the REST response, so callers that need the full params
57
+ * should pass them in via `paramsOverride` (e.g., from local storage).
58
+ */
59
+ export declare function rawProjectToProject(raw: RawProject, paramsOverride?: ProjectParams): Project;
60
+ //# sourceMappingURL=restNormalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restNormalize.d.ts","sourceRoot":"","sources":["../../../src/Projects/restNormalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAkB,OAAO,EAAE,aAAa,EAAiB,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAIlE,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,QAAQ,GACR,UAAU,GACV,UAAU,GACV,SAAS,GACT,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,YAAY,GACZ,iBAAiB,GACjB,aAAa,GACb,cAAc,GACd,UAAU,GACV,WAAW,CAAC;AAEhB,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,mBAAmB,CAAC,EAAE,YAAY,EAAE,CAAC;IACrC,KAAK,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzB;AA0CD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,aAAa,GAAG,OAAO,CAkC5F"}