@newgameplusinc/odyssey-asset-manager-sdk 1.0.0
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/README.md +370 -0
- package/dist/index.d.mts +230 -0
- package/dist/index.d.ts +230 -0
- package/dist/index.js +210 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +171 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +34 -0
package/README.md
ADDED
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# odyssey-asset-manager-sdk
|
|
2
|
+
|
|
3
|
+
Official SDK for the Odyssey Asset Manager backend. Provides a fully typed HTTP client for all asset management, upload, and version operations.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install odyssey-asset-manager-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { AssetManagerSDK } from "odyssey-asset-manager-sdk";
|
|
15
|
+
|
|
16
|
+
const sdk = new AssetManagerSDK({
|
|
17
|
+
baseUrl: "https://your-backend.com/api/v1",
|
|
18
|
+
timeout: 30000, // optional, default 30000ms
|
|
19
|
+
});
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## API Reference
|
|
25
|
+
|
|
26
|
+
### Health
|
|
27
|
+
|
|
28
|
+
#### `sdk.getHealth()`
|
|
29
|
+
|
|
30
|
+
Check if the service is healthy.
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
const health = await sdk.getHealth();
|
|
34
|
+
// { status: 'ok', timestamp: '...' }
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
#### `sdk.getRedisHealth()`
|
|
38
|
+
|
|
39
|
+
Check Redis connection health.
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
const redis = await sdk.getRedisHealth();
|
|
43
|
+
// { status: 'ok', latencyMs: 2 }
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
### Assets
|
|
49
|
+
|
|
50
|
+
#### `sdk.getAllAssets()`
|
|
51
|
+
|
|
52
|
+
Get all assets.
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
const assets = await sdk.getAllAssets();
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
#### `sdk.getAsset(assetId)`
|
|
59
|
+
|
|
60
|
+
Get a single asset by ID.
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
const asset = await sdk.getAsset("asset-id");
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
#### `sdk.getAssetsByOrg(orgId)`
|
|
67
|
+
|
|
68
|
+
Get all assets for an organization.
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
const assets = await sdk.getAssetsByOrg("org-id");
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
#### `sdk.updateAsset(assetId, data)`
|
|
75
|
+
|
|
76
|
+
Update asset fields.
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
const updated = await sdk.updateAsset("asset-id", { name: "New Name" });
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
#### `sdk.markAssetAsUploaded(assetId)`
|
|
83
|
+
|
|
84
|
+
Mark asset upload as complete.
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
await sdk.markAssetAsUploaded("asset-id");
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
#### `sdk.markAssetAsValidated(assetId)`
|
|
91
|
+
|
|
92
|
+
Mark asset as validated.
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
await sdk.markAssetAsValidated("asset-id");
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
#### `sdk.markAssetAsFailed(assetId)`
|
|
99
|
+
|
|
100
|
+
Mark asset as failed.
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
await sdk.markAssetAsFailed("asset-id");
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
#### `sdk.deleteAsset(assetId)`
|
|
107
|
+
|
|
108
|
+
Delete an asset.
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
await sdk.deleteAsset("asset-id");
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### Unreal Project Versions
|
|
117
|
+
|
|
118
|
+
#### `sdk.getProjectVersion(versionId)`
|
|
119
|
+
|
|
120
|
+
Get a single project version.
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
const version = await sdk.getProjectVersion("version-id");
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
#### `sdk.getVersionsByAsset(assetId)`
|
|
127
|
+
|
|
128
|
+
Get all versions for an asset.
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
const versions = await sdk.getVersionsByAsset("asset-id");
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
#### `sdk.updateProjectVersion(versionId, data)`
|
|
135
|
+
|
|
136
|
+
Update a project version.
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
const updated = await sdk.updateProjectVersion("version-id", {
|
|
140
|
+
state: "upload_complete",
|
|
141
|
+
target: "Shipping",
|
|
142
|
+
});
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### `sdk.deleteProjectVersion(versionId)`
|
|
146
|
+
|
|
147
|
+
Delete a project version by ID.
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
await sdk.deleteProjectVersion("version-id");
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
#### `sdk.deleteVersionsByAsset(assetId)`
|
|
154
|
+
|
|
155
|
+
Delete all versions for an asset.
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
await sdk.deleteVersionsByAsset("asset-id");
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### Users
|
|
164
|
+
|
|
165
|
+
#### `sdk.getAllUsers()`
|
|
166
|
+
|
|
167
|
+
Get all users.
|
|
168
|
+
|
|
169
|
+
```typescript
|
|
170
|
+
const users = await sdk.getAllUsers();
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
#### `sdk.getUser(userId)`
|
|
174
|
+
|
|
175
|
+
Get a user by ID.
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
const user = await sdk.getUser("user-id");
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
#### `sdk.createUser(data)`
|
|
182
|
+
|
|
183
|
+
Create a new user.
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
const user = await sdk.createUser({ id: "custom-id" });
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
#### `sdk.updateUser(userId, data)`
|
|
190
|
+
|
|
191
|
+
Update a user.
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
const user = await sdk.updateUser("user-id", {});
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
#### `sdk.deleteUser(userId)`
|
|
198
|
+
|
|
199
|
+
Delete a user.
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
await sdk.deleteUser("user-id");
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
### Upload
|
|
208
|
+
|
|
209
|
+
#### `sdk.initiateUpload(data)`
|
|
210
|
+
|
|
211
|
+
Start a new multipart upload session. Returns `uploadId` and `objectName` needed for subsequent calls.
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
const session = await sdk.initiateUpload({
|
|
215
|
+
orgId: "org-id",
|
|
216
|
+
assetType: "UNREAL_PROJECT",
|
|
217
|
+
assetFilename: "MyProject.zip",
|
|
218
|
+
unrealEngineVersion: "5.2.1",
|
|
219
|
+
target: "Development",
|
|
220
|
+
selfPackaged: true,
|
|
221
|
+
volumeRegions: ["ORD1", "LGA1", "LAS1"],
|
|
222
|
+
});
|
|
223
|
+
// { orgId, assetId, assetVersionId, uploadId, objectName }
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
#### `sdk.batchGetSignedUrls(orgId, assetId, assetVersionId, uploadId, objectName, partNumbers)`
|
|
227
|
+
|
|
228
|
+
Get signed upload URLs for multiple parts in one request. Use this before starting workers — eliminates per-part backend round trips.
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
const signedUrls = await sdk.batchGetSignedUrls(
|
|
232
|
+
orgId,
|
|
233
|
+
assetId,
|
|
234
|
+
assetVersionId,
|
|
235
|
+
uploadId,
|
|
236
|
+
objectName,
|
|
237
|
+
[1, 2, 3, 4, 5], // part numbers
|
|
238
|
+
);
|
|
239
|
+
// { 1: 'https://...', 2: 'https://...', ... }
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
#### `sdk.getSignedUrl(orgId, assetId, assetVersionId, uploadId, objectName, partNumber)`
|
|
243
|
+
|
|
244
|
+
Get a signed URL for a single part. Use this for retries when a pre-fetched URL may have expired.
|
|
245
|
+
|
|
246
|
+
```typescript
|
|
247
|
+
const url = await sdk.getSignedUrl(
|
|
248
|
+
orgId,
|
|
249
|
+
assetId,
|
|
250
|
+
assetVersionId,
|
|
251
|
+
uploadId,
|
|
252
|
+
objectName,
|
|
253
|
+
1,
|
|
254
|
+
);
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
#### `sdk.completeUpload(data)`
|
|
258
|
+
|
|
259
|
+
Complete the multipart upload. Assembles all parts on GCS.
|
|
260
|
+
|
|
261
|
+
```typescript
|
|
262
|
+
await sdk.completeUpload({
|
|
263
|
+
assetType: "UNREAL_PROJECT",
|
|
264
|
+
orgId,
|
|
265
|
+
assetId,
|
|
266
|
+
assetVersionId,
|
|
267
|
+
uploadId,
|
|
268
|
+
objectName,
|
|
269
|
+
parts: [
|
|
270
|
+
{ partNumber: 1, etag: "abc123" },
|
|
271
|
+
{ partNumber: 2, etag: "def456" },
|
|
272
|
+
],
|
|
273
|
+
});
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
#### `sdk.abortUpload(data)`
|
|
277
|
+
|
|
278
|
+
Abort a multipart upload and clean up all parts from GCS.
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
await sdk.abortUpload({
|
|
282
|
+
assetType: "UNREAL_PROJECT",
|
|
283
|
+
orgId,
|
|
284
|
+
assetId,
|
|
285
|
+
assetVersionId,
|
|
286
|
+
uploadId,
|
|
287
|
+
objectName,
|
|
288
|
+
});
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
#### `sdk.deleteUploadRecords(data)`
|
|
292
|
+
|
|
293
|
+
Delete all database records for an upload.
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
await sdk.deleteUploadRecords({
|
|
297
|
+
assetType: "UNREAL_PROJECT",
|
|
298
|
+
orgId,
|
|
299
|
+
assetId,
|
|
300
|
+
assetVersionId,
|
|
301
|
+
uploadId,
|
|
302
|
+
objectName,
|
|
303
|
+
});
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
### Session Recovery
|
|
309
|
+
|
|
310
|
+
#### `sdk.getUploadSession(filename)`
|
|
311
|
+
|
|
312
|
+
Check backend for an in-progress upload session matching a filename. Returns `null` if not found. Use on file select to enable resume without localStorage.
|
|
313
|
+
|
|
314
|
+
```typescript
|
|
315
|
+
const session = await sdk.getUploadSession("MyProject.zip");
|
|
316
|
+
if (session) {
|
|
317
|
+
// resume upload
|
|
318
|
+
const parts = await sdk.listUploadedParts(
|
|
319
|
+
session.objectName,
|
|
320
|
+
session.uploadId,
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
#### `sdk.listUploadedParts(objectName, uploadId)`
|
|
326
|
+
|
|
327
|
+
List parts already uploaded to GCS. Use after `getUploadSession` to recover exact progress.
|
|
328
|
+
|
|
329
|
+
```typescript
|
|
330
|
+
const parts = await sdk.listUploadedParts(objectName, uploadId);
|
|
331
|
+
// [{ partNumber: 1, etag: 'abc' }, { partNumber: 2, etag: 'def' }]
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## Types
|
|
337
|
+
|
|
338
|
+
```typescript
|
|
339
|
+
import type {
|
|
340
|
+
AssetManagerSDKConfig,
|
|
341
|
+
AssetType,
|
|
342
|
+
AssetResponse,
|
|
343
|
+
AssetWithRelations,
|
|
344
|
+
UnrealProjectVersion,
|
|
345
|
+
InitiateUploadRequest,
|
|
346
|
+
InitiateUploadResponse,
|
|
347
|
+
CompleteUploadRequest,
|
|
348
|
+
AbortUploadRequest,
|
|
349
|
+
UploadSession,
|
|
350
|
+
UploadPart,
|
|
351
|
+
SupportedUnrealEngineVersion,
|
|
352
|
+
UnrealProjectVersionTarget,
|
|
353
|
+
} from "odyssey-asset-manager-sdk";
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## Versioning
|
|
359
|
+
|
|
360
|
+
This SDK follows semantic versioning:
|
|
361
|
+
|
|
362
|
+
- **Patch** `1.0.x` — bug fixes
|
|
363
|
+
- **Minor** `1.x.0` — new methods added
|
|
364
|
+
- **Major** `x.0.0` — breaking changes
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## License
|
|
369
|
+
|
|
370
|
+
Private — Odyssey Internal Use Only
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
type AssetType = "UNREAL_PROJECT" | "OTHER_3D";
|
|
2
|
+
type UploadStatus = "PENDING" | "COMPLETED" | "FAILED";
|
|
3
|
+
type ValidationStatus = "PENDING" | "VALID" | "INVALID";
|
|
4
|
+
type BuildStatus = "PENDING" | "BUILDING" | "COMPLETED" | "FAILED";
|
|
5
|
+
type SourceType = "UNIVERSAL_SCENE";
|
|
6
|
+
declare const SUPPORTED_UNREAL_ENGINE_VERSION: readonly ["5.0.3", "5.2.1"];
|
|
7
|
+
type SupportedUnrealEngineVersion = (typeof SUPPORTED_UNREAL_ENGINE_VERSION)[number];
|
|
8
|
+
declare const UNREAL_PROJECT_VERSION_TARGET: readonly ["Development", "Shipping"];
|
|
9
|
+
type UnrealProjectVersionTarget = (typeof UNREAL_PROJECT_VERSION_TARGET)[number];
|
|
10
|
+
type AssetResponse = {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
orgId: string;
|
|
14
|
+
assetType: AssetType;
|
|
15
|
+
sourceType: SourceType;
|
|
16
|
+
uploadStatus: UploadStatus;
|
|
17
|
+
validationStatus: ValidationStatus;
|
|
18
|
+
buildStatus: BuildStatus;
|
|
19
|
+
storageBucket: string;
|
|
20
|
+
storagePath: string;
|
|
21
|
+
createdAt: Date;
|
|
22
|
+
updatedAt: Date;
|
|
23
|
+
};
|
|
24
|
+
type UnrealProjectResponse = {
|
|
25
|
+
assetId: string;
|
|
26
|
+
orgId: string;
|
|
27
|
+
displayName: string;
|
|
28
|
+
unrealProjectVersion: string;
|
|
29
|
+
unrealPluginVersion: string;
|
|
30
|
+
createdAt: Date;
|
|
31
|
+
updatedAt: Date;
|
|
32
|
+
};
|
|
33
|
+
type Other3dResponse = {
|
|
34
|
+
assetId: string;
|
|
35
|
+
orgId: string;
|
|
36
|
+
displayName: string;
|
|
37
|
+
unrealPluginVersion: string;
|
|
38
|
+
createdAt: Date;
|
|
39
|
+
updatedAt: Date;
|
|
40
|
+
};
|
|
41
|
+
type AssetWithRelations = AssetResponse & {
|
|
42
|
+
unrealProjects?: UnrealProjectResponse[];
|
|
43
|
+
other3d?: Other3dResponse[];
|
|
44
|
+
};
|
|
45
|
+
type UpdateAssetInput = {
|
|
46
|
+
name?: string;
|
|
47
|
+
uploadStatus?: UploadStatus;
|
|
48
|
+
validationStatus?: ValidationStatus;
|
|
49
|
+
buildStatus?: BuildStatus;
|
|
50
|
+
storageBucket?: string;
|
|
51
|
+
storagePath?: string;
|
|
52
|
+
};
|
|
53
|
+
type UnrealProjectVersion = {
|
|
54
|
+
id: string;
|
|
55
|
+
orgId: string;
|
|
56
|
+
authorUserId: string;
|
|
57
|
+
appType: string;
|
|
58
|
+
unrealProjectId: string;
|
|
59
|
+
buildRegion: string | null;
|
|
60
|
+
levelFilePath: string | null;
|
|
61
|
+
levelName: string | null;
|
|
62
|
+
name: string;
|
|
63
|
+
packageArchiveSha256Sum: string;
|
|
64
|
+
packageArchiveUrl: string;
|
|
65
|
+
pluginVersionId: string;
|
|
66
|
+
selfPackaged: boolean;
|
|
67
|
+
state: string;
|
|
68
|
+
symbolsArchiveSha256Sum: string;
|
|
69
|
+
symbolsArchiveUrl: string;
|
|
70
|
+
target: string;
|
|
71
|
+
uploader: string;
|
|
72
|
+
uploadId: string | null;
|
|
73
|
+
objectName: string | null;
|
|
74
|
+
downloadUrl: string | null;
|
|
75
|
+
uploadSha256Sum: string | null;
|
|
76
|
+
unrealEngineVersion: string | null;
|
|
77
|
+
volumeCopyRegionsComplete: string[];
|
|
78
|
+
volumeRegions: string[];
|
|
79
|
+
volumeSizeGb: number;
|
|
80
|
+
unrealProjectDirectoryPath: string | null;
|
|
81
|
+
disableMultiplayer: boolean | null;
|
|
82
|
+
createdAt: Date;
|
|
83
|
+
updatedAt: Date;
|
|
84
|
+
};
|
|
85
|
+
type UpdateUnrealProjectVersionInput = {
|
|
86
|
+
name?: string;
|
|
87
|
+
state?: string;
|
|
88
|
+
target?: string;
|
|
89
|
+
selfPackaged?: boolean;
|
|
90
|
+
unrealEngineVersion?: string;
|
|
91
|
+
volumeRegions?: string[];
|
|
92
|
+
buildRegion?: string;
|
|
93
|
+
levelName?: string;
|
|
94
|
+
levelFilePath?: string;
|
|
95
|
+
disableMultiplayer?: boolean;
|
|
96
|
+
};
|
|
97
|
+
type User = {
|
|
98
|
+
id: string;
|
|
99
|
+
createdAt: Date;
|
|
100
|
+
updatedAt: Date;
|
|
101
|
+
};
|
|
102
|
+
type CreateUserInput = {
|
|
103
|
+
id?: string;
|
|
104
|
+
};
|
|
105
|
+
type UpdateUserInput = {
|
|
106
|
+
id?: string;
|
|
107
|
+
};
|
|
108
|
+
type HealthResponse = {
|
|
109
|
+
status: string;
|
|
110
|
+
timestamp: string;
|
|
111
|
+
};
|
|
112
|
+
type RedisHealthResponse = {
|
|
113
|
+
status: string;
|
|
114
|
+
latencyMs?: number;
|
|
115
|
+
};
|
|
116
|
+
type InitiateUploadRequest = {
|
|
117
|
+
orgId: string;
|
|
118
|
+
assetType: AssetType;
|
|
119
|
+
assetFilename: string;
|
|
120
|
+
assetDisplayName?: string;
|
|
121
|
+
unrealProjectId?: string;
|
|
122
|
+
unrealProjectDisplayName?: string;
|
|
123
|
+
unrealEngineVersion?: SupportedUnrealEngineVersion;
|
|
124
|
+
selfPackaged?: boolean;
|
|
125
|
+
target?: UnrealProjectVersionTarget;
|
|
126
|
+
other_3dId?: string;
|
|
127
|
+
other_3dDisplayName?: string;
|
|
128
|
+
buildRegion?: string;
|
|
129
|
+
volumeRegions?: string[];
|
|
130
|
+
};
|
|
131
|
+
type InitiateUploadResponse = {
|
|
132
|
+
orgId: string;
|
|
133
|
+
assetId: string;
|
|
134
|
+
assetVersionId: string;
|
|
135
|
+
uploadId: string;
|
|
136
|
+
objectName: string;
|
|
137
|
+
};
|
|
138
|
+
type CompleteUploadRequest = {
|
|
139
|
+
orgId: string;
|
|
140
|
+
assetId: string;
|
|
141
|
+
assetType: AssetType;
|
|
142
|
+
assetVersionId: string;
|
|
143
|
+
uploadId: string;
|
|
144
|
+
objectName: string;
|
|
145
|
+
parts: {
|
|
146
|
+
partNumber: number;
|
|
147
|
+
etag: string;
|
|
148
|
+
}[];
|
|
149
|
+
failed?: boolean;
|
|
150
|
+
sha256Sum?: string;
|
|
151
|
+
};
|
|
152
|
+
type AbortUploadRequest = {
|
|
153
|
+
orgId?: string;
|
|
154
|
+
assetId: string;
|
|
155
|
+
assetType: AssetType;
|
|
156
|
+
assetVersionId: string;
|
|
157
|
+
uploadId: string;
|
|
158
|
+
objectName: string;
|
|
159
|
+
};
|
|
160
|
+
type GetSignedUrlRequest = {
|
|
161
|
+
orgId: string;
|
|
162
|
+
assetId: string;
|
|
163
|
+
assetVersionId: string;
|
|
164
|
+
uploadId: string;
|
|
165
|
+
objectName: string;
|
|
166
|
+
partNumber: number;
|
|
167
|
+
};
|
|
168
|
+
type BatchSignedUrlsRequest = {
|
|
169
|
+
orgId: string;
|
|
170
|
+
assetId: string;
|
|
171
|
+
assetVersionId: string;
|
|
172
|
+
uploadId: string;
|
|
173
|
+
objectName: string;
|
|
174
|
+
partNumbers: number[];
|
|
175
|
+
};
|
|
176
|
+
type ListPartsRequest = {
|
|
177
|
+
uploadId: string;
|
|
178
|
+
objectName: string;
|
|
179
|
+
};
|
|
180
|
+
type UploadSession = {
|
|
181
|
+
orgId: string;
|
|
182
|
+
assetId: string;
|
|
183
|
+
assetVersionId: string;
|
|
184
|
+
uploadId: string;
|
|
185
|
+
objectName: string;
|
|
186
|
+
};
|
|
187
|
+
type UploadPart = {
|
|
188
|
+
partNumber: number;
|
|
189
|
+
etag: string;
|
|
190
|
+
};
|
|
191
|
+
type AssetManagerSDKConfig = {
|
|
192
|
+
baseUrl: string;
|
|
193
|
+
timeout?: number;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
declare class AssetManagerSDK {
|
|
197
|
+
private http;
|
|
198
|
+
constructor(config: AssetManagerSDKConfig);
|
|
199
|
+
getHealth(): Promise<HealthResponse>;
|
|
200
|
+
getRedisHealth(): Promise<RedisHealthResponse>;
|
|
201
|
+
testRedis(): Promise<void>;
|
|
202
|
+
getAllAssets(): Promise<AssetWithRelations[]>;
|
|
203
|
+
getAsset(assetId: string): Promise<AssetWithRelations>;
|
|
204
|
+
getAssetsByOrg(orgId: string): Promise<AssetWithRelations[]>;
|
|
205
|
+
updateAsset(assetId: string, data: UpdateAssetInput): Promise<AssetWithRelations>;
|
|
206
|
+
markAssetAsUploaded(assetId: string): Promise<AssetWithRelations>;
|
|
207
|
+
markAssetAsValidated(assetId: string): Promise<AssetWithRelations>;
|
|
208
|
+
markAssetAsFailed(assetId: string): Promise<AssetWithRelations>;
|
|
209
|
+
deleteAsset(assetId: string): Promise<void>;
|
|
210
|
+
getProjectVersion(versionId: string): Promise<UnrealProjectVersion>;
|
|
211
|
+
getVersionsByAsset(assetId: string): Promise<UnrealProjectVersion[]>;
|
|
212
|
+
updateProjectVersion(versionId: string, data: UpdateUnrealProjectVersionInput): Promise<UnrealProjectVersion>;
|
|
213
|
+
deleteProjectVersion(versionId: string): Promise<void>;
|
|
214
|
+
deleteVersionsByAsset(assetId: string): Promise<void>;
|
|
215
|
+
getAllUsers(): Promise<User[]>;
|
|
216
|
+
getUser(userId: string): Promise<User>;
|
|
217
|
+
createUser(data: CreateUserInput): Promise<User>;
|
|
218
|
+
updateUser(userId: string, data: UpdateUserInput): Promise<User>;
|
|
219
|
+
deleteUser(userId: string): Promise<void>;
|
|
220
|
+
initiateUpload(data: InitiateUploadRequest): Promise<InitiateUploadResponse>;
|
|
221
|
+
getSignedUrl(orgId: string, assetId: string, assetVersionId: string, uploadId: string, objectName: string, partNumber: number): Promise<string>;
|
|
222
|
+
batchGetSignedUrls(orgId: string, assetId: string, assetVersionId: string, uploadId: string, objectName: string, partNumbers: number[]): Promise<Record<number, string>>;
|
|
223
|
+
completeUpload(data: CompleteUploadRequest): Promise<AssetWithRelations>;
|
|
224
|
+
abortUpload(data: AbortUploadRequest): Promise<void>;
|
|
225
|
+
deleteUploadRecords(data: AbortUploadRequest): Promise<void>;
|
|
226
|
+
getUploadSession(filename: string): Promise<UploadSession | null>;
|
|
227
|
+
listUploadedParts(objectName: string, uploadId: string): Promise<UploadPart[]>;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export { type AbortUploadRequest, AssetManagerSDK, type AssetManagerSDKConfig, type AssetResponse, type AssetType, type AssetWithRelations, type BatchSignedUrlsRequest, type BuildStatus, type CompleteUploadRequest, type CreateUserInput, type GetSignedUrlRequest, type HealthResponse, type InitiateUploadRequest, type InitiateUploadResponse, type ListPartsRequest, type Other3dResponse, type RedisHealthResponse, SUPPORTED_UNREAL_ENGINE_VERSION, type SourceType, type SupportedUnrealEngineVersion, UNREAL_PROJECT_VERSION_TARGET, type UnrealProjectResponse, type UnrealProjectVersion, type UnrealProjectVersionTarget, type UpdateAssetInput, type UpdateUnrealProjectVersionInput, type UpdateUserInput, type UploadPart, type UploadSession, type UploadStatus, type User, type ValidationStatus };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
type AssetType = "UNREAL_PROJECT" | "OTHER_3D";
|
|
2
|
+
type UploadStatus = "PENDING" | "COMPLETED" | "FAILED";
|
|
3
|
+
type ValidationStatus = "PENDING" | "VALID" | "INVALID";
|
|
4
|
+
type BuildStatus = "PENDING" | "BUILDING" | "COMPLETED" | "FAILED";
|
|
5
|
+
type SourceType = "UNIVERSAL_SCENE";
|
|
6
|
+
declare const SUPPORTED_UNREAL_ENGINE_VERSION: readonly ["5.0.3", "5.2.1"];
|
|
7
|
+
type SupportedUnrealEngineVersion = (typeof SUPPORTED_UNREAL_ENGINE_VERSION)[number];
|
|
8
|
+
declare const UNREAL_PROJECT_VERSION_TARGET: readonly ["Development", "Shipping"];
|
|
9
|
+
type UnrealProjectVersionTarget = (typeof UNREAL_PROJECT_VERSION_TARGET)[number];
|
|
10
|
+
type AssetResponse = {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
orgId: string;
|
|
14
|
+
assetType: AssetType;
|
|
15
|
+
sourceType: SourceType;
|
|
16
|
+
uploadStatus: UploadStatus;
|
|
17
|
+
validationStatus: ValidationStatus;
|
|
18
|
+
buildStatus: BuildStatus;
|
|
19
|
+
storageBucket: string;
|
|
20
|
+
storagePath: string;
|
|
21
|
+
createdAt: Date;
|
|
22
|
+
updatedAt: Date;
|
|
23
|
+
};
|
|
24
|
+
type UnrealProjectResponse = {
|
|
25
|
+
assetId: string;
|
|
26
|
+
orgId: string;
|
|
27
|
+
displayName: string;
|
|
28
|
+
unrealProjectVersion: string;
|
|
29
|
+
unrealPluginVersion: string;
|
|
30
|
+
createdAt: Date;
|
|
31
|
+
updatedAt: Date;
|
|
32
|
+
};
|
|
33
|
+
type Other3dResponse = {
|
|
34
|
+
assetId: string;
|
|
35
|
+
orgId: string;
|
|
36
|
+
displayName: string;
|
|
37
|
+
unrealPluginVersion: string;
|
|
38
|
+
createdAt: Date;
|
|
39
|
+
updatedAt: Date;
|
|
40
|
+
};
|
|
41
|
+
type AssetWithRelations = AssetResponse & {
|
|
42
|
+
unrealProjects?: UnrealProjectResponse[];
|
|
43
|
+
other3d?: Other3dResponse[];
|
|
44
|
+
};
|
|
45
|
+
type UpdateAssetInput = {
|
|
46
|
+
name?: string;
|
|
47
|
+
uploadStatus?: UploadStatus;
|
|
48
|
+
validationStatus?: ValidationStatus;
|
|
49
|
+
buildStatus?: BuildStatus;
|
|
50
|
+
storageBucket?: string;
|
|
51
|
+
storagePath?: string;
|
|
52
|
+
};
|
|
53
|
+
type UnrealProjectVersion = {
|
|
54
|
+
id: string;
|
|
55
|
+
orgId: string;
|
|
56
|
+
authorUserId: string;
|
|
57
|
+
appType: string;
|
|
58
|
+
unrealProjectId: string;
|
|
59
|
+
buildRegion: string | null;
|
|
60
|
+
levelFilePath: string | null;
|
|
61
|
+
levelName: string | null;
|
|
62
|
+
name: string;
|
|
63
|
+
packageArchiveSha256Sum: string;
|
|
64
|
+
packageArchiveUrl: string;
|
|
65
|
+
pluginVersionId: string;
|
|
66
|
+
selfPackaged: boolean;
|
|
67
|
+
state: string;
|
|
68
|
+
symbolsArchiveSha256Sum: string;
|
|
69
|
+
symbolsArchiveUrl: string;
|
|
70
|
+
target: string;
|
|
71
|
+
uploader: string;
|
|
72
|
+
uploadId: string | null;
|
|
73
|
+
objectName: string | null;
|
|
74
|
+
downloadUrl: string | null;
|
|
75
|
+
uploadSha256Sum: string | null;
|
|
76
|
+
unrealEngineVersion: string | null;
|
|
77
|
+
volumeCopyRegionsComplete: string[];
|
|
78
|
+
volumeRegions: string[];
|
|
79
|
+
volumeSizeGb: number;
|
|
80
|
+
unrealProjectDirectoryPath: string | null;
|
|
81
|
+
disableMultiplayer: boolean | null;
|
|
82
|
+
createdAt: Date;
|
|
83
|
+
updatedAt: Date;
|
|
84
|
+
};
|
|
85
|
+
type UpdateUnrealProjectVersionInput = {
|
|
86
|
+
name?: string;
|
|
87
|
+
state?: string;
|
|
88
|
+
target?: string;
|
|
89
|
+
selfPackaged?: boolean;
|
|
90
|
+
unrealEngineVersion?: string;
|
|
91
|
+
volumeRegions?: string[];
|
|
92
|
+
buildRegion?: string;
|
|
93
|
+
levelName?: string;
|
|
94
|
+
levelFilePath?: string;
|
|
95
|
+
disableMultiplayer?: boolean;
|
|
96
|
+
};
|
|
97
|
+
type User = {
|
|
98
|
+
id: string;
|
|
99
|
+
createdAt: Date;
|
|
100
|
+
updatedAt: Date;
|
|
101
|
+
};
|
|
102
|
+
type CreateUserInput = {
|
|
103
|
+
id?: string;
|
|
104
|
+
};
|
|
105
|
+
type UpdateUserInput = {
|
|
106
|
+
id?: string;
|
|
107
|
+
};
|
|
108
|
+
type HealthResponse = {
|
|
109
|
+
status: string;
|
|
110
|
+
timestamp: string;
|
|
111
|
+
};
|
|
112
|
+
type RedisHealthResponse = {
|
|
113
|
+
status: string;
|
|
114
|
+
latencyMs?: number;
|
|
115
|
+
};
|
|
116
|
+
type InitiateUploadRequest = {
|
|
117
|
+
orgId: string;
|
|
118
|
+
assetType: AssetType;
|
|
119
|
+
assetFilename: string;
|
|
120
|
+
assetDisplayName?: string;
|
|
121
|
+
unrealProjectId?: string;
|
|
122
|
+
unrealProjectDisplayName?: string;
|
|
123
|
+
unrealEngineVersion?: SupportedUnrealEngineVersion;
|
|
124
|
+
selfPackaged?: boolean;
|
|
125
|
+
target?: UnrealProjectVersionTarget;
|
|
126
|
+
other_3dId?: string;
|
|
127
|
+
other_3dDisplayName?: string;
|
|
128
|
+
buildRegion?: string;
|
|
129
|
+
volumeRegions?: string[];
|
|
130
|
+
};
|
|
131
|
+
type InitiateUploadResponse = {
|
|
132
|
+
orgId: string;
|
|
133
|
+
assetId: string;
|
|
134
|
+
assetVersionId: string;
|
|
135
|
+
uploadId: string;
|
|
136
|
+
objectName: string;
|
|
137
|
+
};
|
|
138
|
+
type CompleteUploadRequest = {
|
|
139
|
+
orgId: string;
|
|
140
|
+
assetId: string;
|
|
141
|
+
assetType: AssetType;
|
|
142
|
+
assetVersionId: string;
|
|
143
|
+
uploadId: string;
|
|
144
|
+
objectName: string;
|
|
145
|
+
parts: {
|
|
146
|
+
partNumber: number;
|
|
147
|
+
etag: string;
|
|
148
|
+
}[];
|
|
149
|
+
failed?: boolean;
|
|
150
|
+
sha256Sum?: string;
|
|
151
|
+
};
|
|
152
|
+
type AbortUploadRequest = {
|
|
153
|
+
orgId?: string;
|
|
154
|
+
assetId: string;
|
|
155
|
+
assetType: AssetType;
|
|
156
|
+
assetVersionId: string;
|
|
157
|
+
uploadId: string;
|
|
158
|
+
objectName: string;
|
|
159
|
+
};
|
|
160
|
+
type GetSignedUrlRequest = {
|
|
161
|
+
orgId: string;
|
|
162
|
+
assetId: string;
|
|
163
|
+
assetVersionId: string;
|
|
164
|
+
uploadId: string;
|
|
165
|
+
objectName: string;
|
|
166
|
+
partNumber: number;
|
|
167
|
+
};
|
|
168
|
+
type BatchSignedUrlsRequest = {
|
|
169
|
+
orgId: string;
|
|
170
|
+
assetId: string;
|
|
171
|
+
assetVersionId: string;
|
|
172
|
+
uploadId: string;
|
|
173
|
+
objectName: string;
|
|
174
|
+
partNumbers: number[];
|
|
175
|
+
};
|
|
176
|
+
type ListPartsRequest = {
|
|
177
|
+
uploadId: string;
|
|
178
|
+
objectName: string;
|
|
179
|
+
};
|
|
180
|
+
type UploadSession = {
|
|
181
|
+
orgId: string;
|
|
182
|
+
assetId: string;
|
|
183
|
+
assetVersionId: string;
|
|
184
|
+
uploadId: string;
|
|
185
|
+
objectName: string;
|
|
186
|
+
};
|
|
187
|
+
type UploadPart = {
|
|
188
|
+
partNumber: number;
|
|
189
|
+
etag: string;
|
|
190
|
+
};
|
|
191
|
+
type AssetManagerSDKConfig = {
|
|
192
|
+
baseUrl: string;
|
|
193
|
+
timeout?: number;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
declare class AssetManagerSDK {
|
|
197
|
+
private http;
|
|
198
|
+
constructor(config: AssetManagerSDKConfig);
|
|
199
|
+
getHealth(): Promise<HealthResponse>;
|
|
200
|
+
getRedisHealth(): Promise<RedisHealthResponse>;
|
|
201
|
+
testRedis(): Promise<void>;
|
|
202
|
+
getAllAssets(): Promise<AssetWithRelations[]>;
|
|
203
|
+
getAsset(assetId: string): Promise<AssetWithRelations>;
|
|
204
|
+
getAssetsByOrg(orgId: string): Promise<AssetWithRelations[]>;
|
|
205
|
+
updateAsset(assetId: string, data: UpdateAssetInput): Promise<AssetWithRelations>;
|
|
206
|
+
markAssetAsUploaded(assetId: string): Promise<AssetWithRelations>;
|
|
207
|
+
markAssetAsValidated(assetId: string): Promise<AssetWithRelations>;
|
|
208
|
+
markAssetAsFailed(assetId: string): Promise<AssetWithRelations>;
|
|
209
|
+
deleteAsset(assetId: string): Promise<void>;
|
|
210
|
+
getProjectVersion(versionId: string): Promise<UnrealProjectVersion>;
|
|
211
|
+
getVersionsByAsset(assetId: string): Promise<UnrealProjectVersion[]>;
|
|
212
|
+
updateProjectVersion(versionId: string, data: UpdateUnrealProjectVersionInput): Promise<UnrealProjectVersion>;
|
|
213
|
+
deleteProjectVersion(versionId: string): Promise<void>;
|
|
214
|
+
deleteVersionsByAsset(assetId: string): Promise<void>;
|
|
215
|
+
getAllUsers(): Promise<User[]>;
|
|
216
|
+
getUser(userId: string): Promise<User>;
|
|
217
|
+
createUser(data: CreateUserInput): Promise<User>;
|
|
218
|
+
updateUser(userId: string, data: UpdateUserInput): Promise<User>;
|
|
219
|
+
deleteUser(userId: string): Promise<void>;
|
|
220
|
+
initiateUpload(data: InitiateUploadRequest): Promise<InitiateUploadResponse>;
|
|
221
|
+
getSignedUrl(orgId: string, assetId: string, assetVersionId: string, uploadId: string, objectName: string, partNumber: number): Promise<string>;
|
|
222
|
+
batchGetSignedUrls(orgId: string, assetId: string, assetVersionId: string, uploadId: string, objectName: string, partNumbers: number[]): Promise<Record<number, string>>;
|
|
223
|
+
completeUpload(data: CompleteUploadRequest): Promise<AssetWithRelations>;
|
|
224
|
+
abortUpload(data: AbortUploadRequest): Promise<void>;
|
|
225
|
+
deleteUploadRecords(data: AbortUploadRequest): Promise<void>;
|
|
226
|
+
getUploadSession(filename: string): Promise<UploadSession | null>;
|
|
227
|
+
listUploadedParts(objectName: string, uploadId: string): Promise<UploadPart[]>;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export { type AbortUploadRequest, AssetManagerSDK, type AssetManagerSDKConfig, type AssetResponse, type AssetType, type AssetWithRelations, type BatchSignedUrlsRequest, type BuildStatus, type CompleteUploadRequest, type CreateUserInput, type GetSignedUrlRequest, type HealthResponse, type InitiateUploadRequest, type InitiateUploadResponse, type ListPartsRequest, type Other3dResponse, type RedisHealthResponse, SUPPORTED_UNREAL_ENGINE_VERSION, type SourceType, type SupportedUnrealEngineVersion, UNREAL_PROJECT_VERSION_TARGET, type UnrealProjectResponse, type UnrealProjectVersion, type UnrealProjectVersionTarget, type UpdateAssetInput, type UpdateUnrealProjectVersionInput, type UpdateUserInput, type UploadPart, type UploadSession, type UploadStatus, type User, type ValidationStatus };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
|
+
AssetManagerSDK: () => AssetManagerSDK,
|
|
34
|
+
SUPPORTED_UNREAL_ENGINE_VERSION: () => SUPPORTED_UNREAL_ENGINE_VERSION,
|
|
35
|
+
UNREAL_PROJECT_VERSION_TARGET: () => UNREAL_PROJECT_VERSION_TARGET
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(index_exports);
|
|
38
|
+
|
|
39
|
+
// src/client.ts
|
|
40
|
+
var import_axios = __toESM(require("axios"));
|
|
41
|
+
var AssetManagerSDK = class {
|
|
42
|
+
constructor(config) {
|
|
43
|
+
var _a;
|
|
44
|
+
this.http = import_axios.default.create({
|
|
45
|
+
baseURL: config.baseUrl,
|
|
46
|
+
timeout: (_a = config.timeout) != null ? _a : 3e4,
|
|
47
|
+
headers: { "Content-Type": "application/json" }
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// ─── Health ───────────────────────────────────────────────────────────────
|
|
51
|
+
async getHealth() {
|
|
52
|
+
const res = await this.http.get("/health");
|
|
53
|
+
return res.data.data;
|
|
54
|
+
}
|
|
55
|
+
async getRedisHealth() {
|
|
56
|
+
const res = await this.http.get("/health/redis");
|
|
57
|
+
return res.data.data;
|
|
58
|
+
}
|
|
59
|
+
async testRedis() {
|
|
60
|
+
await this.http.post("/health/redis/test");
|
|
61
|
+
}
|
|
62
|
+
// ─── Assets ───────────────────────────────────────────────────────────────
|
|
63
|
+
async getAllAssets() {
|
|
64
|
+
const res = await this.http.get("/assets");
|
|
65
|
+
return res.data.data;
|
|
66
|
+
}
|
|
67
|
+
async getAsset(assetId) {
|
|
68
|
+
const res = await this.http.get(`/assets/${assetId}`);
|
|
69
|
+
return res.data.data;
|
|
70
|
+
}
|
|
71
|
+
async getAssetsByOrg(orgId) {
|
|
72
|
+
const res = await this.http.get(`/assets/organization/${orgId}`);
|
|
73
|
+
return res.data.data;
|
|
74
|
+
}
|
|
75
|
+
async updateAsset(assetId, data) {
|
|
76
|
+
const res = await this.http.patch(`/assets/${assetId}`, data);
|
|
77
|
+
return res.data.data;
|
|
78
|
+
}
|
|
79
|
+
async markAssetAsUploaded(assetId) {
|
|
80
|
+
const res = await this.http.patch(`/assets/${assetId}/mark-uploaded`);
|
|
81
|
+
return res.data.data;
|
|
82
|
+
}
|
|
83
|
+
async markAssetAsValidated(assetId) {
|
|
84
|
+
const res = await this.http.patch(`/assets/${assetId}/mark-validated`);
|
|
85
|
+
return res.data.data;
|
|
86
|
+
}
|
|
87
|
+
async markAssetAsFailed(assetId) {
|
|
88
|
+
const res = await this.http.patch(`/assets/${assetId}/mark-failed`);
|
|
89
|
+
return res.data.data;
|
|
90
|
+
}
|
|
91
|
+
async deleteAsset(assetId) {
|
|
92
|
+
await this.http.delete(`/assets/${assetId}`);
|
|
93
|
+
}
|
|
94
|
+
// ─── Unreal Project Versions ──────────────────────────────────────────────
|
|
95
|
+
async getProjectVersion(versionId) {
|
|
96
|
+
const res = await this.http.get(`/unrealProjectVersion/${versionId}`);
|
|
97
|
+
return res.data.data;
|
|
98
|
+
}
|
|
99
|
+
async getVersionsByAsset(assetId) {
|
|
100
|
+
const res = await this.http.get(`/unrealProjectVersion/asset/${assetId}`);
|
|
101
|
+
return res.data.data;
|
|
102
|
+
}
|
|
103
|
+
async updateProjectVersion(versionId, data) {
|
|
104
|
+
const res = await this.http.patch(
|
|
105
|
+
`/unrealProjectVersion/${versionId}`,
|
|
106
|
+
data
|
|
107
|
+
);
|
|
108
|
+
return res.data.data;
|
|
109
|
+
}
|
|
110
|
+
async deleteProjectVersion(versionId) {
|
|
111
|
+
await this.http.delete(`/unrealProjectVersion/${versionId}`);
|
|
112
|
+
}
|
|
113
|
+
async deleteVersionsByAsset(assetId) {
|
|
114
|
+
await this.http.delete(`/unrealProjectVersion/asset/${assetId}`);
|
|
115
|
+
}
|
|
116
|
+
// ─── Users ────────────────────────────────────────────────────────────────
|
|
117
|
+
async getAllUsers() {
|
|
118
|
+
const res = await this.http.get("/users");
|
|
119
|
+
return res.data.data;
|
|
120
|
+
}
|
|
121
|
+
async getUser(userId) {
|
|
122
|
+
const res = await this.http.get(`/users/${userId}`);
|
|
123
|
+
return res.data.data;
|
|
124
|
+
}
|
|
125
|
+
async createUser(data) {
|
|
126
|
+
const res = await this.http.post("/users", data);
|
|
127
|
+
return res.data.data;
|
|
128
|
+
}
|
|
129
|
+
async updateUser(userId, data) {
|
|
130
|
+
const res = await this.http.put(`/users/${userId}`, data);
|
|
131
|
+
return res.data.data;
|
|
132
|
+
}
|
|
133
|
+
async deleteUser(userId) {
|
|
134
|
+
await this.http.delete(`/users/${userId}`);
|
|
135
|
+
}
|
|
136
|
+
// ─── Upload ───────────────────────────────────────────────────────────────
|
|
137
|
+
async initiateUpload(data) {
|
|
138
|
+
const res = await this.http.post("/uploader/initiate", data);
|
|
139
|
+
return res.data.data;
|
|
140
|
+
}
|
|
141
|
+
async getSignedUrl(orgId, assetId, assetVersionId, uploadId, objectName, partNumber) {
|
|
142
|
+
const res = await this.http.post("/uploader/signed-url", {
|
|
143
|
+
orgId,
|
|
144
|
+
assetId,
|
|
145
|
+
assetVersionId,
|
|
146
|
+
uploadId,
|
|
147
|
+
objectName,
|
|
148
|
+
partNumber
|
|
149
|
+
});
|
|
150
|
+
return res.data.data.signedUrl;
|
|
151
|
+
}
|
|
152
|
+
async batchGetSignedUrls(orgId, assetId, assetVersionId, uploadId, objectName, partNumbers) {
|
|
153
|
+
const res = await this.http.post("/uploader/batch-signed-urls", {
|
|
154
|
+
orgId,
|
|
155
|
+
assetId,
|
|
156
|
+
assetVersionId,
|
|
157
|
+
uploadId,
|
|
158
|
+
objectName,
|
|
159
|
+
partNumbers
|
|
160
|
+
});
|
|
161
|
+
return res.data.data.signedUrls;
|
|
162
|
+
}
|
|
163
|
+
async completeUpload(data) {
|
|
164
|
+
const res = await this.http.post("/uploader/complete", data);
|
|
165
|
+
return res.data.data;
|
|
166
|
+
}
|
|
167
|
+
async abortUpload(data) {
|
|
168
|
+
await this.http.post("/uploader/abort", data);
|
|
169
|
+
}
|
|
170
|
+
async deleteUploadRecords(data) {
|
|
171
|
+
await this.http.delete("/uploader/delete", { data });
|
|
172
|
+
}
|
|
173
|
+
// ─── Session Recovery ─────────────────────────────────────────────────────
|
|
174
|
+
async getUploadSession(filename) {
|
|
175
|
+
try {
|
|
176
|
+
const res = await this.http.get("/uploader/session", {
|
|
177
|
+
params: { filename }
|
|
178
|
+
});
|
|
179
|
+
return res.data.data;
|
|
180
|
+
} catch {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async listUploadedParts(objectName, uploadId) {
|
|
185
|
+
var _a;
|
|
186
|
+
try {
|
|
187
|
+
const res = await this.http.post("/uploader/list-parts", {
|
|
188
|
+
objectName,
|
|
189
|
+
uploadId
|
|
190
|
+
});
|
|
191
|
+
return (_a = res.data.data.parts) != null ? _a : [];
|
|
192
|
+
} catch {
|
|
193
|
+
return [];
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
// src/types.ts
|
|
199
|
+
var SUPPORTED_UNREAL_ENGINE_VERSION = ["5.0.3", "5.2.1"];
|
|
200
|
+
var UNREAL_PROJECT_VERSION_TARGET = [
|
|
201
|
+
"Development",
|
|
202
|
+
"Shipping"
|
|
203
|
+
];
|
|
204
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
205
|
+
0 && (module.exports = {
|
|
206
|
+
AssetManagerSDK,
|
|
207
|
+
SUPPORTED_UNREAL_ENGINE_VERSION,
|
|
208
|
+
UNREAL_PROJECT_VERSION_TARGET
|
|
209
|
+
});
|
|
210
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/types.ts"],"sourcesContent":["export { AssetManagerSDK } from \"./client\";\nexport * from \"./types\";\n","import axios, { AxiosInstance } from \"axios\";\nimport {\n AssetManagerSDKConfig,\n AssetWithRelations,\n UpdateAssetInput,\n UnrealProjectVersion,\n UpdateUnrealProjectVersionInput,\n User,\n CreateUserInput,\n UpdateUserInput,\n HealthResponse,\n RedisHealthResponse,\n InitiateUploadRequest,\n InitiateUploadResponse,\n CompleteUploadRequest,\n AbortUploadRequest,\n UploadSession,\n UploadPart,\n} from \"./types\";\n\nexport class AssetManagerSDK {\n private http: AxiosInstance;\n\n constructor(config: AssetManagerSDKConfig) {\n this.http = axios.create({\n baseURL: config.baseUrl,\n timeout: config.timeout ?? 30000,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n // ─── Health ───────────────────────────────────────────────────────────────\n\n async getHealth(): Promise<HealthResponse> {\n const res = await this.http.get(\"/health\");\n return res.data.data;\n }\n\n async getRedisHealth(): Promise<RedisHealthResponse> {\n const res = await this.http.get(\"/health/redis\");\n return res.data.data;\n }\n\n async testRedis(): Promise<void> {\n await this.http.post(\"/health/redis/test\");\n }\n\n // ─── Assets ───────────────────────────────────────────────────────────────\n\n async getAllAssets(): Promise<AssetWithRelations[]> {\n const res = await this.http.get(\"/assets\");\n return res.data.data;\n }\n\n async getAsset(assetId: string): Promise<AssetWithRelations> {\n const res = await this.http.get(`/assets/${assetId}`);\n return res.data.data;\n }\n\n async getAssetsByOrg(orgId: string): Promise<AssetWithRelations[]> {\n const res = await this.http.get(`/assets/organization/${orgId}`);\n return res.data.data;\n }\n\n async updateAsset(\n assetId: string,\n data: UpdateAssetInput,\n ): Promise<AssetWithRelations> {\n const res = await this.http.patch(`/assets/${assetId}`, data);\n return res.data.data;\n }\n\n async markAssetAsUploaded(assetId: string): Promise<AssetWithRelations> {\n const res = await this.http.patch(`/assets/${assetId}/mark-uploaded`);\n return res.data.data;\n }\n\n async markAssetAsValidated(assetId: string): Promise<AssetWithRelations> {\n const res = await this.http.patch(`/assets/${assetId}/mark-validated`);\n return res.data.data;\n }\n\n async markAssetAsFailed(assetId: string): Promise<AssetWithRelations> {\n const res = await this.http.patch(`/assets/${assetId}/mark-failed`);\n return res.data.data;\n }\n\n async deleteAsset(assetId: string): Promise<void> {\n await this.http.delete(`/assets/${assetId}`);\n }\n\n // ─── Unreal Project Versions ──────────────────────────────────────────────\n\n async getProjectVersion(versionId: string): Promise<UnrealProjectVersion> {\n const res = await this.http.get(`/unrealProjectVersion/${versionId}`);\n return res.data.data;\n }\n\n async getVersionsByAsset(assetId: string): Promise<UnrealProjectVersion[]> {\n const res = await this.http.get(`/unrealProjectVersion/asset/${assetId}`);\n return res.data.data;\n }\n\n async updateProjectVersion(\n versionId: string,\n data: UpdateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion> {\n const res = await this.http.patch(\n `/unrealProjectVersion/${versionId}`,\n data,\n );\n return res.data.data;\n }\n\n async deleteProjectVersion(versionId: string): Promise<void> {\n await this.http.delete(`/unrealProjectVersion/${versionId}`);\n }\n\n async deleteVersionsByAsset(assetId: string): Promise<void> {\n await this.http.delete(`/unrealProjectVersion/asset/${assetId}`);\n }\n\n // ─── Users ────────────────────────────────────────────────────────────────\n\n async getAllUsers(): Promise<User[]> {\n const res = await this.http.get(\"/users\");\n return res.data.data;\n }\n\n async getUser(userId: string): Promise<User> {\n const res = await this.http.get(`/users/${userId}`);\n return res.data.data;\n }\n\n async createUser(data: CreateUserInput): Promise<User> {\n const res = await this.http.post(\"/users\", data);\n return res.data.data;\n }\n\n async updateUser(userId: string, data: UpdateUserInput): Promise<User> {\n const res = await this.http.put(`/users/${userId}`, data);\n return res.data.data;\n }\n\n async deleteUser(userId: string): Promise<void> {\n await this.http.delete(`/users/${userId}`);\n }\n\n // ─── Upload ───────────────────────────────────────────────────────────────\n\n async initiateUpload(\n data: InitiateUploadRequest,\n ): Promise<InitiateUploadResponse> {\n const res = await this.http.post(\"/uploader/initiate\", data);\n return res.data.data;\n }\n\n async getSignedUrl(\n orgId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumber: number,\n ): Promise<string> {\n const res = await this.http.post(\"/uploader/signed-url\", {\n orgId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumber,\n });\n return res.data.data.signedUrl;\n }\n\n async batchGetSignedUrls(\n orgId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumbers: number[],\n ): Promise<Record<number, string>> {\n const res = await this.http.post(\"/uploader/batch-signed-urls\", {\n orgId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumbers,\n });\n return res.data.data.signedUrls;\n }\n\n async completeUpload(\n data: CompleteUploadRequest,\n ): Promise<AssetWithRelations> {\n const res = await this.http.post(\"/uploader/complete\", data);\n return res.data.data;\n }\n\n async abortUpload(data: AbortUploadRequest): Promise<void> {\n await this.http.post(\"/uploader/abort\", data);\n }\n\n async deleteUploadRecords(data: AbortUploadRequest): Promise<void> {\n await this.http.delete(\"/uploader/delete\", { data });\n }\n\n // ─── Session Recovery ─────────────────────────────────────────────────────\n\n async getUploadSession(filename: string): Promise<UploadSession | null> {\n try {\n const res = await this.http.get(\"/uploader/session\", {\n params: { filename },\n });\n return res.data.data;\n } catch {\n return null;\n }\n }\n\n async listUploadedParts(\n objectName: string,\n uploadId: string,\n ): Promise<UploadPart[]> {\n try {\n const res = await this.http.post(\"/uploader/list-parts\", {\n objectName,\n uploadId,\n });\n return res.data.data.parts ?? [];\n } catch {\n return [];\n }\n }\n}\n","// ─── Enums & Constants ────────────────────────────────────────────────────\n\nexport type AssetType = \"UNREAL_PROJECT\" | \"OTHER_3D\";\nexport type UploadStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\nexport type ValidationStatus = \"PENDING\" | \"VALID\" | \"INVALID\";\nexport type BuildStatus = \"PENDING\" | \"BUILDING\" | \"COMPLETED\" | \"FAILED\";\nexport type SourceType = \"UNIVERSAL_SCENE\";\n\nexport const SUPPORTED_UNREAL_ENGINE_VERSION = [\"5.0.3\", \"5.2.1\"] as const;\nexport type SupportedUnrealEngineVersion =\n (typeof SUPPORTED_UNREAL_ENGINE_VERSION)[number];\n\nexport const UNREAL_PROJECT_VERSION_TARGET = [\n \"Development\",\n \"Shipping\",\n] as const;\nexport type UnrealProjectVersionTarget =\n (typeof UNREAL_PROJECT_VERSION_TARGET)[number];\n\n// ─── Asset Types ──────────────────────────────────────────────────────────\n\nexport type AssetResponse = {\n id: string;\n name: string;\n orgId: string;\n assetType: AssetType;\n sourceType: SourceType;\n uploadStatus: UploadStatus;\n validationStatus: ValidationStatus;\n buildStatus: BuildStatus;\n storageBucket: string;\n storagePath: string;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type UnrealProjectResponse = {\n assetId: string;\n orgId: string;\n displayName: string;\n unrealProjectVersion: string;\n unrealPluginVersion: string;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type Other3dResponse = {\n assetId: string;\n orgId: string;\n displayName: string;\n unrealPluginVersion: string;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type AssetWithRelations = AssetResponse & {\n unrealProjects?: UnrealProjectResponse[];\n other3d?: Other3dResponse[];\n};\n\nexport type UpdateAssetInput = {\n name?: string;\n uploadStatus?: UploadStatus;\n validationStatus?: ValidationStatus;\n buildStatus?: BuildStatus;\n storageBucket?: string;\n storagePath?: string;\n};\n\n// ─── Unreal Project Version Types ─────────────────────────────────────────\n\nexport type UnrealProjectVersion = {\n id: string;\n orgId: string;\n authorUserId: string;\n appType: string;\n unrealProjectId: string;\n buildRegion: string | null;\n levelFilePath: string | null;\n levelName: string | null;\n name: string;\n packageArchiveSha256Sum: string;\n packageArchiveUrl: string;\n pluginVersionId: string;\n selfPackaged: boolean;\n state: string;\n symbolsArchiveSha256Sum: string;\n symbolsArchiveUrl: string;\n target: string;\n uploader: string;\n uploadId: string | null;\n objectName: string | null;\n downloadUrl: string | null;\n uploadSha256Sum: string | null;\n unrealEngineVersion: string | null;\n volumeCopyRegionsComplete: string[];\n volumeRegions: string[];\n volumeSizeGb: number;\n unrealProjectDirectoryPath: string | null;\n disableMultiplayer: boolean | null;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type UpdateUnrealProjectVersionInput = {\n name?: string;\n state?: string;\n target?: string;\n selfPackaged?: boolean;\n unrealEngineVersion?: string;\n volumeRegions?: string[];\n buildRegion?: string;\n levelName?: string;\n levelFilePath?: string;\n disableMultiplayer?: boolean;\n};\n\n// ─── User Types ───────────────────────────────────────────────────────────\n\nexport type User = {\n id: string;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type CreateUserInput = {\n id?: string;\n};\n\nexport type UpdateUserInput = {\n id?: string;\n};\n\n// ─── Health Types ─────────────────────────────────────────────────────────\n\nexport type HealthResponse = {\n status: string;\n timestamp: string;\n};\n\nexport type RedisHealthResponse = {\n status: string;\n latencyMs?: number;\n};\n\n// ─── Upload Types ──────────────────────────────────────────────────────────\n\nexport type InitiateUploadRequest = {\n orgId: string;\n assetType: AssetType;\n assetFilename: string;\n assetDisplayName?: string;\n unrealProjectId?: string;\n unrealProjectDisplayName?: string;\n unrealEngineVersion?: SupportedUnrealEngineVersion;\n selfPackaged?: boolean;\n target?: UnrealProjectVersionTarget;\n other_3dId?: string;\n other_3dDisplayName?: string;\n buildRegion?: string;\n volumeRegions?: string[];\n};\n\nexport type InitiateUploadResponse = {\n orgId: string;\n assetId: string;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n};\n\nexport type CompleteUploadRequest = {\n orgId: string;\n assetId: string;\n assetType: AssetType;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n parts: { partNumber: number; etag: string }[];\n failed?: boolean;\n sha256Sum?: string;\n};\n\nexport type AbortUploadRequest = {\n orgId?: string;\n assetId: string;\n assetType: AssetType;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n};\n\nexport type GetSignedUrlRequest = {\n orgId: string;\n assetId: string;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n partNumber: number;\n};\n\nexport type BatchSignedUrlsRequest = {\n orgId: string;\n assetId: string;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n partNumbers: number[];\n};\n\nexport type ListPartsRequest = {\n uploadId: string;\n objectName: string;\n};\n\nexport type UploadSession = {\n orgId: string;\n assetId: string;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n};\n\nexport type UploadPart = {\n partNumber: number;\n etag: string;\n};\n\n// ─── SDK Config ────────────────────────────────────────────────────────────\n\nexport type AssetManagerSDKConfig = {\n baseUrl: string;\n timeout?: number;\n};\n"],"mappings":"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","names":["axios"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// src/client.ts
|
|
2
|
+
import axios from "axios";
|
|
3
|
+
var AssetManagerSDK = class {
|
|
4
|
+
constructor(config) {
|
|
5
|
+
var _a;
|
|
6
|
+
this.http = axios.create({
|
|
7
|
+
baseURL: config.baseUrl,
|
|
8
|
+
timeout: (_a = config.timeout) != null ? _a : 3e4,
|
|
9
|
+
headers: { "Content-Type": "application/json" }
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
// ─── Health ───────────────────────────────────────────────────────────────
|
|
13
|
+
async getHealth() {
|
|
14
|
+
const res = await this.http.get("/health");
|
|
15
|
+
return res.data.data;
|
|
16
|
+
}
|
|
17
|
+
async getRedisHealth() {
|
|
18
|
+
const res = await this.http.get("/health/redis");
|
|
19
|
+
return res.data.data;
|
|
20
|
+
}
|
|
21
|
+
async testRedis() {
|
|
22
|
+
await this.http.post("/health/redis/test");
|
|
23
|
+
}
|
|
24
|
+
// ─── Assets ───────────────────────────────────────────────────────────────
|
|
25
|
+
async getAllAssets() {
|
|
26
|
+
const res = await this.http.get("/assets");
|
|
27
|
+
return res.data.data;
|
|
28
|
+
}
|
|
29
|
+
async getAsset(assetId) {
|
|
30
|
+
const res = await this.http.get(`/assets/${assetId}`);
|
|
31
|
+
return res.data.data;
|
|
32
|
+
}
|
|
33
|
+
async getAssetsByOrg(orgId) {
|
|
34
|
+
const res = await this.http.get(`/assets/organization/${orgId}`);
|
|
35
|
+
return res.data.data;
|
|
36
|
+
}
|
|
37
|
+
async updateAsset(assetId, data) {
|
|
38
|
+
const res = await this.http.patch(`/assets/${assetId}`, data);
|
|
39
|
+
return res.data.data;
|
|
40
|
+
}
|
|
41
|
+
async markAssetAsUploaded(assetId) {
|
|
42
|
+
const res = await this.http.patch(`/assets/${assetId}/mark-uploaded`);
|
|
43
|
+
return res.data.data;
|
|
44
|
+
}
|
|
45
|
+
async markAssetAsValidated(assetId) {
|
|
46
|
+
const res = await this.http.patch(`/assets/${assetId}/mark-validated`);
|
|
47
|
+
return res.data.data;
|
|
48
|
+
}
|
|
49
|
+
async markAssetAsFailed(assetId) {
|
|
50
|
+
const res = await this.http.patch(`/assets/${assetId}/mark-failed`);
|
|
51
|
+
return res.data.data;
|
|
52
|
+
}
|
|
53
|
+
async deleteAsset(assetId) {
|
|
54
|
+
await this.http.delete(`/assets/${assetId}`);
|
|
55
|
+
}
|
|
56
|
+
// ─── Unreal Project Versions ──────────────────────────────────────────────
|
|
57
|
+
async getProjectVersion(versionId) {
|
|
58
|
+
const res = await this.http.get(`/unrealProjectVersion/${versionId}`);
|
|
59
|
+
return res.data.data;
|
|
60
|
+
}
|
|
61
|
+
async getVersionsByAsset(assetId) {
|
|
62
|
+
const res = await this.http.get(`/unrealProjectVersion/asset/${assetId}`);
|
|
63
|
+
return res.data.data;
|
|
64
|
+
}
|
|
65
|
+
async updateProjectVersion(versionId, data) {
|
|
66
|
+
const res = await this.http.patch(
|
|
67
|
+
`/unrealProjectVersion/${versionId}`,
|
|
68
|
+
data
|
|
69
|
+
);
|
|
70
|
+
return res.data.data;
|
|
71
|
+
}
|
|
72
|
+
async deleteProjectVersion(versionId) {
|
|
73
|
+
await this.http.delete(`/unrealProjectVersion/${versionId}`);
|
|
74
|
+
}
|
|
75
|
+
async deleteVersionsByAsset(assetId) {
|
|
76
|
+
await this.http.delete(`/unrealProjectVersion/asset/${assetId}`);
|
|
77
|
+
}
|
|
78
|
+
// ─── Users ────────────────────────────────────────────────────────────────
|
|
79
|
+
async getAllUsers() {
|
|
80
|
+
const res = await this.http.get("/users");
|
|
81
|
+
return res.data.data;
|
|
82
|
+
}
|
|
83
|
+
async getUser(userId) {
|
|
84
|
+
const res = await this.http.get(`/users/${userId}`);
|
|
85
|
+
return res.data.data;
|
|
86
|
+
}
|
|
87
|
+
async createUser(data) {
|
|
88
|
+
const res = await this.http.post("/users", data);
|
|
89
|
+
return res.data.data;
|
|
90
|
+
}
|
|
91
|
+
async updateUser(userId, data) {
|
|
92
|
+
const res = await this.http.put(`/users/${userId}`, data);
|
|
93
|
+
return res.data.data;
|
|
94
|
+
}
|
|
95
|
+
async deleteUser(userId) {
|
|
96
|
+
await this.http.delete(`/users/${userId}`);
|
|
97
|
+
}
|
|
98
|
+
// ─── Upload ───────────────────────────────────────────────────────────────
|
|
99
|
+
async initiateUpload(data) {
|
|
100
|
+
const res = await this.http.post("/uploader/initiate", data);
|
|
101
|
+
return res.data.data;
|
|
102
|
+
}
|
|
103
|
+
async getSignedUrl(orgId, assetId, assetVersionId, uploadId, objectName, partNumber) {
|
|
104
|
+
const res = await this.http.post("/uploader/signed-url", {
|
|
105
|
+
orgId,
|
|
106
|
+
assetId,
|
|
107
|
+
assetVersionId,
|
|
108
|
+
uploadId,
|
|
109
|
+
objectName,
|
|
110
|
+
partNumber
|
|
111
|
+
});
|
|
112
|
+
return res.data.data.signedUrl;
|
|
113
|
+
}
|
|
114
|
+
async batchGetSignedUrls(orgId, assetId, assetVersionId, uploadId, objectName, partNumbers) {
|
|
115
|
+
const res = await this.http.post("/uploader/batch-signed-urls", {
|
|
116
|
+
orgId,
|
|
117
|
+
assetId,
|
|
118
|
+
assetVersionId,
|
|
119
|
+
uploadId,
|
|
120
|
+
objectName,
|
|
121
|
+
partNumbers
|
|
122
|
+
});
|
|
123
|
+
return res.data.data.signedUrls;
|
|
124
|
+
}
|
|
125
|
+
async completeUpload(data) {
|
|
126
|
+
const res = await this.http.post("/uploader/complete", data);
|
|
127
|
+
return res.data.data;
|
|
128
|
+
}
|
|
129
|
+
async abortUpload(data) {
|
|
130
|
+
await this.http.post("/uploader/abort", data);
|
|
131
|
+
}
|
|
132
|
+
async deleteUploadRecords(data) {
|
|
133
|
+
await this.http.delete("/uploader/delete", { data });
|
|
134
|
+
}
|
|
135
|
+
// ─── Session Recovery ─────────────────────────────────────────────────────
|
|
136
|
+
async getUploadSession(filename) {
|
|
137
|
+
try {
|
|
138
|
+
const res = await this.http.get("/uploader/session", {
|
|
139
|
+
params: { filename }
|
|
140
|
+
});
|
|
141
|
+
return res.data.data;
|
|
142
|
+
} catch {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async listUploadedParts(objectName, uploadId) {
|
|
147
|
+
var _a;
|
|
148
|
+
try {
|
|
149
|
+
const res = await this.http.post("/uploader/list-parts", {
|
|
150
|
+
objectName,
|
|
151
|
+
uploadId
|
|
152
|
+
});
|
|
153
|
+
return (_a = res.data.data.parts) != null ? _a : [];
|
|
154
|
+
} catch {
|
|
155
|
+
return [];
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
// src/types.ts
|
|
161
|
+
var SUPPORTED_UNREAL_ENGINE_VERSION = ["5.0.3", "5.2.1"];
|
|
162
|
+
var UNREAL_PROJECT_VERSION_TARGET = [
|
|
163
|
+
"Development",
|
|
164
|
+
"Shipping"
|
|
165
|
+
];
|
|
166
|
+
export {
|
|
167
|
+
AssetManagerSDK,
|
|
168
|
+
SUPPORTED_UNREAL_ENGINE_VERSION,
|
|
169
|
+
UNREAL_PROJECT_VERSION_TARGET
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client.ts","../src/types.ts"],"sourcesContent":["import axios, { AxiosInstance } from \"axios\";\nimport {\n AssetManagerSDKConfig,\n AssetWithRelations,\n UpdateAssetInput,\n UnrealProjectVersion,\n UpdateUnrealProjectVersionInput,\n User,\n CreateUserInput,\n UpdateUserInput,\n HealthResponse,\n RedisHealthResponse,\n InitiateUploadRequest,\n InitiateUploadResponse,\n CompleteUploadRequest,\n AbortUploadRequest,\n UploadSession,\n UploadPart,\n} from \"./types\";\n\nexport class AssetManagerSDK {\n private http: AxiosInstance;\n\n constructor(config: AssetManagerSDKConfig) {\n this.http = axios.create({\n baseURL: config.baseUrl,\n timeout: config.timeout ?? 30000,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n // ─── Health ───────────────────────────────────────────────────────────────\n\n async getHealth(): Promise<HealthResponse> {\n const res = await this.http.get(\"/health\");\n return res.data.data;\n }\n\n async getRedisHealth(): Promise<RedisHealthResponse> {\n const res = await this.http.get(\"/health/redis\");\n return res.data.data;\n }\n\n async testRedis(): Promise<void> {\n await this.http.post(\"/health/redis/test\");\n }\n\n // ─── Assets ───────────────────────────────────────────────────────────────\n\n async getAllAssets(): Promise<AssetWithRelations[]> {\n const res = await this.http.get(\"/assets\");\n return res.data.data;\n }\n\n async getAsset(assetId: string): Promise<AssetWithRelations> {\n const res = await this.http.get(`/assets/${assetId}`);\n return res.data.data;\n }\n\n async getAssetsByOrg(orgId: string): Promise<AssetWithRelations[]> {\n const res = await this.http.get(`/assets/organization/${orgId}`);\n return res.data.data;\n }\n\n async updateAsset(\n assetId: string,\n data: UpdateAssetInput,\n ): Promise<AssetWithRelations> {\n const res = await this.http.patch(`/assets/${assetId}`, data);\n return res.data.data;\n }\n\n async markAssetAsUploaded(assetId: string): Promise<AssetWithRelations> {\n const res = await this.http.patch(`/assets/${assetId}/mark-uploaded`);\n return res.data.data;\n }\n\n async markAssetAsValidated(assetId: string): Promise<AssetWithRelations> {\n const res = await this.http.patch(`/assets/${assetId}/mark-validated`);\n return res.data.data;\n }\n\n async markAssetAsFailed(assetId: string): Promise<AssetWithRelations> {\n const res = await this.http.patch(`/assets/${assetId}/mark-failed`);\n return res.data.data;\n }\n\n async deleteAsset(assetId: string): Promise<void> {\n await this.http.delete(`/assets/${assetId}`);\n }\n\n // ─── Unreal Project Versions ──────────────────────────────────────────────\n\n async getProjectVersion(versionId: string): Promise<UnrealProjectVersion> {\n const res = await this.http.get(`/unrealProjectVersion/${versionId}`);\n return res.data.data;\n }\n\n async getVersionsByAsset(assetId: string): Promise<UnrealProjectVersion[]> {\n const res = await this.http.get(`/unrealProjectVersion/asset/${assetId}`);\n return res.data.data;\n }\n\n async updateProjectVersion(\n versionId: string,\n data: UpdateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion> {\n const res = await this.http.patch(\n `/unrealProjectVersion/${versionId}`,\n data,\n );\n return res.data.data;\n }\n\n async deleteProjectVersion(versionId: string): Promise<void> {\n await this.http.delete(`/unrealProjectVersion/${versionId}`);\n }\n\n async deleteVersionsByAsset(assetId: string): Promise<void> {\n await this.http.delete(`/unrealProjectVersion/asset/${assetId}`);\n }\n\n // ─── Users ────────────────────────────────────────────────────────────────\n\n async getAllUsers(): Promise<User[]> {\n const res = await this.http.get(\"/users\");\n return res.data.data;\n }\n\n async getUser(userId: string): Promise<User> {\n const res = await this.http.get(`/users/${userId}`);\n return res.data.data;\n }\n\n async createUser(data: CreateUserInput): Promise<User> {\n const res = await this.http.post(\"/users\", data);\n return res.data.data;\n }\n\n async updateUser(userId: string, data: UpdateUserInput): Promise<User> {\n const res = await this.http.put(`/users/${userId}`, data);\n return res.data.data;\n }\n\n async deleteUser(userId: string): Promise<void> {\n await this.http.delete(`/users/${userId}`);\n }\n\n // ─── Upload ───────────────────────────────────────────────────────────────\n\n async initiateUpload(\n data: InitiateUploadRequest,\n ): Promise<InitiateUploadResponse> {\n const res = await this.http.post(\"/uploader/initiate\", data);\n return res.data.data;\n }\n\n async getSignedUrl(\n orgId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumber: number,\n ): Promise<string> {\n const res = await this.http.post(\"/uploader/signed-url\", {\n orgId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumber,\n });\n return res.data.data.signedUrl;\n }\n\n async batchGetSignedUrls(\n orgId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumbers: number[],\n ): Promise<Record<number, string>> {\n const res = await this.http.post(\"/uploader/batch-signed-urls\", {\n orgId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumbers,\n });\n return res.data.data.signedUrls;\n }\n\n async completeUpload(\n data: CompleteUploadRequest,\n ): Promise<AssetWithRelations> {\n const res = await this.http.post(\"/uploader/complete\", data);\n return res.data.data;\n }\n\n async abortUpload(data: AbortUploadRequest): Promise<void> {\n await this.http.post(\"/uploader/abort\", data);\n }\n\n async deleteUploadRecords(data: AbortUploadRequest): Promise<void> {\n await this.http.delete(\"/uploader/delete\", { data });\n }\n\n // ─── Session Recovery ─────────────────────────────────────────────────────\n\n async getUploadSession(filename: string): Promise<UploadSession | null> {\n try {\n const res = await this.http.get(\"/uploader/session\", {\n params: { filename },\n });\n return res.data.data;\n } catch {\n return null;\n }\n }\n\n async listUploadedParts(\n objectName: string,\n uploadId: string,\n ): Promise<UploadPart[]> {\n try {\n const res = await this.http.post(\"/uploader/list-parts\", {\n objectName,\n uploadId,\n });\n return res.data.data.parts ?? [];\n } catch {\n return [];\n }\n }\n}\n","// ─── Enums & Constants ────────────────────────────────────────────────────\n\nexport type AssetType = \"UNREAL_PROJECT\" | \"OTHER_3D\";\nexport type UploadStatus = \"PENDING\" | \"COMPLETED\" | \"FAILED\";\nexport type ValidationStatus = \"PENDING\" | \"VALID\" | \"INVALID\";\nexport type BuildStatus = \"PENDING\" | \"BUILDING\" | \"COMPLETED\" | \"FAILED\";\nexport type SourceType = \"UNIVERSAL_SCENE\";\n\nexport const SUPPORTED_UNREAL_ENGINE_VERSION = [\"5.0.3\", \"5.2.1\"] as const;\nexport type SupportedUnrealEngineVersion =\n (typeof SUPPORTED_UNREAL_ENGINE_VERSION)[number];\n\nexport const UNREAL_PROJECT_VERSION_TARGET = [\n \"Development\",\n \"Shipping\",\n] as const;\nexport type UnrealProjectVersionTarget =\n (typeof UNREAL_PROJECT_VERSION_TARGET)[number];\n\n// ─── Asset Types ──────────────────────────────────────────────────────────\n\nexport type AssetResponse = {\n id: string;\n name: string;\n orgId: string;\n assetType: AssetType;\n sourceType: SourceType;\n uploadStatus: UploadStatus;\n validationStatus: ValidationStatus;\n buildStatus: BuildStatus;\n storageBucket: string;\n storagePath: string;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type UnrealProjectResponse = {\n assetId: string;\n orgId: string;\n displayName: string;\n unrealProjectVersion: string;\n unrealPluginVersion: string;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type Other3dResponse = {\n assetId: string;\n orgId: string;\n displayName: string;\n unrealPluginVersion: string;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type AssetWithRelations = AssetResponse & {\n unrealProjects?: UnrealProjectResponse[];\n other3d?: Other3dResponse[];\n};\n\nexport type UpdateAssetInput = {\n name?: string;\n uploadStatus?: UploadStatus;\n validationStatus?: ValidationStatus;\n buildStatus?: BuildStatus;\n storageBucket?: string;\n storagePath?: string;\n};\n\n// ─── Unreal Project Version Types ─────────────────────────────────────────\n\nexport type UnrealProjectVersion = {\n id: string;\n orgId: string;\n authorUserId: string;\n appType: string;\n unrealProjectId: string;\n buildRegion: string | null;\n levelFilePath: string | null;\n levelName: string | null;\n name: string;\n packageArchiveSha256Sum: string;\n packageArchiveUrl: string;\n pluginVersionId: string;\n selfPackaged: boolean;\n state: string;\n symbolsArchiveSha256Sum: string;\n symbolsArchiveUrl: string;\n target: string;\n uploader: string;\n uploadId: string | null;\n objectName: string | null;\n downloadUrl: string | null;\n uploadSha256Sum: string | null;\n unrealEngineVersion: string | null;\n volumeCopyRegionsComplete: string[];\n volumeRegions: string[];\n volumeSizeGb: number;\n unrealProjectDirectoryPath: string | null;\n disableMultiplayer: boolean | null;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type UpdateUnrealProjectVersionInput = {\n name?: string;\n state?: string;\n target?: string;\n selfPackaged?: boolean;\n unrealEngineVersion?: string;\n volumeRegions?: string[];\n buildRegion?: string;\n levelName?: string;\n levelFilePath?: string;\n disableMultiplayer?: boolean;\n};\n\n// ─── User Types ───────────────────────────────────────────────────────────\n\nexport type User = {\n id: string;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type CreateUserInput = {\n id?: string;\n};\n\nexport type UpdateUserInput = {\n id?: string;\n};\n\n// ─── Health Types ─────────────────────────────────────────────────────────\n\nexport type HealthResponse = {\n status: string;\n timestamp: string;\n};\n\nexport type RedisHealthResponse = {\n status: string;\n latencyMs?: number;\n};\n\n// ─── Upload Types ──────────────────────────────────────────────────────────\n\nexport type InitiateUploadRequest = {\n orgId: string;\n assetType: AssetType;\n assetFilename: string;\n assetDisplayName?: string;\n unrealProjectId?: string;\n unrealProjectDisplayName?: string;\n unrealEngineVersion?: SupportedUnrealEngineVersion;\n selfPackaged?: boolean;\n target?: UnrealProjectVersionTarget;\n other_3dId?: string;\n other_3dDisplayName?: string;\n buildRegion?: string;\n volumeRegions?: string[];\n};\n\nexport type InitiateUploadResponse = {\n orgId: string;\n assetId: string;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n};\n\nexport type CompleteUploadRequest = {\n orgId: string;\n assetId: string;\n assetType: AssetType;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n parts: { partNumber: number; etag: string }[];\n failed?: boolean;\n sha256Sum?: string;\n};\n\nexport type AbortUploadRequest = {\n orgId?: string;\n assetId: string;\n assetType: AssetType;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n};\n\nexport type GetSignedUrlRequest = {\n orgId: string;\n assetId: string;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n partNumber: number;\n};\n\nexport type BatchSignedUrlsRequest = {\n orgId: string;\n assetId: string;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n partNumbers: number[];\n};\n\nexport type ListPartsRequest = {\n uploadId: string;\n objectName: string;\n};\n\nexport type UploadSession = {\n orgId: string;\n assetId: string;\n assetVersionId: string;\n uploadId: string;\n objectName: string;\n};\n\nexport type UploadPart = {\n partNumber: number;\n etag: string;\n};\n\n// ─── SDK Config ────────────────────────────────────────────────────────────\n\nexport type AssetManagerSDKConfig = {\n baseUrl: string;\n timeout?: number;\n};\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@newgameplusinc/odyssey-asset-manager-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Official SDK for the Odyssey Asset Manager backend",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.mjs",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsup",
|
|
14
|
+
"prepublishOnly": "npm run build"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"odyssey",
|
|
18
|
+
"asset-manager",
|
|
19
|
+
"sdk",
|
|
20
|
+
"upload",
|
|
21
|
+
"unreal"
|
|
22
|
+
],
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"axios": ">=1.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"typescript": "^5",
|
|
28
|
+
"tsup": "^8",
|
|
29
|
+
"@types/node": "^20"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "restricted"
|
|
33
|
+
}
|
|
34
|
+
}
|