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