- 前提
プラットフォームを管理しているものを「システム」と呼ぶ。
???のとき、システム全体で一意となる識別子が付番される[実装依存: `M-`から始まることが多い]。本ドキュメントではこれを「MID」と呼ぶ。
MIDが付与されているエンティティは「MA」と呼ぶ。
ユーザー、グループ、あるいはMAを総称して「所有権表明エンティティ」と呼ぶ。
システムによって管理されている有向グラフで、各項目の所有者が何らかの所有権表明エンティティとなっているオブジェクトストレージを「インベントリ」と呼ぶ。
インベントリの最上のディレクトリであり、親ディレクトリがないディレクトリを「(その)インベントリのルート」と呼ぶ。
インベントリにあるオブジェクトは全て「レコード」として管理されている。
レコードに付与された識別子を「レコードID」と呼ぶ。
システム全体で一意となる識別子が付番される。
[実装依存: これは `R-`から始まり、その直後にUUIDv4として解釈できる文字列が続くことが***多い***が常時ではないのであてにするべきではない]
ユーザーがシステムにログインしたときに生成される推測不可能な文字列を「ローカルマシントークン」と呼ぶ。
コンピューターごとによって異なる[未検証]識別子が付番される。
ユーザーが作成されたときに付与される識別子を、「ユーザーID」と呼ぶ。
システム全体で一意となる識別子が付番される。
[実装依存: `U-`から始まることが多い。前プラットフォームからマイグレーションされたユーザーはその後にユーザー名の空白を`-`で置換した文字列が続くことが多いが、ユーザーネームに日本語が使われている場合など反例があるため仮定するのは危険。Resonite内で作成されたユーザーはプレフィクスのあとにUUIDv4として解釈できる文字列が続くことがほとんど。 [Resoniteで新しく作ったユーザーのIDはランダムになるっぽい](https://www.notion.so/Resonite-ID-8e610c06fd214fba94bb9573000acbd8?pvs=21)も参照せよ]
グループが作成されたときに付与される識別子を「グループID」と呼ぶ。
システム全体で一意となる識別子が付番される
[実装依存: `G-`から始まることが多い]
レコードに内部的につけられ、相対パスのコンポーネントとして使用される文字列を「RecordName」と呼ぶ。
注: 実際に表示されるレコードの名前とは異なる場合がある。特に、UI上で表示されるラベルにRTFを使用している場合は一致しない[未検証]。
相対パスはインベントリのルートを意味する `Inventory`から始まり0個以上のRecordNameの列とともに別途定められる区切り文字で連結して得られる文字列である。
- インベントリの構造
インベントリは以下のような構造になっている。
- 個人インベントリのルート - グループ[0]のインベントリのルート - グループ[1]のインベントリのルート - …
どのグループにも所属していない場合は、個人インベントリのルートだけが見える。
- クォータ
各ルート下にあるレコードの容量は、そのルートの所有者のクォータに計上される。
ただし、シンボリックリンク及びそのシンボリックリンクを参照して得られるアイテムは計上されない。
クォータを超過すると、超過が解消されるまで新規にアップロードすることができなくなる。個人インベントリのクォータはPatreonで支援することなどで一時的に引き上げることができる。
- 読みこみ
各レコードはアップロードした時点では非公開で、紐付いたルートにアクセスできるアカウントしか存在を知ることができない。APIでも同様であり、認証付きのアクセスを行わなければアクセスに失敗する。
明示的にレコードを公開状態にすることで、認証なしでもアクセスすることができるようになる。
公開・非公開は任意のタイミングで切り替えることができる。
- 書き込み
(未検証) レコードはそのIDを保ちながら中身をすげ替えることができない。
自分が所有しているアイテムはいつでも書き込める。
自分が所属しているグループが所有しているアイテムはいつでも書き込める。
それ以外の場合は書き込めない。特に、他のアカウントが所有しているアイテムは書き込めない。
- レコードの内部的な構造
レコードは次の構造で示される。各プロパティの詳しい説明は省略。
`Record.name` はRecordNameであり、相対パスの構築に使用される。
```tsx type UserId = `U-{string}`; type GroupId = `G-{string}`; type MID = `M-{string}`; type RecordOwnerId = UserId | GroupId | MID; type RecordId = ((string & {}) | "R-Home" | "R-Settings"); export type Record = {
recordType: string, id: RecordId, ownerId: RecordOwnerId, assetUri: Url, version: number, name: string, description: string, ownerName: string, tags: string[] | null, thumbnailUri: Url | null, lastModificationTime: string, creationTime, firstPublishTime, isDeleted: boolean, isPublic: boolean, isForPatrons: boolean, isListed: boolean, visits: number, rating: number, randomOrder: number, submissions: unknown[], manifest: string[], assetManifest: unknown[], migrationMetadata?: unknown,
} & ({
recordType: "directory", path: string
} | {
recordType: "world"
} | {
recordType: "object"
} | {
recordType: "link"
}); ```
- resrec URI
前システムからの慣例として、レコードIDはそのレコードの所有者とともにURIで表記される。典型的な書式は以下の2通り。
1. 固定参照方式
1. `resrec:///` 2. レコード所有者のID 3. `/` 4. レコードID
2. 相対参照方式
1. `resrec:///` 2. レコード所有者のID 3. `/` 4. `/`で連結した相対パス
相対参照方式は相対パスに依存しているため相対的に使用されることが少ない。
固定参照方式は [`GET https://api.resonite.com/users/{所有者}/records/{レコードID}`](https://api.resonite.com/users/{所有者}/records/{レコードID}) で、相対参照方式は [`GET https://api.resonite.com/users/{所有者}/records](https://api.resonite.com/users/{所有者}/records/root/{相対パス})?path={\u005Cで連結した相対パス}` で取得できる。所有者がグループの場合、 `/users/` を `/groups/` に読み替えること。
特殊な例として `resrec:///M-zkxutoiq5fkqemdd5c9y56sjrrwbmcgpnadmsqq91kd7wm78s9mo/R-Home` があるが、これはResoniteのデフォルトホームを指している。また、各ユーザーの `R-Settings` は設定同期用のbrsonである。これらのレコードIDはUUIDとして解釈できず、今後もこういった特別な形式が増える可能性がある。
- resdb URI
以下の書式に沿うURIはレコードへの生固定リンクである。
1. `resdb:///` 2. レコード強化ID: 正規表現で `[0-9a-f]+` 3. 拡張子: 正規表現で `\.(brson|7zbson)$`
拡張子が異なる場合、画像など他の内容を指している。例えば `resdb:///4e88416c9446102d1cd3701136fca8aa502de17874222e174ffe2a23d442d82a.png` はPNG形式の画像を返す。
[`GET https://assets.resonite.com/{レコード強化ID}`](https://assets.resonite.com/{レコード強化ID}) でレコードの内容を返す。レコードのデコード方法についてはUser:Kisaragi marine/brson を参照。
- local
以下の書式に沿うURIは手元にしか存在しないレコードへの固定リンクである。
1. `local://` 2. マシンID 3. `/` 4. 名前: ランダム文字列 5. `.lz4bson`
レコードは `lz4bson` 形式で `%UserProfile%\Appdata\LocalLow\Yellow Dog Man Studios\Resonite\Assets\名前.lz4bson` に格納されている。