Skip to main content

API Reference

Complete API reference for @xrift/sdk.

XriftClient​

The entry point of the SDK. Provides access to the Worlds API and Items API.

import { XriftClient } from '@xrift/sdk';

const client = new XriftClient({
token: 'your-api-token',
baseUrl: 'https://api.xrift.net', // optional
timeout: 30000, // optional (ms)
});

Constructor​

ParameterTypeRequiredDefaultDescription
tokenstringYes-API authentication token
baseUrlstringNohttps://api.xrift.netAPI base URL
timeoutnumberNo30000Request timeout (ms)

Properties​

PropertyTypeDescription
worldsWorldsApiWorlds API
itemsItemsApiItems API

WorldsApi​

API for creating and uploading worlds. Access via client.worlds.

upload(files, options)​

Integrated upload method. Executes creation, hash calculation, URL retrieval, upload, and completion notification in one call.

const result = await client.worlds.upload(files, options);

Parameters:

NameTypeDescription
filesUploadFile[]Array of files to upload
optionsWorldUploadOptionsUpload options

WorldUploadOptions:

FieldTypeRequiredDescription
worldIdstringNoExisting world ID (creates new if omitted)
namestringYesWorld name
descriptionstringNoDescription
thumbnailPathstringNoThumbnail path
physicsPhysicsConfigNoPhysics settings
cameraCameraConfigNoCamera settings
permissionsWorldPermissionsNoPermission settings
outputBufferTypeOutputBufferTypeNoOutput buffer type
onProgress(progress: UploadProgress) => voidNoProgress callback

Returns: WorldUploadResult

FieldTypeDescription
worldIdstringWorld ID
versionIdstringVersion ID
versionNumbernumberVersion number
contentHashstringContent hash
filesUploadFile[]Uploaded files

ItemsApi​

API for creating and uploading items. Access via client.items.

upload(files, options)​

Integrated upload method for items.

const result = await client.items.upload(files, options);

ItemUploadOptions:

FieldTypeRequiredDescription
itemIdstringNoExisting item ID (creates new if omitted)
namestringYesItem name
descriptionstringNoDescription
thumbnailPathstringNoThumbnail path
permissionsItemPermissionsNoPermission settings
onProgress(progress: UploadProgress) => voidNoProgress callback

Returns: ItemUploadResult

FieldTypeDescription
itemIdstringItem ID
versionIdstringVersion ID
versionNumbernumberVersion number
contentHashstringContent hash
filesUploadFile[]Uploaded files

Error Classes​

The SDK provides the following error hierarchy.

XriftSdkError (base class)
├── XriftApiError (API errors)
│ └── XriftAuthError (authentication error: 401)
└── XriftNetworkError (network errors)

XriftApiError​

Thrown when the API returns an error response.

PropertyTypeDescription
messagestringError message
statusCodenumberHTTP status code
responseBodyunknownResponse body

XriftAuthError​

Thrown on authentication failure (HTTP 401). Extends XriftApiError.

XriftNetworkError​

Thrown on network connection errors.

PropertyTypeDescription
messagestringError message
causeErrorUnderlying error

Error Handling Example​

import {
XriftAuthError,
XriftApiError,
XriftNetworkError,
} from '@xrift/sdk';

try {
await client.worlds.upload(files, options);
} catch (error) {
if (error instanceof XriftAuthError) {
console.error('Auth error: please check your token');
} else if (error instanceof XriftApiError) {
console.error(`API error (${error.statusCode}): ${error.message}`);
} else if (error instanceof XriftNetworkError) {
console.error('Network error:', error.message);
}
}

Config Parsers​

Functions to parse xrift.json into configuration objects.

parseWorldConfig(json)​

Parses a JSON string and returns a world configuration. Throws XriftSdkError if the "world" key is missing.

import { parseWorldConfig } from '@xrift/sdk';

const json = await readFile('xrift.json', 'utf-8');
const config = parseWorldConfig(json);
// config.type === 'world'
// config.distDir, config.name, config.physics, ...

parseItemConfig(json)​

Parses a JSON string and returns an item configuration. Throws XriftSdkError if the "item" key is missing.

import { parseItemConfig } from '@xrift/sdk';

const json = await readFile('xrift.json', 'utf-8');
const config = parseItemConfig(json);
// config.type === 'item'
// config.distDir, config.name, config.permissions, ...

filterFiles(filePaths, ignorePatterns)​

Filters an array of file paths, excluding files that match any of the ignore patterns.

import { filterFiles, DEFAULT_IGNORE_PATTERNS } from '@xrift/sdk';

const filtered = filterFiles(
['scene.glb', '__federation_shared_abc.js', 'index.html'],
DEFAULT_IGNORE_PATTERNS,
);
// ['scene.glb', 'index.html']

Node.js Helpers​

Helper functions available from @xrift/sdk/node. They read xrift.json, collect files, and upload in one call.

uploadWorldFromDirectory(dirPath, options)​

Reads xrift.json from a directory and uploads a world.

import { uploadWorldFromDirectory } from '@xrift/sdk/node';

const result = await uploadWorldFromDirectory('./my-project', {
token: process.env.XRIFT_TOKEN!,
onProgress: (p) => console.log(`${p.completed}/${p.total}`),
});
ParameterTypeRequiredDescription
dirPathstringYesDirectory path containing xrift.json
options.tokenstringYesAPI token
options.baseUrlstringNoAPI base URL
options.timeoutnumberNoTimeout (ms)
options.worldIdstringNoExisting world ID
options.onProgress(progress: UploadProgress) => voidNoProgress callback

uploadItemFromDirectory(dirPath, options)​

Reads xrift.json from a directory and uploads an item.

ParameterTypeRequiredDescription
dirPathstringYesDirectory path containing xrift.json
options.tokenstringYesAPI token
options.baseUrlstringNoAPI base URL
options.timeoutnumberNoTimeout (ms)
options.itemIdstringNoExisting item ID
options.onProgress(progress: UploadProgress) => voidNoProgress callback

Utilities​

calculateContentHash(files, configValues?)​

Calculates a SHA-256 based content hash (first 12 characters) from files and configuration values. Automatically uses node:crypto in Node.js and Web Crypto API in browsers.

import { calculateContentHash } from '@xrift/sdk';

const hash = await calculateContentHash(
[{ remotePath: 'scene.glb', data: fileData }],
{ physics: { gravity: -9.8 } },
);

getMimeType(filePath)​

Determines MIME type from a file path extension.

import { getMimeType } from '@xrift/sdk';

getMimeType('scene.glb'); // 'model/gltf-binary'
getMimeType('texture.png'); // 'image/png'
getMimeType('unknown.xyz'); // 'application/octet-stream'

Supported extensions: .glb, .gltf, .png, .jpg, .jpeg, .webp, .json, .js, .mjs, .html, .css, .txt, .bin, .wasm, .svg, .mp3, .ogg, .wav, .mp4, .webm, .ktx2, .basis, .hdr, .exr


Type Definitions​

Config Types​

TypeDescription
XriftWorldConfigWorld configuration (type, distDir, name, physics, camera, etc.)
XriftItemConfigItem configuration (type, distDir, name, permissions, etc.)
XriftConfigUnion type: XriftWorldConfig | XriftItemConfig

Common Types​

TypeDescription
FileDataArrayBuffer | Uint8Array — Binary file data
UploadFileUpload file (remotePath, size, contentType, data)
UploadProgressProgress info (completed, total, currentFile)
PhysicsConfigPhysics settings (gravity, allowInfiniteJump)
CameraConfigCamera settings (near, far)
OutputBufferType'UnsignedByteType' | 'HalfFloatType' | 'FloatType'
SignedUrlResponseSigned URL response

World Types​

TypeDescription
WorldPermissionsPermission settings (allowedDomains, allowedCodeRules)
WorldUploadOptionsUpload options
WorldUploadResultUpload result

Item Types​

TypeDescription
ItemPermissionsPermission settings (allowedDomains, allowedCodeRules)
ItemUploadOptionsUpload options
ItemUploadResultUpload result