1.4 KiB
1.4 KiB
Resources
Source: src/domains/ResourcesDomain.ts. Row operations on a resource as the
signed-in player through /sdk/v1/resources/{slug}. client.resources(slug)
returns a ResourceHandle; it performs no request by itself.
const items = client.resources('items');
items.list(): Promise<ListResourceRowsResponse> // GET /{slug} → { items?: ResourceRow[], total?: number }
items.get(id): Promise<ResourceRow> // GET /{slug}/{id}
items.create({ id?, data? }): Promise<ResourceRow> // POST /{slug}
items.update(id, { data?, version? }): Promise<ResourceRow> // PATCH /{slug}/{id}
items.delete(id): Promise<void> // DELETE /{slug}/{id}
ResourceRow is { id, playerId, data, version, rank, createdAt, updatedAt }
(all optional in the generated type). Pass version on update for
optimistic concurrency.
const row = await client.resources('items').create({ data: { name: 'Sword' } });
await client.resources('items').update(row.id!, { data: { name: 'Axe' }, version: row.version });
What a player may read or write is decided by the resource's access rules on
the server; a denied operation rejects with RudderHttpError code
forbidden. Deleting a row that other rows still reference rejects with
status 409 and code row_referenced. Resources are not observable domains:
call list() again when you need fresh rows.