@alliumcloud/asset-manager 1.0.1 → 1.1.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/dist/index.js CHANGED
@@ -53,7 +53,7 @@ var debugLog = (category, message, data) => {
53
53
  };
54
54
 
55
55
  // src/core/http.ts
56
- var PROD_BASE_URL = "https://api-gateway-dev.tenant-newgame.ord1.ingress.coreweave.cloud/assets/api/v1";
56
+ var PROD_BASE_URL = "https://api-gw-dev.2x22.com/assets/api/v1";
57
57
  function createHttpClient(config) {
58
58
  const BASE_URL = config._devBaseUrl ?? PROD_BASE_URL;
59
59
  if (!BASE_URL) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/utils/debug.ts","../src/core/http.ts","../src/modules/health.ts","../src/modules/assets.ts","../src/modules/versions.ts","../src/modules/users.ts","../src/modules/upload.ts","../src/modules/sanitization.ts","../src/index.ts"],"names":["axios"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * SDK Error factories.\n */\n\nexport interface AlliumError extends Error {\n readonly code: string;\n}\n\nfunction makeError(\n name: string,\n code: string,\n message: string,\n cause?: unknown,\n): AlliumError {\n const err = new Error(message) as AlliumError;\n err.name = name;\n (err as any).code = code;\n if (cause !== undefined) (err as any).cause = cause;\n return err;\n}\n\n/** Generic SDK error — use when no specific category fits */\nexport function createSDKError(\n message: string,\n code = \"SDK_ERROR\",\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumSDKError\", code, message, cause);\n}\n\n/** Thrown when the API key is missing, invalid, or rejected by the server */\nexport function createAuthError(message: string, cause?: unknown): AlliumError {\n return makeError(\"AlliumAuthError\", \"AUTH_ERROR\", message, cause);\n}\n\n/** Thrown when the HTTP request itself fails (network, timeout, 5xx) */\nexport function createRequestError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumRequestError\", \"REQUEST_ERROR\", message, cause);\n}\n\n/** Thrown when the server returns a 4xx for bad input data */\nexport function createValidationError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumValidationError\", \"VALIDATION_ERROR\", message, cause);\n}\n\n/** Thrown for upload-specific failures (initiate, complete, abort) */\nexport function createUploadError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumUploadError\", \"UPLOAD_ERROR\", message, cause);\n}\n\n/** Thrown when SDK_BASE_URL or apiKey is not configured correctly */\nexport function createConfigError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumConfigError\", \"INVALID_CONFIG\", message, cause);\n}\n\n/** Type guard — works for all Allium error factories */\nexport function isAlliumError(err: unknown): err is AlliumError {\n return err instanceof Error && \"code\" in err;\n}\n","/**\n * Centralised debug logging utility.\n */\n\ndeclare global {\n interface Window {\n ALLIUM_DEBUG?: boolean;\n }\n}\n\nexport const isDebugEnabled = (): boolean => {\n // Node.js environment\n if (typeof process !== \"undefined\" && process.env?.ALLIUM_DEBUG === \"true\") {\n return true;\n }\n // Browser environment\n if (typeof window !== \"undefined\" && window.ALLIUM_DEBUG === true) {\n return true;\n }\n return false;\n};\n\nexport const debugLog = (\n category: string,\n message: string,\n data?: unknown,\n): void => {\n if (!isDebugEnabled()) return;\n const timestamp = new Date().toISOString().slice(11, 23);\n if (data !== undefined) {\n } else {\n }\n};\n","/**\n * HTTP client factory.\n *\n * Creates and configures the axios instance used by all modules.\n * Handles:\n * - Base URL (baked in at build time)\n * - API key injection on every request via header\n * - Timeout\n * - Response unwrapping (your backend wraps all responses in { data: ... })\n * - Error normalization into AlliumError types\n */\n\nimport axios, { AxiosInstance, AxiosError } from \"axios\";\nimport { AssetManagerSDKConfig } from \"../types\";\nimport {\n createAuthError,\n createConfigError,\n createRequestError,\n createValidationError,\n createUploadError,\n} from \"../errors\";\nimport { debugLog } from \"../utils\";\n\n// ─── Build-time URL ───────────────────────────────────────────────────────────\n\ndeclare const process: { env: { ASSET_MANAGER_BASE_URL: string } };\nconst PROD_BASE_URL: string = process.env.ASSET_MANAGER_BASE_URL;\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createHttpClient(config: AssetManagerSDKConfig): AxiosInstance {\n const BASE_URL = config._devBaseUrl ?? PROD_BASE_URL;\n if (!BASE_URL) {\n throw createConfigError(\n \"[SDK] Base URL not configured. This SDK build is missing ASSET_MANAGER_BASE_URL.\",\n );\n }\n\n if (\n !config.apiKey ||\n typeof config.apiKey !== \"string\" ||\n !config.apiKey.trim()\n ) {\n throw createConfigError(\"[SDK] A valid apiKey is required.\");\n }\n\n if (typeof config.accessTokenProvider !== \"function\")\n throw createConfigError(\"[SDK] accessTokenProvider must be a function.\");\n\n const client = axios.create({\n baseURL: BASE_URL,\n timeout: config.timeout ?? 30_000,\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": config.apiKey.trim(),\n ...(config.jwksUri?.trim() && { \"x-jwks-uri\": config.jwksUri.trim() }),\n },\n });\n\n // ── Request interceptor — debug logging ───────────────────────────────────\n client.interceptors.request.use(async (req) => {\n const token = await config.accessTokenProvider();\n if (token) {\n req.headers[\"Authorization\"] = `Bearer ${token}`;\n }\n debugLog(\n \"HTTP\",\n `→ ${req.method?.toUpperCase()} ${req.url}`,\n req.params ?? req.data,\n );\n return req;\n });\n\n // ── Response interceptor — unwrap + normalize errors ──────────────────────\n client.interceptors.response.use(\n (res) => {\n debugLog(\"HTTP\", `← ${res.status} ${res.config.url}`);\n return res;\n },\n (err: AxiosError) => {\n const status = err.response?.status;\n const message =\n (err.response?.data as any)?.message ?? err.message ?? \"Unknown error\";\n const url = err.config?.url ?? \"\";\n\n debugLog(\"HTTP\", `← ERROR ${status ?? \"network\"} ${url}`, message);\n\n if (!status) {\n // Network error — no response received at all\n throw createRequestError(\n `[SDK] Network error reaching ${url}: ${message}`,\n err,\n );\n }\n\n if (status === 401 || status === 403) {\n throw createAuthError(\n `[SDK] Authentication failed (${status}): ${message}`,\n err,\n );\n }\n\n if (status === 422 || status === 400) {\n throw createValidationError(\n `[SDK] Validation error (${status}): ${message}`,\n err,\n );\n }\n\n if (url.includes(\"/uploader\")) {\n throw createUploadError(\n `[SDK] Upload operation failed (${status}): ${message}`,\n err,\n );\n }\n\n throw createRequestError(\n `[SDK] Request failed (${status}): ${message}`,\n err,\n );\n },\n );\n\n return client;\n}\n","/**\n * Health module — server and Redis health checks.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { HealthResponse, RedisHealthResponse } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface HealthHandle {\n getHealth(): Promise<HealthResponse>;\n getRedisHealth(): Promise<RedisHealthResponse>;\n testRedis(): Promise<void>;\n}\n\nexport function createHealthModule(http: AxiosInstance): HealthHandle {\n async function getHealth(): Promise<HealthResponse> {\n const res = await http.get(\"/health\");\n debugLog(\"Health\", \"getHealth\", res.data.data);\n return res.data.data;\n }\n\n async function getRedisHealth(): Promise<RedisHealthResponse> {\n const res = await http.get(\"/health/redis\");\n debugLog(\"Health\", \"getRedisHealth\", res.data.data);\n return res.data.data;\n }\n\n async function testRedis(): Promise<void> {\n await http.post(\"/health/redis/test\");\n debugLog(\"Health\", \"testRedis — OK\");\n }\n\n return {\n getHealth,\n getRedisHealth,\n testRedis,\n };\n}\n","/**\n * Assets module — CRUD operations for assets.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n AssetWithRelations,\n CreateAssetInput,\n UpdateAssetInput,\n UpdateAssetStatusInput,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface AssetsHandle {\n create(data: CreateAssetInput): Promise<AssetWithRelations>;\n getAll(): Promise<AssetWithRelations[]>;\n getById(assetId: string): Promise<AssetWithRelations>;\n getByOrg(orgId: string): Promise<AssetWithRelations[]>;\n getByProject(projectId: string): Promise<AssetWithRelations[]>;\n update(assetId: string, data: UpdateAssetInput): Promise<AssetWithRelations>;\n updateStatus(\n assetId: string,\n data: UpdateAssetStatusInput,\n ): Promise<AssetWithRelations>;\n markAsUploaded(assetId: string): Promise<AssetWithRelations>;\n markAsValidated(assetId: string): Promise<AssetWithRelations>;\n markAsFailed(\n assetId: string,\n stage: \"upload\" | \"validation\" | \"build\",\n ): Promise<AssetWithRelations>;\n uploadThumb(\n assetId: string,\n userId: string,\n file: File | Blob,\n ): Promise<AssetWithRelations>;\n delete(assetId: string): Promise<void>;\n}\n\nexport function createAssetsModule(http: AxiosInstance): AssetsHandle {\n async function create(data: CreateAssetInput): Promise<AssetWithRelations> {\n const res = await http.post(\"/assets\", data);\n debugLog(\"Assets\", \"create\", res.data.data);\n return res.data.data;\n }\n async function getAll(): Promise<AssetWithRelations[]> {\n const res = await http.get(\"/assets\");\n debugLog(\"Assets\", \"getAll\", res.data.data);\n return res.data.data;\n }\n\n async function getById(assetId: string): Promise<AssetWithRelations> {\n const res = await http.get(`/assets/${assetId}`);\n debugLog(\"Assets\", `getById:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByOrg(orgId: string): Promise<AssetWithRelations[]> {\n const res = await http.get(`/assets/organization/${orgId}`);\n debugLog(\"Assets\", `getByOrg:${orgId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByProject(\n projectId: string,\n ): Promise<AssetWithRelations[]> {\n const res = await http.get(`/assets/projects/${projectId}`);\n debugLog(\"Assets\", `getByProject:${projectId}`, res.data.data);\n return res.data.data;\n }\n\n async function update(\n assetId: string,\n data: UpdateAssetInput,\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}`, data);\n debugLog(\"Assets\", `update:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function updateStatus(\n assetId: string,\n data: UpdateAssetStatusInput,\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/status`, data);\n debugLog(\"Assets\", `updateStatus:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function markAsUploaded(assetId: string): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-uploaded`);\n debugLog(\"Assets\", `markAsUploaded:${assetId}`);\n return res.data.data;\n }\n\n async function markAsValidated(assetId: string): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-validated`);\n debugLog(\"Assets\", `markAsValidated:${assetId}`);\n return res.data.data;\n }\n\n async function markAsFailed(\n assetId: string,\n stage: \"upload\" | \"validation\" | \"build\",\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-failed`, { stage });\n debugLog(\"Assets\", `markAsFailed:${assetId}`, { stage });\n return res.data.data;\n }\n\n async function uploadThumb(\n assetId: string,\n userId: string,\n file: File | Blob,\n ): Promise<AssetWithRelations> {\n const formData = new FormData();\n formData.append(\"thumb\", file);\n formData.append(\"userId\", userId);\n const res = await http.post(`/assets/${assetId}/thumb`, formData, {\n headers: { \"Content-Type\": \"multipart/form-data\" },\n });\n debugLog(\"Assets\", `uploadThumb:${assetId}`);\n return res.data.data;\n }\n async function deleteAsset(assetId: string): Promise<void> {\n await http.delete(`/assets/${assetId}`);\n debugLog(\"Assets\", `delete:${assetId}`);\n }\n\n return {\n create,\n getAll,\n getById,\n getByOrg,\n getByProject,\n update,\n updateStatus,\n markAsUploaded,\n markAsValidated,\n markAsFailed,\n uploadThumb,\n delete: deleteAsset,\n };\n}\n","/**\n * Versions module — Unreal project version operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n CreateUnrealProjectVersionInput,\n UnrealProjectVersion,\n UpdateUnrealProjectVersionInput,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface VersionsHandle {\n create(data: CreateUnrealProjectVersionInput): Promise<UnrealProjectVersion>;\n getById(versionId: string): Promise<UnrealProjectVersion>;\n getByAsset(assetId: string): Promise<UnrealProjectVersion[]>;\n update(\n versionId: string,\n data: UpdateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion>;\n delete(versionId: string): Promise<void>;\n deleteByAsset(assetId: string): Promise<void>;\n}\n\nexport function createVersionsModule(http: AxiosInstance): VersionsHandle {\n async function create(\n data: CreateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion> {\n const res = await http.post(\"/unrealProjectVersion\", data);\n debugLog(\"Versions\", \"create\", res.data.data);\n return res.data.data;\n }\n async function getById(versionId: string): Promise<UnrealProjectVersion> {\n const res = await http.get(`/unrealProjectVersion/${versionId}`);\n debugLog(\"Versions\", `getById:${versionId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByAsset(assetId: string): Promise<UnrealProjectVersion[]> {\n const res = await http.get(`/unrealProjectVersion/asset/${assetId}`);\n debugLog(\"Versions\", `getByAsset:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function update(\n versionId: string,\n data: UpdateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion> {\n const res = await http.patch(`/unrealProjectVersion/${versionId}`, data);\n debugLog(\"Versions\", `update:${versionId}`, res.data.data);\n return res.data.data;\n }\n\n async function deleteVersion(versionId: string): Promise<void> {\n await http.delete(`/unrealProjectVersion/${versionId}`);\n debugLog(\"Versions\", `delete:${versionId}`);\n }\n\n async function deleteByAsset(assetId: string): Promise<void> {\n await http.delete(`/unrealProjectVersion/asset/${assetId}`);\n debugLog(\"Versions\", `deleteByAsset:${assetId}`);\n }\n\n return {\n create,\n getById,\n getByAsset,\n update,\n delete: deleteVersion,\n deleteByAsset,\n };\n}\n","/**\n * Users module — user management operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { User, CreateUserInput, UpdateUserInput } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface UsersHandle {\n getAll(): Promise<User[]>;\n getById(userId: string): Promise<User>;\n create(data: CreateUserInput): Promise<User>;\n update(userId: string, data: UpdateUserInput): Promise<User>;\n delete(userId: string): Promise<void>;\n}\n\nexport function createUsersModule(http: AxiosInstance): UsersHandle {\n async function getAll(): Promise<User[]> {\n const res = await http.get(\"/users\");\n debugLog(\"Users\", \"getAll\", res.data.data);\n return res.data.data;\n }\n\n async function getById(userId: string): Promise<User> {\n const res = await http.get(`/users/${userId}`);\n debugLog(\"Users\", `getById:${userId}`, res.data.data);\n return res.data.data;\n }\n\n async function create(data: CreateUserInput): Promise<User> {\n const res = await http.post(\"/users\", data);\n debugLog(\"Users\", \"create\", res.data.data);\n return res.data.data;\n }\n\n async function update(userId: string, data: UpdateUserInput): Promise<User> {\n const res = await http.put(`/users/${userId}`, data);\n debugLog(\"Users\", `update:${userId}`, res.data.data);\n return res.data.data;\n }\n\n async function deleteUser(userId: string): Promise<void> {\n await http.delete(`/users/${userId}`);\n debugLog(\"Users\", `delete:${userId}`);\n }\n\n return {\n getAll,\n getById,\n create,\n update,\n delete: deleteUser,\n };\n}\n","/**\n * Upload module — multipart upload lifecycle management.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n InitiateUploadRequest,\n InitiateUploadResponse,\n CompleteUploadRequest,\n AbortUploadRequest,\n UploadSession,\n UploadPart,\n AssetWithRelations,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface UploadHandle {\n initiate(data: InitiateUploadRequest): Promise<InitiateUploadResponse>;\n getSignedUrl(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumber: number,\n ): Promise<string>;\n batchGetSignedUrls(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumbers: number[],\n ): Promise<Record<number, string>>;\n complete(data: CompleteUploadRequest): Promise<AssetWithRelations>;\n abort(data: AbortUploadRequest): Promise<void>;\n deleteRecords(data: AbortUploadRequest): Promise<void>;\n getSession(filename: string): Promise<UploadSession | null>;\n listParts(objectName: string, uploadId: string): Promise<UploadPart[]>;\n}\n\nexport function createUploadModule(http: AxiosInstance): UploadHandle {\n async function initiate(\n data: InitiateUploadRequest,\n ): Promise<InitiateUploadResponse> {\n const res = await http.post(\"/uploader/initiate\", data);\n debugLog(\"Upload\", \"initiate\", res.data.data);\n return res.data.data;\n }\n\n async function getSignedUrl(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumber: number,\n ): Promise<string> {\n const res = await http.post(\"/uploader/signed-url\", {\n orgId,\n projectId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumber,\n });\n debugLog(\"Upload\", `getSignedUrl part:${partNumber}`);\n return res.data.data.signedUrl;\n }\n\n async function batchGetSignedUrls(\n orgId: string,\n projectId: 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 http.post(\"/uploader/batch-signed-urls\", {\n orgId,\n projectId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumbers,\n });\n debugLog(\"Upload\", `batchGetSignedUrls parts:${partNumbers.length}`);\n return res.data.data.signedUrls;\n }\n\n async function complete(\n data: CompleteUploadRequest,\n ): Promise<AssetWithRelations> {\n const res = await http.post(\"/uploader/complete\", data);\n debugLog(\"Upload\", \"complete\", res.data.data);\n return res.data.data;\n }\n\n async function abort(data: AbortUploadRequest): Promise<void> {\n await http.post(\"/uploader/abort\", data);\n debugLog(\"Upload\", \"abort\");\n }\n\n async function deleteRecords(data: AbortUploadRequest): Promise<void> {\n await http.post(\"/uploader/delete-records\", data);\n debugLog(\"Upload\", \"deleteRecords\");\n }\n\n async function getSession(filename: string): Promise<UploadSession | null> {\n try {\n const res = await http.get(\"/uploader/session\", {\n params: { filename },\n });\n debugLog(\"Upload\", `getSession:${filename}`, res.data.data);\n return res.data.data;\n } catch {\n return null;\n }\n }\n\n async function listParts(\n objectName: string,\n uploadId: string,\n ): Promise<UploadPart[]> {\n try {\n const res = await http.post(\"/uploader/list-parts\", {\n objectName,\n uploadId,\n });\n debugLog(\"Upload\", `listParts:${uploadId}`, res.data.data);\n return res.data.data.parts ?? [];\n } catch {\n return [];\n }\n }\n\n return {\n initiate,\n getSignedUrl,\n batchGetSignedUrls,\n complete,\n abort,\n deleteRecords,\n getSession,\n listParts,\n };\n}\n","/**\n * Sanitization module — deep project deletion operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { DeleteProjectReport } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface SanitizationHandle {\n deleteProjectAndFootprint(assetId: string): Promise<DeleteProjectReport>;\n}\n\nexport function createSanitizationModule(\n http: AxiosInstance,\n): SanitizationHandle {\n async function deleteProjectAndFootprint(\n assetId: string,\n ): Promise<DeleteProjectReport> {\n const res = await http.delete(`/deepSanitization/${assetId}`);\n debugLog(\n \"Sanitization\",\n `deleteProjectAndFootprint:${assetId}`,\n res.data.data,\n );\n return res.data.data;\n }\n\n return {\n deleteProjectAndFootprint,\n };\n}\n","import { createHttpClient } from \"./core/http\";\nimport { createHealthModule, HealthHandle } from \"./modules/health\";\nimport { createAssetsModule, AssetsHandle } from \"./modules/assets\";\nimport { createVersionsModule, VersionsHandle } from \"./modules/versions\";\nimport { createUsersModule, UsersHandle } from \"./modules/users\";\nimport { createUploadModule, UploadHandle } from \"./modules/upload\";\nimport {\n createSanitizationModule,\n SanitizationHandle,\n} from \"./modules/sanitization\";\nimport { AssetManagerSDKConfig } from \"./types\";\nimport { debugLog } from \"./utils\";\n\n// ─── Public handle interface ──────────────────────────────────────────────────\n\nexport interface AssetManagerSDKHandle {\n sdkKey: string;\n readonly serviceType: \"asset-manager\";\n health: HealthHandle;\n assets: AssetsHandle;\n versions: VersionsHandle;\n users: UsersHandle;\n upload: UploadHandle;\n sanitization: SanitizationHandle;\n}\n\n// ─── Factory function ─────────────────────────────────────────────────────────\n\nexport function createAssetManagerSDK(\n config: AssetManagerSDKConfig,\n): AssetManagerSDKHandle {\n const http = createHttpClient(config);\n\n debugLog(\"SDK\", \"Initialized\", {\n timeout: config.timeout ?? 30_000,\n });\n\n return {\n sdkKey: config.apiKey,\n serviceType: \"asset-manager\" as const,\n health: createHealthModule(http),\n assets: createAssetsModule(http),\n versions: createVersionsModule(http),\n users: createUsersModule(http),\n upload: createUploadModule(http),\n sanitization: createSanitizationModule(http),\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst AssetManagerSDK = {\n /**\n * Create a new SDK client instance.\n * @param config SDK configuration — apiKey is required, timeout is optional.\n */\n create(config: AssetManagerSDKConfig): AssetManagerSDKHandle {\n return createAssetManagerSDK(config);\n },\n} as const;\n\nexport default AssetManagerSDK;\n\n// ─── Type exports — consumers can import types directly from the SDK ──────────\n\nexport type { AssetManagerSDKConfig } from \"./types\";\nexport type { AssetWithRelations, UpdateAssetInput } from \"./types\";\nexport type {\n UnrealProjectVersion,\n UpdateUnrealProjectVersionInput,\n} from \"./types\";\nexport type { User, CreateUserInput, UpdateUserInput } from \"./types\";\nexport type {\n InitiateUploadRequest,\n InitiateUploadResponse,\n CompleteUploadRequest,\n AbortUploadRequest,\n UploadSession,\n UploadPart,\n} from \"./types\";\nexport type { DeleteProjectReport, DeletionStepResult } from \"./types\";\nexport type { HealthResponse, RedisHealthResponse } from \"./types\";\nexport type {\n AssetType,\n UploadStatus,\n ValidationStatus,\n BuildStatus,\n} from \"./types\";\nexport { isAlliumError } from \"./errors\";\nexport type { AlliumError } from \"./errors\";\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/utils/debug.ts","../src/core/http.ts","../src/modules/health.ts","../src/modules/assets.ts","../src/modules/versions.ts","../src/modules/users.ts","../src/modules/upload.ts","../src/modules/sanitization.ts","../src/index.ts"],"names":["axios"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * SDK Error factories.\n */\n\nexport interface AlliumError extends Error {\n readonly code: string;\n}\n\nfunction makeError(\n name: string,\n code: string,\n message: string,\n cause?: unknown,\n): AlliumError {\n const err = new Error(message) as AlliumError;\n err.name = name;\n (err as any).code = code;\n if (cause !== undefined) (err as any).cause = cause;\n return err;\n}\n\n/** Generic SDK error — use when no specific category fits */\nexport function createSDKError(\n message: string,\n code = \"SDK_ERROR\",\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumSDKError\", code, message, cause);\n}\n\n/** Thrown when the API key is missing, invalid, or rejected by the server */\nexport function createAuthError(message: string, cause?: unknown): AlliumError {\n return makeError(\"AlliumAuthError\", \"AUTH_ERROR\", message, cause);\n}\n\n/** Thrown when the HTTP request itself fails (network, timeout, 5xx) */\nexport function createRequestError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumRequestError\", \"REQUEST_ERROR\", message, cause);\n}\n\n/** Thrown when the server returns a 4xx for bad input data */\nexport function createValidationError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumValidationError\", \"VALIDATION_ERROR\", message, cause);\n}\n\n/** Thrown for upload-specific failures (initiate, complete, abort) */\nexport function createUploadError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumUploadError\", \"UPLOAD_ERROR\", message, cause);\n}\n\n/** Thrown when SDK_BASE_URL or apiKey is not configured correctly */\nexport function createConfigError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumConfigError\", \"INVALID_CONFIG\", message, cause);\n}\n\n/** Type guard — works for all Allium error factories */\nexport function isAlliumError(err: unknown): err is AlliumError {\n return err instanceof Error && \"code\" in err;\n}\n","/**\n * Centralised debug logging utility.\n */\n\ndeclare global {\n interface Window {\n ALLIUM_DEBUG?: boolean;\n }\n}\n\nexport const isDebugEnabled = (): boolean => {\n // Node.js environment\n if (typeof process !== \"undefined\" && process.env?.ALLIUM_DEBUG === \"true\") {\n return true;\n }\n // Browser environment\n if (typeof window !== \"undefined\" && window.ALLIUM_DEBUG === true) {\n return true;\n }\n return false;\n};\n\nexport const debugLog = (\n category: string,\n message: string,\n data?: unknown,\n): void => {\n if (!isDebugEnabled()) return;\n const timestamp = new Date().toISOString().slice(11, 23);\n if (data !== undefined) {\n } else {\n }\n};\n","/**\n * HTTP client factory.\n *\n * Creates and configures the axios instance used by all modules.\n * Handles:\n * - Base URL (baked in at build time)\n * - API key injection on every request via header\n * - Timeout\n * - Response unwrapping (your backend wraps all responses in { data: ... })\n * - Error normalization into AlliumError types\n */\n\nimport axios, { AxiosInstance, AxiosError } from \"axios\";\nimport { AssetManagerSDKConfig } from \"../types\";\nimport {\n createAuthError,\n createConfigError,\n createRequestError,\n createValidationError,\n createUploadError,\n} from \"../errors\";\nimport { debugLog } from \"../utils\";\n\n// ─── Build-time URL ───────────────────────────────────────────────────────────\n\ndeclare const process: { env: { ASSET_MANAGER_BASE_URL: string } };\nconst PROD_BASE_URL: string = process.env.ASSET_MANAGER_BASE_URL;\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createHttpClient(config: AssetManagerSDKConfig): AxiosInstance {\n const BASE_URL = config._devBaseUrl ?? PROD_BASE_URL;\n if (!BASE_URL) {\n throw createConfigError(\n \"[SDK] Base URL not configured. This SDK build is missing ASSET_MANAGER_BASE_URL.\",\n );\n }\n\n if (\n !config.apiKey ||\n typeof config.apiKey !== \"string\" ||\n !config.apiKey.trim()\n ) {\n throw createConfigError(\"[SDK] A valid apiKey is required.\");\n }\n\n if (typeof config.accessTokenProvider !== \"function\")\n throw createConfigError(\"[SDK] accessTokenProvider must be a function.\");\n\n const client = axios.create({\n baseURL: BASE_URL,\n timeout: config.timeout ?? 30_000,\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": config.apiKey.trim(),\n ...(config.jwksUri?.trim() && { \"x-jwks-uri\": config.jwksUri.trim() }),\n },\n });\n\n // ── Request interceptor — debug logging ───────────────────────────────────\n client.interceptors.request.use(async (req) => {\n const token = await config.accessTokenProvider();\n if (token) {\n req.headers[\"Authorization\"] = `Bearer ${token}`;\n }\n debugLog(\n \"HTTP\",\n `→ ${req.method?.toUpperCase()} ${req.url}`,\n req.params ?? req.data,\n );\n return req;\n });\n\n // ── Response interceptor — unwrap + normalize errors ──────────────────────\n client.interceptors.response.use(\n (res) => {\n debugLog(\"HTTP\", `← ${res.status} ${res.config.url}`);\n return res;\n },\n (err: AxiosError) => {\n const status = err.response?.status;\n const message =\n (err.response?.data as any)?.message ?? err.message ?? \"Unknown error\";\n const url = err.config?.url ?? \"\";\n\n debugLog(\"HTTP\", `← ERROR ${status ?? \"network\"} ${url}`, message);\n\n if (!status) {\n // Network error — no response received at all\n throw createRequestError(\n `[SDK] Network error reaching ${url}: ${message}`,\n err,\n );\n }\n\n if (status === 401 || status === 403) {\n throw createAuthError(\n `[SDK] Authentication failed (${status}): ${message}`,\n err,\n );\n }\n\n if (status === 422 || status === 400) {\n throw createValidationError(\n `[SDK] Validation error (${status}): ${message}`,\n err,\n );\n }\n\n if (url.includes(\"/uploader\")) {\n throw createUploadError(\n `[SDK] Upload operation failed (${status}): ${message}`,\n err,\n );\n }\n\n throw createRequestError(\n `[SDK] Request failed (${status}): ${message}`,\n err,\n );\n },\n );\n\n return client;\n}\n","/**\n * Health module — server and Redis health checks.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { HealthResponse, RedisHealthResponse } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface HealthHandle {\n getHealth(): Promise<HealthResponse>;\n getRedisHealth(): Promise<RedisHealthResponse>;\n testRedis(): Promise<void>;\n}\n\nexport function createHealthModule(http: AxiosInstance): HealthHandle {\n async function getHealth(): Promise<HealthResponse> {\n const res = await http.get(\"/health\");\n debugLog(\"Health\", \"getHealth\", res.data.data);\n return res.data.data;\n }\n\n async function getRedisHealth(): Promise<RedisHealthResponse> {\n const res = await http.get(\"/health/redis\");\n debugLog(\"Health\", \"getRedisHealth\", res.data.data);\n return res.data.data;\n }\n\n async function testRedis(): Promise<void> {\n await http.post(\"/health/redis/test\");\n debugLog(\"Health\", \"testRedis — OK\");\n }\n\n return {\n getHealth,\n getRedisHealth,\n testRedis,\n };\n}\n","/**\n * Assets module — CRUD operations for assets.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n AssetWithRelations,\n CreateAssetInput,\n UpdateAssetInput,\n UpdateAssetStatusInput,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface AssetsHandle {\n create(data: CreateAssetInput): Promise<AssetWithRelations>;\n getAll(): Promise<AssetWithRelations[]>;\n getById(assetId: string): Promise<AssetWithRelations>;\n getByOrg(orgId: string): Promise<AssetWithRelations[]>;\n getByProject(projectId: string): Promise<AssetWithRelations[]>;\n update(assetId: string, data: UpdateAssetInput): Promise<AssetWithRelations>;\n updateStatus(\n assetId: string,\n data: UpdateAssetStatusInput,\n ): Promise<AssetWithRelations>;\n markAsUploaded(assetId: string): Promise<AssetWithRelations>;\n markAsValidated(assetId: string): Promise<AssetWithRelations>;\n markAsFailed(\n assetId: string,\n stage: \"upload\" | \"validation\" | \"build\",\n ): Promise<AssetWithRelations>;\n uploadThumb(\n assetId: string,\n userId: string,\n file: File | Blob,\n ): Promise<AssetWithRelations>;\n delete(assetId: string): Promise<void>;\n}\n\nexport function createAssetsModule(http: AxiosInstance): AssetsHandle {\n async function create(data: CreateAssetInput): Promise<AssetWithRelations> {\n const res = await http.post(\"/assets\", data);\n debugLog(\"Assets\", \"create\", res.data.data);\n return res.data.data;\n }\n async function getAll(): Promise<AssetWithRelations[]> {\n const res = await http.get(\"/assets\");\n debugLog(\"Assets\", \"getAll\", res.data.data);\n return res.data.data;\n }\n\n async function getById(assetId: string): Promise<AssetWithRelations> {\n const res = await http.get(`/assets/${assetId}`);\n debugLog(\"Assets\", `getById:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByOrg(orgId: string): Promise<AssetWithRelations[]> {\n const res = await http.get(`/assets/organization/${orgId}`);\n debugLog(\"Assets\", `getByOrg:${orgId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByProject(\n projectId: string,\n ): Promise<AssetWithRelations[]> {\n const res = await http.get(`/assets/projects/${projectId}`);\n debugLog(\"Assets\", `getByProject:${projectId}`, res.data.data);\n return res.data.data;\n }\n\n async function update(\n assetId: string,\n data: UpdateAssetInput,\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}`, data);\n debugLog(\"Assets\", `update:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function updateStatus(\n assetId: string,\n data: UpdateAssetStatusInput,\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/status`, data);\n debugLog(\"Assets\", `updateStatus:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function markAsUploaded(assetId: string): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-uploaded`);\n debugLog(\"Assets\", `markAsUploaded:${assetId}`);\n return res.data.data;\n }\n\n async function markAsValidated(assetId: string): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-validated`);\n debugLog(\"Assets\", `markAsValidated:${assetId}`);\n return res.data.data;\n }\n\n async function markAsFailed(\n assetId: string,\n stage: \"upload\" | \"validation\" | \"build\",\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-failed`, { stage });\n debugLog(\"Assets\", `markAsFailed:${assetId}`, { stage });\n return res.data.data;\n }\n\n async function uploadThumb(\n assetId: string,\n userId: string,\n file: File | Blob,\n ): Promise<AssetWithRelations> {\n const formData = new FormData();\n formData.append(\"thumb\", file);\n formData.append(\"userId\", userId);\n const res = await http.post(`/assets/${assetId}/thumb`, formData, {\n headers: { \"Content-Type\": \"multipart/form-data\" },\n });\n debugLog(\"Assets\", `uploadThumb:${assetId}`);\n return res.data.data;\n }\n async function deleteAsset(assetId: string): Promise<void> {\n await http.delete(`/assets/${assetId}`);\n debugLog(\"Assets\", `delete:${assetId}`);\n }\n\n return {\n create,\n getAll,\n getById,\n getByOrg,\n getByProject,\n update,\n updateStatus,\n markAsUploaded,\n markAsValidated,\n markAsFailed,\n uploadThumb,\n delete: deleteAsset,\n };\n}\n","/**\n * Versions module — Unreal project version operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n CreateUnrealProjectVersionInput,\n UnrealProjectVersion,\n UpdateUnrealProjectVersionInput,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface VersionsHandle {\n create(data: CreateUnrealProjectVersionInput): Promise<UnrealProjectVersion>;\n getById(versionId: string): Promise<UnrealProjectVersion>;\n getByAsset(assetId: string): Promise<UnrealProjectVersion[]>;\n update(\n versionId: string,\n data: UpdateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion>;\n delete(versionId: string): Promise<void>;\n deleteByAsset(assetId: string): Promise<void>;\n}\n\nexport function createVersionsModule(http: AxiosInstance): VersionsHandle {\n async function create(\n data: CreateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion> {\n const res = await http.post(\"/unrealProjectVersion\", data);\n debugLog(\"Versions\", \"create\", res.data.data);\n return res.data.data;\n }\n async function getById(versionId: string): Promise<UnrealProjectVersion> {\n const res = await http.get(`/unrealProjectVersion/${versionId}`);\n debugLog(\"Versions\", `getById:${versionId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByAsset(assetId: string): Promise<UnrealProjectVersion[]> {\n const res = await http.get(`/unrealProjectVersion/asset/${assetId}`);\n debugLog(\"Versions\", `getByAsset:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function update(\n versionId: string,\n data: UpdateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion> {\n const res = await http.patch(`/unrealProjectVersion/${versionId}`, data);\n debugLog(\"Versions\", `update:${versionId}`, res.data.data);\n return res.data.data;\n }\n\n async function deleteVersion(versionId: string): Promise<void> {\n await http.delete(`/unrealProjectVersion/${versionId}`);\n debugLog(\"Versions\", `delete:${versionId}`);\n }\n\n async function deleteByAsset(assetId: string): Promise<void> {\n await http.delete(`/unrealProjectVersion/asset/${assetId}`);\n debugLog(\"Versions\", `deleteByAsset:${assetId}`);\n }\n\n return {\n create,\n getById,\n getByAsset,\n update,\n delete: deleteVersion,\n deleteByAsset,\n };\n}\n","/**\n * Users module — user management operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { User, CreateUserInput, UpdateUserInput } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface UsersHandle {\n getAll(): Promise<User[]>;\n getById(userId: string): Promise<User>;\n create(data: CreateUserInput): Promise<User>;\n update(userId: string, data: UpdateUserInput): Promise<User>;\n delete(userId: string): Promise<void>;\n}\n\nexport function createUsersModule(http: AxiosInstance): UsersHandle {\n async function getAll(): Promise<User[]> {\n const res = await http.get(\"/users\");\n debugLog(\"Users\", \"getAll\", res.data.data);\n return res.data.data;\n }\n\n async function getById(userId: string): Promise<User> {\n const res = await http.get(`/users/${userId}`);\n debugLog(\"Users\", `getById:${userId}`, res.data.data);\n return res.data.data;\n }\n\n async function create(data: CreateUserInput): Promise<User> {\n const res = await http.post(\"/users\", data);\n debugLog(\"Users\", \"create\", res.data.data);\n return res.data.data;\n }\n\n async function update(userId: string, data: UpdateUserInput): Promise<User> {\n const res = await http.put(`/users/${userId}`, data);\n debugLog(\"Users\", `update:${userId}`, res.data.data);\n return res.data.data;\n }\n\n async function deleteUser(userId: string): Promise<void> {\n await http.delete(`/users/${userId}`);\n debugLog(\"Users\", `delete:${userId}`);\n }\n\n return {\n getAll,\n getById,\n create,\n update,\n delete: deleteUser,\n };\n}\n","/**\n * Upload module — multipart upload lifecycle management.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n InitiateUploadRequest,\n InitiateUploadResponse,\n CompleteUploadRequest,\n AbortUploadRequest,\n UploadSession,\n UploadPart,\n AssetWithRelations,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface UploadHandle {\n initiate(data: InitiateUploadRequest): Promise<InitiateUploadResponse>;\n getSignedUrl(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumber: number,\n ): Promise<string>;\n batchGetSignedUrls(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumbers: number[],\n ): Promise<Record<number, string>>;\n complete(data: CompleteUploadRequest): Promise<AssetWithRelations>;\n abort(data: AbortUploadRequest): Promise<void>;\n deleteRecords(data: AbortUploadRequest): Promise<void>;\n getSession(filename: string): Promise<UploadSession | null>;\n listParts(objectName: string, uploadId: string): Promise<UploadPart[]>;\n}\n\nexport function createUploadModule(http: AxiosInstance): UploadHandle {\n async function initiate(\n data: InitiateUploadRequest,\n ): Promise<InitiateUploadResponse> {\n const res = await http.post(\"/uploader/initiate\", data);\n debugLog(\"Upload\", \"initiate\", res.data.data);\n return res.data.data;\n }\n\n async function getSignedUrl(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumber: number,\n ): Promise<string> {\n const res = await http.post(\"/uploader/signed-url\", {\n orgId,\n projectId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumber,\n });\n debugLog(\"Upload\", `getSignedUrl part:${partNumber}`);\n return res.data.data.signedUrl;\n }\n\n async function batchGetSignedUrls(\n orgId: string,\n projectId: 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 http.post(\"/uploader/batch-signed-urls\", {\n orgId,\n projectId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumbers,\n });\n debugLog(\"Upload\", `batchGetSignedUrls parts:${partNumbers.length}`);\n return res.data.data.signedUrls;\n }\n\n async function complete(\n data: CompleteUploadRequest,\n ): Promise<AssetWithRelations> {\n const res = await http.post(\"/uploader/complete\", data);\n debugLog(\"Upload\", \"complete\", res.data.data);\n return res.data.data;\n }\n\n async function abort(data: AbortUploadRequest): Promise<void> {\n await http.post(\"/uploader/abort\", data);\n debugLog(\"Upload\", \"abort\");\n }\n\n async function deleteRecords(data: AbortUploadRequest): Promise<void> {\n await http.post(\"/uploader/delete-records\", data);\n debugLog(\"Upload\", \"deleteRecords\");\n }\n\n async function getSession(filename: string): Promise<UploadSession | null> {\n try {\n const res = await http.get(\"/uploader/session\", {\n params: { filename },\n });\n debugLog(\"Upload\", `getSession:${filename}`, res.data.data);\n return res.data.data;\n } catch {\n return null;\n }\n }\n\n async function listParts(\n objectName: string,\n uploadId: string,\n ): Promise<UploadPart[]> {\n try {\n const res = await http.post(\"/uploader/list-parts\", {\n objectName,\n uploadId,\n });\n debugLog(\"Upload\", `listParts:${uploadId}`, res.data.data);\n return res.data.data.parts ?? [];\n } catch {\n return [];\n }\n }\n\n return {\n initiate,\n getSignedUrl,\n batchGetSignedUrls,\n complete,\n abort,\n deleteRecords,\n getSession,\n listParts,\n };\n}\n","/**\n * Sanitization module — deep project deletion operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { DeleteProjectReport } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface SanitizationHandle {\n deleteProjectAndFootprint(assetId: string): Promise<DeleteProjectReport>;\n}\n\nexport function createSanitizationModule(\n http: AxiosInstance,\n): SanitizationHandle {\n async function deleteProjectAndFootprint(\n assetId: string,\n ): Promise<DeleteProjectReport> {\n const res = await http.delete(`/deepSanitization/${assetId}`);\n debugLog(\n \"Sanitization\",\n `deleteProjectAndFootprint:${assetId}`,\n res.data.data,\n );\n return res.data.data;\n }\n\n return {\n deleteProjectAndFootprint,\n };\n}\n","import { createHttpClient } from \"./core/http\";\nimport { createHealthModule, HealthHandle } from \"./modules/health\";\nimport { createAssetsModule, AssetsHandle } from \"./modules/assets\";\nimport { createVersionsModule, VersionsHandle } from \"./modules/versions\";\nimport { createUsersModule, UsersHandle } from \"./modules/users\";\nimport { createUploadModule, UploadHandle } from \"./modules/upload\";\nimport {\n createSanitizationModule,\n SanitizationHandle,\n} from \"./modules/sanitization\";\nimport { AssetManagerSDKConfig } from \"./types\";\nimport { debugLog } from \"./utils\";\n\n// ─── Public handle interface ──────────────────────────────────────────────────\n\nexport interface AssetManagerSDKHandle {\n sdkKey: string;\n readonly serviceType: \"asset-manager\";\n health: HealthHandle;\n assets: AssetsHandle;\n versions: VersionsHandle;\n users: UsersHandle;\n upload: UploadHandle;\n sanitization: SanitizationHandle;\n}\n\n// ─── Factory function ─────────────────────────────────────────────────────────\n\nexport function createAssetManagerSDK(\n config: AssetManagerSDKConfig,\n): AssetManagerSDKHandle {\n const http = createHttpClient(config);\n\n debugLog(\"SDK\", \"Initialized\", {\n timeout: config.timeout ?? 30_000,\n });\n\n return {\n sdkKey: config.apiKey,\n serviceType: \"asset-manager\" as const,\n health: createHealthModule(http),\n assets: createAssetsModule(http),\n versions: createVersionsModule(http),\n users: createUsersModule(http),\n upload: createUploadModule(http),\n sanitization: createSanitizationModule(http),\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst AssetManagerSDK = {\n /**\n * Create a new SDK client instance.\n * @param config SDK configuration — apiKey is required, timeout is optional.\n */\n create(config: AssetManagerSDKConfig): AssetManagerSDKHandle {\n return createAssetManagerSDK(config);\n },\n} as const;\n\nexport default AssetManagerSDK;\n\n// ─── Type exports — consumers can import types directly from the SDK ──────────\n\nexport type { AssetManagerSDKConfig } from \"./types\";\nexport type { AssetWithRelations, UpdateAssetInput } from \"./types\";\nexport type {\n UnrealProjectVersion,\n UpdateUnrealProjectVersionInput,\n} from \"./types\";\nexport type { User, CreateUserInput, UpdateUserInput } from \"./types\";\nexport type {\n InitiateUploadRequest,\n InitiateUploadResponse,\n CompleteUploadRequest,\n AbortUploadRequest,\n UploadSession,\n UploadPart,\n} from \"./types\";\nexport type { DeleteProjectReport, DeletionStepResult } from \"./types\";\nexport type { HealthResponse, RedisHealthResponse } from \"./types\";\nexport type {\n AssetType,\n UploadStatus,\n ValidationStatus,\n BuildStatus,\n} from \"./types\";\nexport { isAlliumError } from \"./errors\";\nexport type { AlliumError } from \"./errors\";\n"]}
package/dist/index.mjs CHANGED
@@ -45,7 +45,7 @@ var debugLog = (category, message, data) => {
45
45
  };
46
46
 
47
47
  // src/core/http.ts
48
- var PROD_BASE_URL = "https://api-gateway-dev.tenant-newgame.ord1.ingress.coreweave.cloud/assets/api/v1";
48
+ var PROD_BASE_URL = "https://api-gw-dev.2x22.com/assets/api/v1";
49
49
  function createHttpClient(config) {
50
50
  const BASE_URL = config._devBaseUrl ?? PROD_BASE_URL;
51
51
  if (!BASE_URL) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/utils/debug.ts","../src/core/http.ts","../src/modules/health.ts","../src/modules/assets.ts","../src/modules/versions.ts","../src/modules/users.ts","../src/modules/upload.ts","../src/modules/sanitization.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * SDK Error factories.\n */\n\nexport interface AlliumError extends Error {\n readonly code: string;\n}\n\nfunction makeError(\n name: string,\n code: string,\n message: string,\n cause?: unknown,\n): AlliumError {\n const err = new Error(message) as AlliumError;\n err.name = name;\n (err as any).code = code;\n if (cause !== undefined) (err as any).cause = cause;\n return err;\n}\n\n/** Generic SDK error — use when no specific category fits */\nexport function createSDKError(\n message: string,\n code = \"SDK_ERROR\",\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumSDKError\", code, message, cause);\n}\n\n/** Thrown when the API key is missing, invalid, or rejected by the server */\nexport function createAuthError(message: string, cause?: unknown): AlliumError {\n return makeError(\"AlliumAuthError\", \"AUTH_ERROR\", message, cause);\n}\n\n/** Thrown when the HTTP request itself fails (network, timeout, 5xx) */\nexport function createRequestError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumRequestError\", \"REQUEST_ERROR\", message, cause);\n}\n\n/** Thrown when the server returns a 4xx for bad input data */\nexport function createValidationError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumValidationError\", \"VALIDATION_ERROR\", message, cause);\n}\n\n/** Thrown for upload-specific failures (initiate, complete, abort) */\nexport function createUploadError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumUploadError\", \"UPLOAD_ERROR\", message, cause);\n}\n\n/** Thrown when SDK_BASE_URL or apiKey is not configured correctly */\nexport function createConfigError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumConfigError\", \"INVALID_CONFIG\", message, cause);\n}\n\n/** Type guard — works for all Allium error factories */\nexport function isAlliumError(err: unknown): err is AlliumError {\n return err instanceof Error && \"code\" in err;\n}\n","/**\n * Centralised debug logging utility.\n */\n\ndeclare global {\n interface Window {\n ALLIUM_DEBUG?: boolean;\n }\n}\n\nexport const isDebugEnabled = (): boolean => {\n // Node.js environment\n if (typeof process !== \"undefined\" && process.env?.ALLIUM_DEBUG === \"true\") {\n return true;\n }\n // Browser environment\n if (typeof window !== \"undefined\" && window.ALLIUM_DEBUG === true) {\n return true;\n }\n return false;\n};\n\nexport const debugLog = (\n category: string,\n message: string,\n data?: unknown,\n): void => {\n if (!isDebugEnabled()) return;\n const timestamp = new Date().toISOString().slice(11, 23);\n if (data !== undefined) {\n } else {\n }\n};\n","/**\n * HTTP client factory.\n *\n * Creates and configures the axios instance used by all modules.\n * Handles:\n * - Base URL (baked in at build time)\n * - API key injection on every request via header\n * - Timeout\n * - Response unwrapping (your backend wraps all responses in { data: ... })\n * - Error normalization into AlliumError types\n */\n\nimport axios, { AxiosInstance, AxiosError } from \"axios\";\nimport { AssetManagerSDKConfig } from \"../types\";\nimport {\n createAuthError,\n createConfigError,\n createRequestError,\n createValidationError,\n createUploadError,\n} from \"../errors\";\nimport { debugLog } from \"../utils\";\n\n// ─── Build-time URL ───────────────────────────────────────────────────────────\n\ndeclare const process: { env: { ASSET_MANAGER_BASE_URL: string } };\nconst PROD_BASE_URL: string = process.env.ASSET_MANAGER_BASE_URL;\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createHttpClient(config: AssetManagerSDKConfig): AxiosInstance {\n const BASE_URL = config._devBaseUrl ?? PROD_BASE_URL;\n if (!BASE_URL) {\n throw createConfigError(\n \"[SDK] Base URL not configured. This SDK build is missing ASSET_MANAGER_BASE_URL.\",\n );\n }\n\n if (\n !config.apiKey ||\n typeof config.apiKey !== \"string\" ||\n !config.apiKey.trim()\n ) {\n throw createConfigError(\"[SDK] A valid apiKey is required.\");\n }\n\n if (typeof config.accessTokenProvider !== \"function\")\n throw createConfigError(\"[SDK] accessTokenProvider must be a function.\");\n\n const client = axios.create({\n baseURL: BASE_URL,\n timeout: config.timeout ?? 30_000,\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": config.apiKey.trim(),\n ...(config.jwksUri?.trim() && { \"x-jwks-uri\": config.jwksUri.trim() }),\n },\n });\n\n // ── Request interceptor — debug logging ───────────────────────────────────\n client.interceptors.request.use(async (req) => {\n const token = await config.accessTokenProvider();\n if (token) {\n req.headers[\"Authorization\"] = `Bearer ${token}`;\n }\n debugLog(\n \"HTTP\",\n `→ ${req.method?.toUpperCase()} ${req.url}`,\n req.params ?? req.data,\n );\n return req;\n });\n\n // ── Response interceptor — unwrap + normalize errors ──────────────────────\n client.interceptors.response.use(\n (res) => {\n debugLog(\"HTTP\", `← ${res.status} ${res.config.url}`);\n return res;\n },\n (err: AxiosError) => {\n const status = err.response?.status;\n const message =\n (err.response?.data as any)?.message ?? err.message ?? \"Unknown error\";\n const url = err.config?.url ?? \"\";\n\n debugLog(\"HTTP\", `← ERROR ${status ?? \"network\"} ${url}`, message);\n\n if (!status) {\n // Network error — no response received at all\n throw createRequestError(\n `[SDK] Network error reaching ${url}: ${message}`,\n err,\n );\n }\n\n if (status === 401 || status === 403) {\n throw createAuthError(\n `[SDK] Authentication failed (${status}): ${message}`,\n err,\n );\n }\n\n if (status === 422 || status === 400) {\n throw createValidationError(\n `[SDK] Validation error (${status}): ${message}`,\n err,\n );\n }\n\n if (url.includes(\"/uploader\")) {\n throw createUploadError(\n `[SDK] Upload operation failed (${status}): ${message}`,\n err,\n );\n }\n\n throw createRequestError(\n `[SDK] Request failed (${status}): ${message}`,\n err,\n );\n },\n );\n\n return client;\n}\n","/**\n * Health module — server and Redis health checks.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { HealthResponse, RedisHealthResponse } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface HealthHandle {\n getHealth(): Promise<HealthResponse>;\n getRedisHealth(): Promise<RedisHealthResponse>;\n testRedis(): Promise<void>;\n}\n\nexport function createHealthModule(http: AxiosInstance): HealthHandle {\n async function getHealth(): Promise<HealthResponse> {\n const res = await http.get(\"/health\");\n debugLog(\"Health\", \"getHealth\", res.data.data);\n return res.data.data;\n }\n\n async function getRedisHealth(): Promise<RedisHealthResponse> {\n const res = await http.get(\"/health/redis\");\n debugLog(\"Health\", \"getRedisHealth\", res.data.data);\n return res.data.data;\n }\n\n async function testRedis(): Promise<void> {\n await http.post(\"/health/redis/test\");\n debugLog(\"Health\", \"testRedis — OK\");\n }\n\n return {\n getHealth,\n getRedisHealth,\n testRedis,\n };\n}\n","/**\n * Assets module — CRUD operations for assets.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n AssetWithRelations,\n CreateAssetInput,\n UpdateAssetInput,\n UpdateAssetStatusInput,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface AssetsHandle {\n create(data: CreateAssetInput): Promise<AssetWithRelations>;\n getAll(): Promise<AssetWithRelations[]>;\n getById(assetId: string): Promise<AssetWithRelations>;\n getByOrg(orgId: string): Promise<AssetWithRelations[]>;\n getByProject(projectId: string): Promise<AssetWithRelations[]>;\n update(assetId: string, data: UpdateAssetInput): Promise<AssetWithRelations>;\n updateStatus(\n assetId: string,\n data: UpdateAssetStatusInput,\n ): Promise<AssetWithRelations>;\n markAsUploaded(assetId: string): Promise<AssetWithRelations>;\n markAsValidated(assetId: string): Promise<AssetWithRelations>;\n markAsFailed(\n assetId: string,\n stage: \"upload\" | \"validation\" | \"build\",\n ): Promise<AssetWithRelations>;\n uploadThumb(\n assetId: string,\n userId: string,\n file: File | Blob,\n ): Promise<AssetWithRelations>;\n delete(assetId: string): Promise<void>;\n}\n\nexport function createAssetsModule(http: AxiosInstance): AssetsHandle {\n async function create(data: CreateAssetInput): Promise<AssetWithRelations> {\n const res = await http.post(\"/assets\", data);\n debugLog(\"Assets\", \"create\", res.data.data);\n return res.data.data;\n }\n async function getAll(): Promise<AssetWithRelations[]> {\n const res = await http.get(\"/assets\");\n debugLog(\"Assets\", \"getAll\", res.data.data);\n return res.data.data;\n }\n\n async function getById(assetId: string): Promise<AssetWithRelations> {\n const res = await http.get(`/assets/${assetId}`);\n debugLog(\"Assets\", `getById:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByOrg(orgId: string): Promise<AssetWithRelations[]> {\n const res = await http.get(`/assets/organization/${orgId}`);\n debugLog(\"Assets\", `getByOrg:${orgId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByProject(\n projectId: string,\n ): Promise<AssetWithRelations[]> {\n const res = await http.get(`/assets/projects/${projectId}`);\n debugLog(\"Assets\", `getByProject:${projectId}`, res.data.data);\n return res.data.data;\n }\n\n async function update(\n assetId: string,\n data: UpdateAssetInput,\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}`, data);\n debugLog(\"Assets\", `update:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function updateStatus(\n assetId: string,\n data: UpdateAssetStatusInput,\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/status`, data);\n debugLog(\"Assets\", `updateStatus:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function markAsUploaded(assetId: string): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-uploaded`);\n debugLog(\"Assets\", `markAsUploaded:${assetId}`);\n return res.data.data;\n }\n\n async function markAsValidated(assetId: string): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-validated`);\n debugLog(\"Assets\", `markAsValidated:${assetId}`);\n return res.data.data;\n }\n\n async function markAsFailed(\n assetId: string,\n stage: \"upload\" | \"validation\" | \"build\",\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-failed`, { stage });\n debugLog(\"Assets\", `markAsFailed:${assetId}`, { stage });\n return res.data.data;\n }\n\n async function uploadThumb(\n assetId: string,\n userId: string,\n file: File | Blob,\n ): Promise<AssetWithRelations> {\n const formData = new FormData();\n formData.append(\"thumb\", file);\n formData.append(\"userId\", userId);\n const res = await http.post(`/assets/${assetId}/thumb`, formData, {\n headers: { \"Content-Type\": \"multipart/form-data\" },\n });\n debugLog(\"Assets\", `uploadThumb:${assetId}`);\n return res.data.data;\n }\n async function deleteAsset(assetId: string): Promise<void> {\n await http.delete(`/assets/${assetId}`);\n debugLog(\"Assets\", `delete:${assetId}`);\n }\n\n return {\n create,\n getAll,\n getById,\n getByOrg,\n getByProject,\n update,\n updateStatus,\n markAsUploaded,\n markAsValidated,\n markAsFailed,\n uploadThumb,\n delete: deleteAsset,\n };\n}\n","/**\n * Versions module — Unreal project version operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n CreateUnrealProjectVersionInput,\n UnrealProjectVersion,\n UpdateUnrealProjectVersionInput,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface VersionsHandle {\n create(data: CreateUnrealProjectVersionInput): Promise<UnrealProjectVersion>;\n getById(versionId: string): Promise<UnrealProjectVersion>;\n getByAsset(assetId: string): Promise<UnrealProjectVersion[]>;\n update(\n versionId: string,\n data: UpdateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion>;\n delete(versionId: string): Promise<void>;\n deleteByAsset(assetId: string): Promise<void>;\n}\n\nexport function createVersionsModule(http: AxiosInstance): VersionsHandle {\n async function create(\n data: CreateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion> {\n const res = await http.post(\"/unrealProjectVersion\", data);\n debugLog(\"Versions\", \"create\", res.data.data);\n return res.data.data;\n }\n async function getById(versionId: string): Promise<UnrealProjectVersion> {\n const res = await http.get(`/unrealProjectVersion/${versionId}`);\n debugLog(\"Versions\", `getById:${versionId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByAsset(assetId: string): Promise<UnrealProjectVersion[]> {\n const res = await http.get(`/unrealProjectVersion/asset/${assetId}`);\n debugLog(\"Versions\", `getByAsset:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function update(\n versionId: string,\n data: UpdateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion> {\n const res = await http.patch(`/unrealProjectVersion/${versionId}`, data);\n debugLog(\"Versions\", `update:${versionId}`, res.data.data);\n return res.data.data;\n }\n\n async function deleteVersion(versionId: string): Promise<void> {\n await http.delete(`/unrealProjectVersion/${versionId}`);\n debugLog(\"Versions\", `delete:${versionId}`);\n }\n\n async function deleteByAsset(assetId: string): Promise<void> {\n await http.delete(`/unrealProjectVersion/asset/${assetId}`);\n debugLog(\"Versions\", `deleteByAsset:${assetId}`);\n }\n\n return {\n create,\n getById,\n getByAsset,\n update,\n delete: deleteVersion,\n deleteByAsset,\n };\n}\n","/**\n * Users module — user management operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { User, CreateUserInput, UpdateUserInput } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface UsersHandle {\n getAll(): Promise<User[]>;\n getById(userId: string): Promise<User>;\n create(data: CreateUserInput): Promise<User>;\n update(userId: string, data: UpdateUserInput): Promise<User>;\n delete(userId: string): Promise<void>;\n}\n\nexport function createUsersModule(http: AxiosInstance): UsersHandle {\n async function getAll(): Promise<User[]> {\n const res = await http.get(\"/users\");\n debugLog(\"Users\", \"getAll\", res.data.data);\n return res.data.data;\n }\n\n async function getById(userId: string): Promise<User> {\n const res = await http.get(`/users/${userId}`);\n debugLog(\"Users\", `getById:${userId}`, res.data.data);\n return res.data.data;\n }\n\n async function create(data: CreateUserInput): Promise<User> {\n const res = await http.post(\"/users\", data);\n debugLog(\"Users\", \"create\", res.data.data);\n return res.data.data;\n }\n\n async function update(userId: string, data: UpdateUserInput): Promise<User> {\n const res = await http.put(`/users/${userId}`, data);\n debugLog(\"Users\", `update:${userId}`, res.data.data);\n return res.data.data;\n }\n\n async function deleteUser(userId: string): Promise<void> {\n await http.delete(`/users/${userId}`);\n debugLog(\"Users\", `delete:${userId}`);\n }\n\n return {\n getAll,\n getById,\n create,\n update,\n delete: deleteUser,\n };\n}\n","/**\n * Upload module — multipart upload lifecycle management.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n InitiateUploadRequest,\n InitiateUploadResponse,\n CompleteUploadRequest,\n AbortUploadRequest,\n UploadSession,\n UploadPart,\n AssetWithRelations,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface UploadHandle {\n initiate(data: InitiateUploadRequest): Promise<InitiateUploadResponse>;\n getSignedUrl(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumber: number,\n ): Promise<string>;\n batchGetSignedUrls(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumbers: number[],\n ): Promise<Record<number, string>>;\n complete(data: CompleteUploadRequest): Promise<AssetWithRelations>;\n abort(data: AbortUploadRequest): Promise<void>;\n deleteRecords(data: AbortUploadRequest): Promise<void>;\n getSession(filename: string): Promise<UploadSession | null>;\n listParts(objectName: string, uploadId: string): Promise<UploadPart[]>;\n}\n\nexport function createUploadModule(http: AxiosInstance): UploadHandle {\n async function initiate(\n data: InitiateUploadRequest,\n ): Promise<InitiateUploadResponse> {\n const res = await http.post(\"/uploader/initiate\", data);\n debugLog(\"Upload\", \"initiate\", res.data.data);\n return res.data.data;\n }\n\n async function getSignedUrl(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumber: number,\n ): Promise<string> {\n const res = await http.post(\"/uploader/signed-url\", {\n orgId,\n projectId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumber,\n });\n debugLog(\"Upload\", `getSignedUrl part:${partNumber}`);\n return res.data.data.signedUrl;\n }\n\n async function batchGetSignedUrls(\n orgId: string,\n projectId: 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 http.post(\"/uploader/batch-signed-urls\", {\n orgId,\n projectId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumbers,\n });\n debugLog(\"Upload\", `batchGetSignedUrls parts:${partNumbers.length}`);\n return res.data.data.signedUrls;\n }\n\n async function complete(\n data: CompleteUploadRequest,\n ): Promise<AssetWithRelations> {\n const res = await http.post(\"/uploader/complete\", data);\n debugLog(\"Upload\", \"complete\", res.data.data);\n return res.data.data;\n }\n\n async function abort(data: AbortUploadRequest): Promise<void> {\n await http.post(\"/uploader/abort\", data);\n debugLog(\"Upload\", \"abort\");\n }\n\n async function deleteRecords(data: AbortUploadRequest): Promise<void> {\n await http.post(\"/uploader/delete-records\", data);\n debugLog(\"Upload\", \"deleteRecords\");\n }\n\n async function getSession(filename: string): Promise<UploadSession | null> {\n try {\n const res = await http.get(\"/uploader/session\", {\n params: { filename },\n });\n debugLog(\"Upload\", `getSession:${filename}`, res.data.data);\n return res.data.data;\n } catch {\n return null;\n }\n }\n\n async function listParts(\n objectName: string,\n uploadId: string,\n ): Promise<UploadPart[]> {\n try {\n const res = await http.post(\"/uploader/list-parts\", {\n objectName,\n uploadId,\n });\n debugLog(\"Upload\", `listParts:${uploadId}`, res.data.data);\n return res.data.data.parts ?? [];\n } catch {\n return [];\n }\n }\n\n return {\n initiate,\n getSignedUrl,\n batchGetSignedUrls,\n complete,\n abort,\n deleteRecords,\n getSession,\n listParts,\n };\n}\n","/**\n * Sanitization module — deep project deletion operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { DeleteProjectReport } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface SanitizationHandle {\n deleteProjectAndFootprint(assetId: string): Promise<DeleteProjectReport>;\n}\n\nexport function createSanitizationModule(\n http: AxiosInstance,\n): SanitizationHandle {\n async function deleteProjectAndFootprint(\n assetId: string,\n ): Promise<DeleteProjectReport> {\n const res = await http.delete(`/deepSanitization/${assetId}`);\n debugLog(\n \"Sanitization\",\n `deleteProjectAndFootprint:${assetId}`,\n res.data.data,\n );\n return res.data.data;\n }\n\n return {\n deleteProjectAndFootprint,\n };\n}\n","import { createHttpClient } from \"./core/http\";\nimport { createHealthModule, HealthHandle } from \"./modules/health\";\nimport { createAssetsModule, AssetsHandle } from \"./modules/assets\";\nimport { createVersionsModule, VersionsHandle } from \"./modules/versions\";\nimport { createUsersModule, UsersHandle } from \"./modules/users\";\nimport { createUploadModule, UploadHandle } from \"./modules/upload\";\nimport {\n createSanitizationModule,\n SanitizationHandle,\n} from \"./modules/sanitization\";\nimport { AssetManagerSDKConfig } from \"./types\";\nimport { debugLog } from \"./utils\";\n\n// ─── Public handle interface ──────────────────────────────────────────────────\n\nexport interface AssetManagerSDKHandle {\n sdkKey: string;\n readonly serviceType: \"asset-manager\";\n health: HealthHandle;\n assets: AssetsHandle;\n versions: VersionsHandle;\n users: UsersHandle;\n upload: UploadHandle;\n sanitization: SanitizationHandle;\n}\n\n// ─── Factory function ─────────────────────────────────────────────────────────\n\nexport function createAssetManagerSDK(\n config: AssetManagerSDKConfig,\n): AssetManagerSDKHandle {\n const http = createHttpClient(config);\n\n debugLog(\"SDK\", \"Initialized\", {\n timeout: config.timeout ?? 30_000,\n });\n\n return {\n sdkKey: config.apiKey,\n serviceType: \"asset-manager\" as const,\n health: createHealthModule(http),\n assets: createAssetsModule(http),\n versions: createVersionsModule(http),\n users: createUsersModule(http),\n upload: createUploadModule(http),\n sanitization: createSanitizationModule(http),\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst AssetManagerSDK = {\n /**\n * Create a new SDK client instance.\n * @param config SDK configuration — apiKey is required, timeout is optional.\n */\n create(config: AssetManagerSDKConfig): AssetManagerSDKHandle {\n return createAssetManagerSDK(config);\n },\n} as const;\n\nexport default AssetManagerSDK;\n\n// ─── Type exports — consumers can import types directly from the SDK ──────────\n\nexport type { AssetManagerSDKConfig } from \"./types\";\nexport type { AssetWithRelations, UpdateAssetInput } from \"./types\";\nexport type {\n UnrealProjectVersion,\n UpdateUnrealProjectVersionInput,\n} from \"./types\";\nexport type { User, CreateUserInput, UpdateUserInput } from \"./types\";\nexport type {\n InitiateUploadRequest,\n InitiateUploadResponse,\n CompleteUploadRequest,\n AbortUploadRequest,\n UploadSession,\n UploadPart,\n} from \"./types\";\nexport type { DeleteProjectReport, DeletionStepResult } from \"./types\";\nexport type { HealthResponse, RedisHealthResponse } from \"./types\";\nexport type {\n AssetType,\n UploadStatus,\n ValidationStatus,\n BuildStatus,\n} from \"./types\";\nexport { isAlliumError } from \"./errors\";\nexport type { AlliumError } from \"./errors\";\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/utils/debug.ts","../src/core/http.ts","../src/modules/health.ts","../src/modules/assets.ts","../src/modules/versions.ts","../src/modules/users.ts","../src/modules/upload.ts","../src/modules/sanitization.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * SDK Error factories.\n */\n\nexport interface AlliumError extends Error {\n readonly code: string;\n}\n\nfunction makeError(\n name: string,\n code: string,\n message: string,\n cause?: unknown,\n): AlliumError {\n const err = new Error(message) as AlliumError;\n err.name = name;\n (err as any).code = code;\n if (cause !== undefined) (err as any).cause = cause;\n return err;\n}\n\n/** Generic SDK error — use when no specific category fits */\nexport function createSDKError(\n message: string,\n code = \"SDK_ERROR\",\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumSDKError\", code, message, cause);\n}\n\n/** Thrown when the API key is missing, invalid, or rejected by the server */\nexport function createAuthError(message: string, cause?: unknown): AlliumError {\n return makeError(\"AlliumAuthError\", \"AUTH_ERROR\", message, cause);\n}\n\n/** Thrown when the HTTP request itself fails (network, timeout, 5xx) */\nexport function createRequestError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumRequestError\", \"REQUEST_ERROR\", message, cause);\n}\n\n/** Thrown when the server returns a 4xx for bad input data */\nexport function createValidationError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumValidationError\", \"VALIDATION_ERROR\", message, cause);\n}\n\n/** Thrown for upload-specific failures (initiate, complete, abort) */\nexport function createUploadError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumUploadError\", \"UPLOAD_ERROR\", message, cause);\n}\n\n/** Thrown when SDK_BASE_URL or apiKey is not configured correctly */\nexport function createConfigError(\n message: string,\n cause?: unknown,\n): AlliumError {\n return makeError(\"AlliumConfigError\", \"INVALID_CONFIG\", message, cause);\n}\n\n/** Type guard — works for all Allium error factories */\nexport function isAlliumError(err: unknown): err is AlliumError {\n return err instanceof Error && \"code\" in err;\n}\n","/**\n * Centralised debug logging utility.\n */\n\ndeclare global {\n interface Window {\n ALLIUM_DEBUG?: boolean;\n }\n}\n\nexport const isDebugEnabled = (): boolean => {\n // Node.js environment\n if (typeof process !== \"undefined\" && process.env?.ALLIUM_DEBUG === \"true\") {\n return true;\n }\n // Browser environment\n if (typeof window !== \"undefined\" && window.ALLIUM_DEBUG === true) {\n return true;\n }\n return false;\n};\n\nexport const debugLog = (\n category: string,\n message: string,\n data?: unknown,\n): void => {\n if (!isDebugEnabled()) return;\n const timestamp = new Date().toISOString().slice(11, 23);\n if (data !== undefined) {\n } else {\n }\n};\n","/**\n * HTTP client factory.\n *\n * Creates and configures the axios instance used by all modules.\n * Handles:\n * - Base URL (baked in at build time)\n * - API key injection on every request via header\n * - Timeout\n * - Response unwrapping (your backend wraps all responses in { data: ... })\n * - Error normalization into AlliumError types\n */\n\nimport axios, { AxiosInstance, AxiosError } from \"axios\";\nimport { AssetManagerSDKConfig } from \"../types\";\nimport {\n createAuthError,\n createConfigError,\n createRequestError,\n createValidationError,\n createUploadError,\n} from \"../errors\";\nimport { debugLog } from \"../utils\";\n\n// ─── Build-time URL ───────────────────────────────────────────────────────────\n\ndeclare const process: { env: { ASSET_MANAGER_BASE_URL: string } };\nconst PROD_BASE_URL: string = process.env.ASSET_MANAGER_BASE_URL;\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createHttpClient(config: AssetManagerSDKConfig): AxiosInstance {\n const BASE_URL = config._devBaseUrl ?? PROD_BASE_URL;\n if (!BASE_URL) {\n throw createConfigError(\n \"[SDK] Base URL not configured. This SDK build is missing ASSET_MANAGER_BASE_URL.\",\n );\n }\n\n if (\n !config.apiKey ||\n typeof config.apiKey !== \"string\" ||\n !config.apiKey.trim()\n ) {\n throw createConfigError(\"[SDK] A valid apiKey is required.\");\n }\n\n if (typeof config.accessTokenProvider !== \"function\")\n throw createConfigError(\"[SDK] accessTokenProvider must be a function.\");\n\n const client = axios.create({\n baseURL: BASE_URL,\n timeout: config.timeout ?? 30_000,\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-sdk-key\": config.apiKey.trim(),\n ...(config.jwksUri?.trim() && { \"x-jwks-uri\": config.jwksUri.trim() }),\n },\n });\n\n // ── Request interceptor — debug logging ───────────────────────────────────\n client.interceptors.request.use(async (req) => {\n const token = await config.accessTokenProvider();\n if (token) {\n req.headers[\"Authorization\"] = `Bearer ${token}`;\n }\n debugLog(\n \"HTTP\",\n `→ ${req.method?.toUpperCase()} ${req.url}`,\n req.params ?? req.data,\n );\n return req;\n });\n\n // ── Response interceptor — unwrap + normalize errors ──────────────────────\n client.interceptors.response.use(\n (res) => {\n debugLog(\"HTTP\", `← ${res.status} ${res.config.url}`);\n return res;\n },\n (err: AxiosError) => {\n const status = err.response?.status;\n const message =\n (err.response?.data as any)?.message ?? err.message ?? \"Unknown error\";\n const url = err.config?.url ?? \"\";\n\n debugLog(\"HTTP\", `← ERROR ${status ?? \"network\"} ${url}`, message);\n\n if (!status) {\n // Network error — no response received at all\n throw createRequestError(\n `[SDK] Network error reaching ${url}: ${message}`,\n err,\n );\n }\n\n if (status === 401 || status === 403) {\n throw createAuthError(\n `[SDK] Authentication failed (${status}): ${message}`,\n err,\n );\n }\n\n if (status === 422 || status === 400) {\n throw createValidationError(\n `[SDK] Validation error (${status}): ${message}`,\n err,\n );\n }\n\n if (url.includes(\"/uploader\")) {\n throw createUploadError(\n `[SDK] Upload operation failed (${status}): ${message}`,\n err,\n );\n }\n\n throw createRequestError(\n `[SDK] Request failed (${status}): ${message}`,\n err,\n );\n },\n );\n\n return client;\n}\n","/**\n * Health module — server and Redis health checks.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { HealthResponse, RedisHealthResponse } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface HealthHandle {\n getHealth(): Promise<HealthResponse>;\n getRedisHealth(): Promise<RedisHealthResponse>;\n testRedis(): Promise<void>;\n}\n\nexport function createHealthModule(http: AxiosInstance): HealthHandle {\n async function getHealth(): Promise<HealthResponse> {\n const res = await http.get(\"/health\");\n debugLog(\"Health\", \"getHealth\", res.data.data);\n return res.data.data;\n }\n\n async function getRedisHealth(): Promise<RedisHealthResponse> {\n const res = await http.get(\"/health/redis\");\n debugLog(\"Health\", \"getRedisHealth\", res.data.data);\n return res.data.data;\n }\n\n async function testRedis(): Promise<void> {\n await http.post(\"/health/redis/test\");\n debugLog(\"Health\", \"testRedis — OK\");\n }\n\n return {\n getHealth,\n getRedisHealth,\n testRedis,\n };\n}\n","/**\n * Assets module — CRUD operations for assets.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n AssetWithRelations,\n CreateAssetInput,\n UpdateAssetInput,\n UpdateAssetStatusInput,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface AssetsHandle {\n create(data: CreateAssetInput): Promise<AssetWithRelations>;\n getAll(): Promise<AssetWithRelations[]>;\n getById(assetId: string): Promise<AssetWithRelations>;\n getByOrg(orgId: string): Promise<AssetWithRelations[]>;\n getByProject(projectId: string): Promise<AssetWithRelations[]>;\n update(assetId: string, data: UpdateAssetInput): Promise<AssetWithRelations>;\n updateStatus(\n assetId: string,\n data: UpdateAssetStatusInput,\n ): Promise<AssetWithRelations>;\n markAsUploaded(assetId: string): Promise<AssetWithRelations>;\n markAsValidated(assetId: string): Promise<AssetWithRelations>;\n markAsFailed(\n assetId: string,\n stage: \"upload\" | \"validation\" | \"build\",\n ): Promise<AssetWithRelations>;\n uploadThumb(\n assetId: string,\n userId: string,\n file: File | Blob,\n ): Promise<AssetWithRelations>;\n delete(assetId: string): Promise<void>;\n}\n\nexport function createAssetsModule(http: AxiosInstance): AssetsHandle {\n async function create(data: CreateAssetInput): Promise<AssetWithRelations> {\n const res = await http.post(\"/assets\", data);\n debugLog(\"Assets\", \"create\", res.data.data);\n return res.data.data;\n }\n async function getAll(): Promise<AssetWithRelations[]> {\n const res = await http.get(\"/assets\");\n debugLog(\"Assets\", \"getAll\", res.data.data);\n return res.data.data;\n }\n\n async function getById(assetId: string): Promise<AssetWithRelations> {\n const res = await http.get(`/assets/${assetId}`);\n debugLog(\"Assets\", `getById:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByOrg(orgId: string): Promise<AssetWithRelations[]> {\n const res = await http.get(`/assets/organization/${orgId}`);\n debugLog(\"Assets\", `getByOrg:${orgId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByProject(\n projectId: string,\n ): Promise<AssetWithRelations[]> {\n const res = await http.get(`/assets/projects/${projectId}`);\n debugLog(\"Assets\", `getByProject:${projectId}`, res.data.data);\n return res.data.data;\n }\n\n async function update(\n assetId: string,\n data: UpdateAssetInput,\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}`, data);\n debugLog(\"Assets\", `update:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function updateStatus(\n assetId: string,\n data: UpdateAssetStatusInput,\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/status`, data);\n debugLog(\"Assets\", `updateStatus:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function markAsUploaded(assetId: string): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-uploaded`);\n debugLog(\"Assets\", `markAsUploaded:${assetId}`);\n return res.data.data;\n }\n\n async function markAsValidated(assetId: string): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-validated`);\n debugLog(\"Assets\", `markAsValidated:${assetId}`);\n return res.data.data;\n }\n\n async function markAsFailed(\n assetId: string,\n stage: \"upload\" | \"validation\" | \"build\",\n ): Promise<AssetWithRelations> {\n const res = await http.patch(`/assets/${assetId}/mark-failed`, { stage });\n debugLog(\"Assets\", `markAsFailed:${assetId}`, { stage });\n return res.data.data;\n }\n\n async function uploadThumb(\n assetId: string,\n userId: string,\n file: File | Blob,\n ): Promise<AssetWithRelations> {\n const formData = new FormData();\n formData.append(\"thumb\", file);\n formData.append(\"userId\", userId);\n const res = await http.post(`/assets/${assetId}/thumb`, formData, {\n headers: { \"Content-Type\": \"multipart/form-data\" },\n });\n debugLog(\"Assets\", `uploadThumb:${assetId}`);\n return res.data.data;\n }\n async function deleteAsset(assetId: string): Promise<void> {\n await http.delete(`/assets/${assetId}`);\n debugLog(\"Assets\", `delete:${assetId}`);\n }\n\n return {\n create,\n getAll,\n getById,\n getByOrg,\n getByProject,\n update,\n updateStatus,\n markAsUploaded,\n markAsValidated,\n markAsFailed,\n uploadThumb,\n delete: deleteAsset,\n };\n}\n","/**\n * Versions module — Unreal project version operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n CreateUnrealProjectVersionInput,\n UnrealProjectVersion,\n UpdateUnrealProjectVersionInput,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface VersionsHandle {\n create(data: CreateUnrealProjectVersionInput): Promise<UnrealProjectVersion>;\n getById(versionId: string): Promise<UnrealProjectVersion>;\n getByAsset(assetId: string): Promise<UnrealProjectVersion[]>;\n update(\n versionId: string,\n data: UpdateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion>;\n delete(versionId: string): Promise<void>;\n deleteByAsset(assetId: string): Promise<void>;\n}\n\nexport function createVersionsModule(http: AxiosInstance): VersionsHandle {\n async function create(\n data: CreateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion> {\n const res = await http.post(\"/unrealProjectVersion\", data);\n debugLog(\"Versions\", \"create\", res.data.data);\n return res.data.data;\n }\n async function getById(versionId: string): Promise<UnrealProjectVersion> {\n const res = await http.get(`/unrealProjectVersion/${versionId}`);\n debugLog(\"Versions\", `getById:${versionId}`, res.data.data);\n return res.data.data;\n }\n\n async function getByAsset(assetId: string): Promise<UnrealProjectVersion[]> {\n const res = await http.get(`/unrealProjectVersion/asset/${assetId}`);\n debugLog(\"Versions\", `getByAsset:${assetId}`, res.data.data);\n return res.data.data;\n }\n\n async function update(\n versionId: string,\n data: UpdateUnrealProjectVersionInput,\n ): Promise<UnrealProjectVersion> {\n const res = await http.patch(`/unrealProjectVersion/${versionId}`, data);\n debugLog(\"Versions\", `update:${versionId}`, res.data.data);\n return res.data.data;\n }\n\n async function deleteVersion(versionId: string): Promise<void> {\n await http.delete(`/unrealProjectVersion/${versionId}`);\n debugLog(\"Versions\", `delete:${versionId}`);\n }\n\n async function deleteByAsset(assetId: string): Promise<void> {\n await http.delete(`/unrealProjectVersion/asset/${assetId}`);\n debugLog(\"Versions\", `deleteByAsset:${assetId}`);\n }\n\n return {\n create,\n getById,\n getByAsset,\n update,\n delete: deleteVersion,\n deleteByAsset,\n };\n}\n","/**\n * Users module — user management operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { User, CreateUserInput, UpdateUserInput } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface UsersHandle {\n getAll(): Promise<User[]>;\n getById(userId: string): Promise<User>;\n create(data: CreateUserInput): Promise<User>;\n update(userId: string, data: UpdateUserInput): Promise<User>;\n delete(userId: string): Promise<void>;\n}\n\nexport function createUsersModule(http: AxiosInstance): UsersHandle {\n async function getAll(): Promise<User[]> {\n const res = await http.get(\"/users\");\n debugLog(\"Users\", \"getAll\", res.data.data);\n return res.data.data;\n }\n\n async function getById(userId: string): Promise<User> {\n const res = await http.get(`/users/${userId}`);\n debugLog(\"Users\", `getById:${userId}`, res.data.data);\n return res.data.data;\n }\n\n async function create(data: CreateUserInput): Promise<User> {\n const res = await http.post(\"/users\", data);\n debugLog(\"Users\", \"create\", res.data.data);\n return res.data.data;\n }\n\n async function update(userId: string, data: UpdateUserInput): Promise<User> {\n const res = await http.put(`/users/${userId}`, data);\n debugLog(\"Users\", `update:${userId}`, res.data.data);\n return res.data.data;\n }\n\n async function deleteUser(userId: string): Promise<void> {\n await http.delete(`/users/${userId}`);\n debugLog(\"Users\", `delete:${userId}`);\n }\n\n return {\n getAll,\n getById,\n create,\n update,\n delete: deleteUser,\n };\n}\n","/**\n * Upload module — multipart upload lifecycle management.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport {\n InitiateUploadRequest,\n InitiateUploadResponse,\n CompleteUploadRequest,\n AbortUploadRequest,\n UploadSession,\n UploadPart,\n AssetWithRelations,\n} from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface UploadHandle {\n initiate(data: InitiateUploadRequest): Promise<InitiateUploadResponse>;\n getSignedUrl(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumber: number,\n ): Promise<string>;\n batchGetSignedUrls(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumbers: number[],\n ): Promise<Record<number, string>>;\n complete(data: CompleteUploadRequest): Promise<AssetWithRelations>;\n abort(data: AbortUploadRequest): Promise<void>;\n deleteRecords(data: AbortUploadRequest): Promise<void>;\n getSession(filename: string): Promise<UploadSession | null>;\n listParts(objectName: string, uploadId: string): Promise<UploadPart[]>;\n}\n\nexport function createUploadModule(http: AxiosInstance): UploadHandle {\n async function initiate(\n data: InitiateUploadRequest,\n ): Promise<InitiateUploadResponse> {\n const res = await http.post(\"/uploader/initiate\", data);\n debugLog(\"Upload\", \"initiate\", res.data.data);\n return res.data.data;\n }\n\n async function getSignedUrl(\n orgId: string,\n projectId: string,\n assetId: string,\n assetVersionId: string,\n uploadId: string,\n objectName: string,\n partNumber: number,\n ): Promise<string> {\n const res = await http.post(\"/uploader/signed-url\", {\n orgId,\n projectId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumber,\n });\n debugLog(\"Upload\", `getSignedUrl part:${partNumber}`);\n return res.data.data.signedUrl;\n }\n\n async function batchGetSignedUrls(\n orgId: string,\n projectId: 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 http.post(\"/uploader/batch-signed-urls\", {\n orgId,\n projectId,\n assetId,\n assetVersionId,\n uploadId,\n objectName,\n partNumbers,\n });\n debugLog(\"Upload\", `batchGetSignedUrls parts:${partNumbers.length}`);\n return res.data.data.signedUrls;\n }\n\n async function complete(\n data: CompleteUploadRequest,\n ): Promise<AssetWithRelations> {\n const res = await http.post(\"/uploader/complete\", data);\n debugLog(\"Upload\", \"complete\", res.data.data);\n return res.data.data;\n }\n\n async function abort(data: AbortUploadRequest): Promise<void> {\n await http.post(\"/uploader/abort\", data);\n debugLog(\"Upload\", \"abort\");\n }\n\n async function deleteRecords(data: AbortUploadRequest): Promise<void> {\n await http.post(\"/uploader/delete-records\", data);\n debugLog(\"Upload\", \"deleteRecords\");\n }\n\n async function getSession(filename: string): Promise<UploadSession | null> {\n try {\n const res = await http.get(\"/uploader/session\", {\n params: { filename },\n });\n debugLog(\"Upload\", `getSession:${filename}`, res.data.data);\n return res.data.data;\n } catch {\n return null;\n }\n }\n\n async function listParts(\n objectName: string,\n uploadId: string,\n ): Promise<UploadPart[]> {\n try {\n const res = await http.post(\"/uploader/list-parts\", {\n objectName,\n uploadId,\n });\n debugLog(\"Upload\", `listParts:${uploadId}`, res.data.data);\n return res.data.data.parts ?? [];\n } catch {\n return [];\n }\n }\n\n return {\n initiate,\n getSignedUrl,\n batchGetSignedUrls,\n complete,\n abort,\n deleteRecords,\n getSession,\n listParts,\n };\n}\n","/**\n * Sanitization module — deep project deletion operations.\n */\n\nimport { AxiosInstance } from \"axios\";\nimport { DeleteProjectReport } from \"../types\";\nimport { debugLog } from \"../utils\";\n\nexport interface SanitizationHandle {\n deleteProjectAndFootprint(assetId: string): Promise<DeleteProjectReport>;\n}\n\nexport function createSanitizationModule(\n http: AxiosInstance,\n): SanitizationHandle {\n async function deleteProjectAndFootprint(\n assetId: string,\n ): Promise<DeleteProjectReport> {\n const res = await http.delete(`/deepSanitization/${assetId}`);\n debugLog(\n \"Sanitization\",\n `deleteProjectAndFootprint:${assetId}`,\n res.data.data,\n );\n return res.data.data;\n }\n\n return {\n deleteProjectAndFootprint,\n };\n}\n","import { createHttpClient } from \"./core/http\";\nimport { createHealthModule, HealthHandle } from \"./modules/health\";\nimport { createAssetsModule, AssetsHandle } from \"./modules/assets\";\nimport { createVersionsModule, VersionsHandle } from \"./modules/versions\";\nimport { createUsersModule, UsersHandle } from \"./modules/users\";\nimport { createUploadModule, UploadHandle } from \"./modules/upload\";\nimport {\n createSanitizationModule,\n SanitizationHandle,\n} from \"./modules/sanitization\";\nimport { AssetManagerSDKConfig } from \"./types\";\nimport { debugLog } from \"./utils\";\n\n// ─── Public handle interface ──────────────────────────────────────────────────\n\nexport interface AssetManagerSDKHandle {\n sdkKey: string;\n readonly serviceType: \"asset-manager\";\n health: HealthHandle;\n assets: AssetsHandle;\n versions: VersionsHandle;\n users: UsersHandle;\n upload: UploadHandle;\n sanitization: SanitizationHandle;\n}\n\n// ─── Factory function ─────────────────────────────────────────────────────────\n\nexport function createAssetManagerSDK(\n config: AssetManagerSDKConfig,\n): AssetManagerSDKHandle {\n const http = createHttpClient(config);\n\n debugLog(\"SDK\", \"Initialized\", {\n timeout: config.timeout ?? 30_000,\n });\n\n return {\n sdkKey: config.apiKey,\n serviceType: \"asset-manager\" as const,\n health: createHealthModule(http),\n assets: createAssetsModule(http),\n versions: createVersionsModule(http),\n users: createUsersModule(http),\n upload: createUploadModule(http),\n sanitization: createSanitizationModule(http),\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst AssetManagerSDK = {\n /**\n * Create a new SDK client instance.\n * @param config SDK configuration — apiKey is required, timeout is optional.\n */\n create(config: AssetManagerSDKConfig): AssetManagerSDKHandle {\n return createAssetManagerSDK(config);\n },\n} as const;\n\nexport default AssetManagerSDK;\n\n// ─── Type exports — consumers can import types directly from the SDK ──────────\n\nexport type { AssetManagerSDKConfig } from \"./types\";\nexport type { AssetWithRelations, UpdateAssetInput } from \"./types\";\nexport type {\n UnrealProjectVersion,\n UpdateUnrealProjectVersionInput,\n} from \"./types\";\nexport type { User, CreateUserInput, UpdateUserInput } from \"./types\";\nexport type {\n InitiateUploadRequest,\n InitiateUploadResponse,\n CompleteUploadRequest,\n AbortUploadRequest,\n UploadSession,\n UploadPart,\n} from \"./types\";\nexport type { DeleteProjectReport, DeletionStepResult } from \"./types\";\nexport type { HealthResponse, RedisHealthResponse } from \"./types\";\nexport type {\n AssetType,\n UploadStatus,\n ValidationStatus,\n BuildStatus,\n} from \"./types\";\nexport { isAlliumError } from \"./errors\";\nexport type { AlliumError } from \"./errors\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alliumcloud/asset-manager",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Allium Asset Manager SDK - maintains 3D asset uploads (unreal or other 3D files). Manages extraction, build, validation, volume copy creation of unreal projects.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",