メインコンテンツまでスキップ

API リファレンス

@xrift/sdk の全 API リファレンスです。

XriftClient

SDK のエントリーポイント。ワールド API とアイテム API をまとめて提供します。

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

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

コンストラクタ

パラメータ必須デフォルト説明
tokenstringはい-API 認証トークン
baseUrlstringいいえhttps://api.xrift.netAPI ベース URL
timeoutnumberいいえ30000リクエストタイムアウト (ms)

プロパティ

プロパティ説明
worldsWorldsApiワールド操作 API
itemsItemsApiアイテム操作 API

WorldsApi

ワールドの作成・アップロードを行う API です。client.worlds からアクセスします。

upload(files, options)

ワールドアップロードの統合メソッド。作成→ハッシュ計算→URL 取得→アップロード→完了通知を一括で実行します。

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

パラメータ:

名前説明
filesUploadFile[]アップロードするファイルの配列
optionsWorldUploadOptionsアップロードオプション

WorldUploadOptions:

フィールド必須説明
worldIdstringいいえ既存ワールドの ID(省略時は新規作成)
namestringはいワールド名
descriptionstringいいえ説明
thumbnailPathstringいいえサムネイルのパス
physicsPhysicsConfigいいえ物理設定
cameraCameraConfigいいえカメラ設定
permissionsWorldPermissionsいいえ権限設定
outputBufferTypeOutputBufferTypeいいえ出力バッファ型
onProgress(progress: UploadProgress) => voidいいえ進捗コールバック

戻り値: WorldUploadResult

フィールド説明
worldIdstringワールド ID
versionIdstringバージョン ID
versionNumbernumberバージョン番号
contentHashstringコンテンツハッシュ
filesUploadFile[]アップロードしたファイル

ItemsApi

アイテムの作成・アップロードを行う API です。client.items からアクセスします。

upload(files, options)

アイテムアップロードの統合メソッド。

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

ItemUploadOptions:

フィールド必須説明
itemIdstringいいえ既存アイテムの ID(省略時は新規作成)
namestringはいアイテム名
descriptionstringいいえ説明
thumbnailPathstringいいえサムネイルのパス
permissionsItemPermissionsいいえ権限設定
onProgress(progress: UploadProgress) => voidいいえ進捗コールバック

戻り値: ItemUploadResult

フィールド説明
itemIdstringアイテム ID
versionIdstringバージョン ID
versionNumbernumberバージョン番号
contentHashstringコンテンツハッシュ
filesUploadFile[]アップロードしたファイル

エラークラス

SDK は以下のエラー階層を提供します。

XriftSdkError (基底クラス)
├── XriftApiError (API エラー)
│ └── XriftAuthError (認証エラー: 401)
└── XriftNetworkError (ネットワークエラー)

XriftApiError

API がエラーレスポンスを返した場合にスローされます。

プロパティ説明
messagestringエラーメッセージ
statusCodenumberHTTP ステータスコード
responseBodyunknownレスポンスボディ

XriftAuthError

認証に失敗した場合(HTTP 401)にスローされます。XriftApiError を継承しています。

XriftNetworkError

ネットワーク接続エラーの場合にスローされます。

プロパティ説明
messagestringエラーメッセージ
causeError原因となったエラー

エラーハンドリング例

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

try {
await client.worlds.upload(files, options);
} catch (error) {
if (error instanceof XriftAuthError) {
console.error('認証エラー: トークンを確認してください');
} else if (error instanceof XriftApiError) {
console.error(`API エラー (${error.statusCode}): ${error.message}`);
} else if (error instanceof XriftNetworkError) {
console.error('ネットワークエラー:', error.message);
}
}

Config パーサー

xrift.json を読み込んで設定オブジェクトを返す関数です。

parseWorldConfig(json)

JSON 文字列をパースしてワールド設定を返します。"world" キーが存在しない場合は XriftSdkError をスローします。

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)

JSON 文字列をパースしてアイテム設定を返します。"item" キーが存在しない場合は XriftSdkError をスローします。

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)

ファイルパスの配列から、ignore パターンにマッチするファイルを除外します。

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 ヘルパー

@xrift/sdk/node から利用できる Node.js 専用のヘルパー関数です。xrift.json の読み込み → ファイル収集 → アップロードを一括で実行します。

uploadWorldFromDirectory(dirPath, options)

ディレクトリ内の xrift.json を読み込み、ワールドをアップロードします。

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}`),
});
パラメータ必須説明
dirPathstringはいxrift.json があるディレクトリパス
options.tokenstringはいAPI トークン
options.baseUrlstringいいえAPI ベース URL
options.timeoutnumberいいえタイムアウト (ms)
options.worldIdstringいいえ既存ワールド ID
options.onProgress(progress: UploadProgress) => voidいいえ進捗コールバック

uploadItemFromDirectory(dirPath, options)

ディレクトリ内の xrift.json を読み込み、アイテムをアップロードします。

パラメータ必須説明
dirPathstringはいxrift.json があるディレクトリパス
options.tokenstringはいAPI トークン
options.baseUrlstringいいえAPI ベース URL
options.timeoutnumberいいえタイムアウト (ms)
options.itemIdstringいいえ既存アイテム ID
options.onProgress(progress: UploadProgress) => voidいいえ進捗コールバック

ユーティリティ

calculateContentHash(files, configValues?)

ファイルと設定値から SHA-256 ベースのコンテンツハッシュ(先頭 12 文字)を計算します。Node.js では node:crypto、ブラウザでは Web Crypto API を自動的に使い分けます。

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

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

getMimeType(filePath)

ファイルパスの拡張子から MIME タイプを判定します。

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

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

対応する拡張子: .glb, .gltf, .png, .jpg, .jpeg, .webp, .json, .js, .mjs, .html, .css, .txt, .bin, .wasm, .svg, .mp3, .ogg, .wav, .mp4, .webm, .ktx2, .basis, .hdr, .exr


型定義

Config 型

型名説明
XriftWorldConfigワールド設定(type, distDir, name, physics, camera 等)
XriftItemConfigアイテム設定(type, distDir, name, permissions 等)
XriftConfigXriftWorldConfig | XriftItemConfig の union 型

共通型

型名説明
FileDataArrayBuffer | Uint8Array — ファイルのバイナリデータ
UploadFileアップロードファイル(remotePath, size, contentType, data)
UploadProgress進捗情報(completed, total, currentFile)
PhysicsConfig物理設定(gravity, allowInfiniteJump)
CameraConfigカメラ設定(near, far)
OutputBufferType'UnsignedByteType' | 'HalfFloatType' | 'FloatType'
SignedUrlResponse署名付き URL レスポンス

ワールド型

型名説明
WorldPermissions権限設定(allowedDomains, allowedCodeRules)
WorldUploadOptionsアップロードオプション
WorldUploadResultアップロード結果

アイテム型

型名説明
ItemPermissions権限設定(allowedDomains, allowedCodeRules)
ItemUploadOptionsアップロードオプション
ItemUploadResultアップロード結果