Files
AstralRinth/packages/api-client/src/modules/kyros/content/v1.ts
T
Calum H. 6e7835fb35 feat: implement kryos upload sessions (#6145)
* feat: implement upload sessions

* fix: files not scoped

* feat: hide staging files folder and proper cancel feedback

* fix: lint
2026-05-21 16:49:48 +00:00

67 lines
1.9 KiB
TypeScript

import { AbstractModule } from '../../../core/abstract-module'
import type { UploadHandle, UploadProgress } from '../../../types/upload'
import type { Archon } from '../../archon/types'
export class KyrosContentV1Module extends AbstractModule {
public getModuleID(): string {
return 'kyros_content_v1'
}
/**
* Upload addon files to a world via multipart form data
*
* @param worldId - World UUID
* @param files - Files to upload as addons
* @param options - Optional progress callback
* @returns UploadHandle with promise, onProgress, and cancel
* @deprecated Use `kyros.upload_sessions_v1` so cancellation can remove staged addon files before finalize.
*/
public uploadAddonFile(
worldId: string,
files: (File | Blob)[],
options?: {
onProgress?: (progress: UploadProgress) => void
},
): UploadHandle<void> {
const formData = new FormData()
for (const file of files) {
formData.append('file', file, file instanceof File ? file.name : 'file')
}
return this.client.upload<void>(`/worlds/${worldId}/content/upload-addon-file`, {
api: '',
version: 'v1',
formData,
onProgress: options?.onProgress,
useNodeAuth: true,
})
}
/** POST /v1/worlds/:world_id/content/upload-modpack-file */
public uploadModpackFile(
worldId: string,
file: File | Blob,
properties: Archon.Content.v1.PropertiesFields,
options?: {
softOverride?: boolean
onProgress?: (progress: UploadProgress) => void
},
): UploadHandle<void> {
const formData = new FormData()
formData.append('file', file, file instanceof File ? file.name : 'file')
formData.append('properties', JSON.stringify(properties))
return this.client.upload<void>(`/worlds/${worldId}/content/upload-modpack-file`, {
api: '',
version: 'v1',
formData,
params:
options?.softOverride !== undefined
? { soft_override: String(options.softOverride) }
: undefined,
onProgress: options?.onProgress,
useNodeAuth: true,
})
}
}