diff --git a/vendor/api/docs/content/actors/create.mdx b/vendor/api/docs/content/actors/create.mdx
index e510dc90..dc4823b6 100644
--- a/vendor/api/docs/content/actors/create.mdx
+++ b/vendor/api/docs/content/actors/create.mdx
@@ -1,11 +1,11 @@
---
title: "Create Actor"
-description: "Create a new actor. Fails if a live actor with the same name and key already exists."
+description: "Create a new actor. Fails if an actor with the same name and key already exists."
---
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-Prefer [Get or Create Actor](/docs/api/actors/get-or-create) for idempotent access by key. Use this endpoint when you need a fresh actor every time, for example with a random key. The request returns once the actor's record exists, and fails after 30 seconds. A namespace token needs a grant on `actor` with `create`.
+Prefer [Get or Create Actor](/docs/api/actors/get-or-create) for idempotent access by key. Use this endpoint when you need a fresh actor every time, for example with a random key.
```http
POST https://rivet.example.com/actors
@@ -22,7 +22,8 @@ curl -X POST "https://rivet.example.com/actors?namespace=$RIVET_NAMESPACE" \
-d '{
"name": "counter",
"key": "my-counter",
- "runner_name_selector": "default"
+ "runner_name_selector": "default",
+ "crash_policy": "sleep"
}'
```
@@ -32,13 +33,13 @@ curl -X POST "https://rivet.example.com/actors?namespace=$RIVET_NAMESPACE" \
## Authentication
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Query Parameters
| Name | Type | Required | Description |
| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
## Request Body
@@ -46,195 +47,54 @@ Content type: `application/json`.
| Field | Type | Required | Description |
| --- | --- | --- | --- |
-| `name` | `string` | Yes | Name of the actor as registered in your RivetKit registry. 1 to 64 bytes. |
-| `key` | `string \| null` | No | Key identifying this actor within its name. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). Omit for an actor without a key. |
-| `input` | `string \| null` | No | Input passed to the actor, encoded as standard base64 (not base64url). |
-| `runner_name_selector` | `string \| null` | No | Node pool that runs the actor. Defaults to `default`. |
+| `crash_policy` | `"restart" \| "sleep" \| "destroy"` | Yes | What happens when the actor crashes. RivetKit defaults to `sleep`. |
+| `datacenter` | `string \| null` | No | Datacenter to create the actor in. Defaults to the datacenter serving the request. |
+| `input` | `string \| null` | No | Base64url-encoded CBOR input passed to the actor's `createState` and `onCreate` hooks. |
+| `key` | `string \| null` | No | Key identifying this actor within its name. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). Omit for a keyless actor. |
+| `name` | `string` | Yes | Name of the actor as registered in your RivetKit registry. |
+| `runner_name_selector` | `string` | Yes | Pool that runs the actor. RivetKit registers the `default` pool unless configured otherwise. |
## Responses
### 200
-The created actor. `created` is always `true`.
-
| Field | Type | Description |
| --- | --- | --- |
| `actor` | `object` | |
| `actor.actor_id` | `string` | Unique ID of the actor. |
+| `actor.connectable_ts` | `integer \| null` | Denotes when the actor was last connectable. Null if actor is not running. |
+| `actor.crash_policy` | `"restart" \| "sleep" \| "destroy"` | What happens when the actor crashes. |
+| `actor.create_ts` | `integer` | Denotes when the actor was first created. |
+| `actor.datacenter` | `string` | Datacenter the actor is scheduled in. |
+| `actor.destroy_ts` | `integer \| null` | Denotes when the actor was destroyed. |
+| `actor.error` | `object \| null` | Error details if the actor failed to start. |
+| `actor.key` | `string \| null` | Actor key. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). |
| `actor.name` | `string` | Actor name as registered in your RivetKit registry. |
-| `actor.key` | `string` | Actor key. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). An empty string for an actor without a key. |
-| `actor.namespace` | `string` | Name of the namespace the actor belongs to. |
-| `actor.runner_name_selector` | `string` | Node pool the actor runs in. |
-| `actor.create_ts` | `integer` | When the actor was created, in Unix milliseconds. |
-| `actor.start_ts` | `integer \| null` | When the actor first started. Not recorded by this version, so always `null`. |
-| `actor.pending_allocation_ts` | `integer \| null` | When the actor started waiting for a node. Not recorded by this version, so always `null`. |
-| `actor.connectable_ts` | `integer \| null` | When the actor last became connectable. Not recorded by this version, so always `null`. |
-| `actor.sleep_ts` | `integer \| null` | When the actor went to sleep. Not recorded by this version, so always `null`. |
-| `actor.reschedule_ts` | `integer \| null` | When the actor will next try to allocate. Not recorded by this version, so always `null`. |
-| `actor.destroy_ts` | `integer \| null` | When the actor was destroyed, in Unix milliseconds. Only set in listings that include destroyed actors; otherwise `null`. |
-| `created` | `boolean` | Always `true`. |
+| `actor.namespace_id` | `string` | ID of the namespace the actor belongs to. |
+| `actor.pending_allocation_ts` | `integer \| null` | Denotes when the actor started waiting for an allocation. |
+| `actor.reschedule_ts` | `integer \| null` | Denotes when the actor will try to allocate again. If this is set, the actor will not attempt to allocate until the given timestamp. |
+| `actor.runner_name_selector` | `string` | Pool the actor runs on. |
+| `actor.sleep_ts` | `integer \| null` | Denotes when the actor entered a sleeping state. |
+| `actor.start_ts` | `integer \| null` | Denotes when the actor was first made connectable. Null if never. |
```json
{
"actor": {
- "actor_id": "d97pbq1nyqxw1w5qdwz0iirbqiblh2",
- "name": "my-actor",
- "key": "my-key",
- "namespace": "my-namespace",
- "runner_name_selector": "default",
+ "actor_id": "00000000-0000-0000-0000-000000000000",
+ "connectable_ts": null,
+ "crash_policy": "restart",
"create_ts": 1700000000000,
- "start_ts": null,
+ "datacenter": "us-east",
+ "destroy_ts": null,
+ "error": null,
+ "key": null,
+ "name": "my-actor",
+ "namespace_id": "00000000-0000-0000-0000-000000000000",
"pending_allocation_ts": null,
- "connectable_ts": null,
- "sleep_ts": null,
"reschedule_ts": null,
- "destroy_ts": null
- },
- "created": false
-}
-```
-
-### 400
-
-`actor.invalid_name`: `name` is empty or longer than 64 bytes. `actor.invalid_key`: `key` is longer than 1024 bytes. `actor.invalid_key_encoding`: `key` is not in canonical slash-separated form. `actor.key_owned_elsewhere`: another datacenter owns the key. `envoy.invalid_pool_name`: `runner_name_selector` is not a valid pool name. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "actor",
- "code": "invalid_name",
- "message": "Actor name must be 1 to 64 bytes."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
-}
-```
-
-### 409
-
-`actor.duplicate_key`: a live actor with this name and key already exists.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "actor",
- "code": "duplicate_key",
- "message": "Actor key already in use."
-}
-```
-
-### 415
-
-The request is missing the `Content-Type: application/json` header. Returned as plain text.
-
-Content type: `text/plain`.
-
-### 422
-
-The JSON body does not match the request schema, for example a missing required field, a wrong type or an unknown field where unknown fields are rejected. Returned as plain text.
-
-Content type: `text/plain`.
-
-### 500
-
-`core.internal_error`: an unexpected failure, including `input` that is not valid base64 and a create that did not finish within 30 seconds.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
+ "runner_name_selector": "default",
+ "sleep_ts": null,
+ "start_ts": null
+ }
}
```
diff --git a/vendor/api/docs/content/actors/destroy.mdx b/vendor/api/docs/content/actors/destroy.mdx
index c70aa07a..60a8ad5f 100644
--- a/vendor/api/docs/content/actors/destroy.mdx
+++ b/vendor/api/docs/content/actors/destroy.mdx
@@ -5,8 +5,6 @@ description: "Destroy an actor. The actor's onDestroy hook runs, then its state
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-A namespace token needs a grant on `actor` with `delete`.
-
```http
DELETE https://rivet.example.com/actors/{actor_id}
```
@@ -26,7 +24,7 @@ curl -X DELETE "https://rivet.example.com/actors/$ACTOR_ID?namespace=$RIVET_NAME
## Authentication
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Path Parameters
@@ -38,132 +36,16 @@ Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/
| Name | Type | Required | Description |
| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
## Responses
### 200
-The destroy was accepted. The response body is an empty object.
-
```json
{}
```
-### 400
-
-`envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request. For a namespace token this is also returned when the actor does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`actor.not_found`: the actor does not exist or belongs to another namespace. `namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "actor",
- "code": "not_found",
- "message": "The actor does not exist or was destroyed."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure, including an `actor_id` that is not a valid Rivet ID.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
-```
-
## Related
- [Destroying Actors](/actors/docs/destroy)
diff --git a/vendor/api/docs/content/actors/get-or-create.mdx b/vendor/api/docs/content/actors/get-or-create.mdx
index 34fe6b77..46837f3e 100644
--- a/vendor/api/docs/content/actors/get-or-create.mdx
+++ b/vendor/api/docs/content/actors/get-or-create.mdx
@@ -5,7 +5,7 @@ description: "Return the actor with the given name and key, creating it if it do
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-The response includes `created`, which is `true` when this call created the actor. A sleeping actor is woken. Without `key`, a new actor is created every time. Gateway endpoints can perform the same lookup inline with the `rvt-*` selector parameters, so you only need this endpoint when you want the `actor_id` up front. A namespace token needs a grant on `actor` with `create`.
+The response includes `created`, which is `true` when this call created the actor. Gateway endpoints can perform the same lookup inline with the `rvt-*` selector parameters, so you only need this endpoint when you want the `actor_id` up front.
```http
PUT https://rivet.example.com/actors
@@ -22,7 +22,8 @@ curl -X PUT "https://rivet.example.com/actors?namespace=$RIVET_NAMESPACE" \
-d '{
"name": "counter",
"key": "my-counter",
- "runner_name_selector": "default"
+ "runner_name_selector": "default",
+ "crash_policy": "sleep"
}'
```
@@ -32,13 +33,13 @@ curl -X PUT "https://rivet.example.com/actors?namespace=$RIVET_NAMESPACE" \
## Authentication
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Query Parameters
| Name | Type | Required | Description |
| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
## Request Body
@@ -46,176 +47,56 @@ Content type: `application/json`.
| Field | Type | Required | Description |
| --- | --- | --- | --- |
-| `name` | `string` | Yes | Name of the actor as registered in your RivetKit registry. 1 to 64 bytes. |
-| `key` | `string \| null` | No | Key identifying this actor within its name. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). |
-| `input` | `string \| null` | No | Input passed to the actor if this request creates it, encoded as standard base64 (not base64url). |
-| `runner_name_selector` | `string \| null` | No | Node pool that runs the actor. Defaults to `default`. |
+| `crash_policy` | `"restart" \| "sleep" \| "destroy"` | Yes | What happens when the actor crashes. RivetKit defaults to `sleep`. |
+| `datacenter` | `string \| null` | No | Datacenter to create the actor in if it does not exist. Defaults to the datacenter serving the request. |
+| `input` | `string \| null` | No | Base64url-encoded CBOR input passed to the actor's `createState` and `onCreate` hooks when the actor is created. |
+| `key` | `string` | Yes | Key identifying this actor within its name. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). |
+| `name` | `string` | Yes | Name of the actor as registered in your RivetKit registry. |
+| `runner_name_selector` | `string` | Yes | Pool that runs the actor. RivetKit registers the `default` pool unless configured otherwise. |
## Responses
### 200
-The existing or created actor.
-
| Field | Type | Description |
| --- | --- | --- |
| `actor` | `object` | |
| `actor.actor_id` | `string` | Unique ID of the actor. |
+| `actor.connectable_ts` | `integer \| null` | Denotes when the actor was last connectable. Null if actor is not running. |
+| `actor.crash_policy` | `"restart" \| "sleep" \| "destroy"` | What happens when the actor crashes. |
+| `actor.create_ts` | `integer` | Denotes when the actor was first created. |
+| `actor.datacenter` | `string` | Datacenter the actor is scheduled in. |
+| `actor.destroy_ts` | `integer \| null` | Denotes when the actor was destroyed. |
+| `actor.error` | `object \| null` | Error details if the actor failed to start. |
+| `actor.key` | `string \| null` | Actor key. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). |
| `actor.name` | `string` | Actor name as registered in your RivetKit registry. |
-| `actor.key` | `string` | Actor key. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). An empty string for an actor without a key. |
-| `actor.namespace` | `string` | Name of the namespace the actor belongs to. |
-| `actor.runner_name_selector` | `string` | Node pool the actor runs in. |
-| `actor.create_ts` | `integer` | When the actor was created, in Unix milliseconds. |
-| `actor.start_ts` | `integer \| null` | When the actor first started. Not recorded by this version, so always `null`. |
-| `actor.pending_allocation_ts` | `integer \| null` | When the actor started waiting for a node. Not recorded by this version, so always `null`. |
-| `actor.connectable_ts` | `integer \| null` | When the actor last became connectable. Not recorded by this version, so always `null`. |
-| `actor.sleep_ts` | `integer \| null` | When the actor went to sleep. Not recorded by this version, so always `null`. |
-| `actor.reschedule_ts` | `integer \| null` | When the actor will next try to allocate. Not recorded by this version, so always `null`. |
-| `actor.destroy_ts` | `integer \| null` | When the actor was destroyed, in Unix milliseconds. Only set in listings that include destroyed actors; otherwise `null`. |
+| `actor.namespace_id` | `string` | ID of the namespace the actor belongs to. |
+| `actor.pending_allocation_ts` | `integer \| null` | Denotes when the actor started waiting for an allocation. |
+| `actor.reschedule_ts` | `integer \| null` | Denotes when the actor will try to allocate again. If this is set, the actor will not attempt to allocate until the given timestamp. |
+| `actor.runner_name_selector` | `string` | Pool the actor runs on. |
+| `actor.sleep_ts` | `integer \| null` | Denotes when the actor entered a sleeping state. |
+| `actor.start_ts` | `integer \| null` | Denotes when the actor was first made connectable. Null if never. |
| `created` | `boolean` | `true` if this request created the actor, `false` if it already existed. |
```json
{
"actor": {
- "actor_id": "d97pbq1nyqxw1w5qdwz0iirbqiblh2",
- "name": "my-actor",
- "key": "my-key",
- "namespace": "my-namespace",
- "runner_name_selector": "default",
+ "actor_id": "00000000-0000-0000-0000-000000000000",
+ "connectable_ts": null,
+ "crash_policy": "restart",
"create_ts": 1700000000000,
- "start_ts": null,
+ "datacenter": "us-east",
+ "destroy_ts": null,
+ "error": null,
+ "key": null,
+ "name": "my-actor",
+ "namespace_id": "00000000-0000-0000-0000-000000000000",
"pending_allocation_ts": null,
- "connectable_ts": null,
- "sleep_ts": null,
"reschedule_ts": null,
- "destroy_ts": null
+ "runner_name_selector": "default",
+ "sleep_ts": null,
+ "start_ts": null
},
"created": false
}
```
-
-### 400
-
-`actor.invalid_name`: `name` is empty or longer than 64 bytes. `actor.invalid_key`: `key` is longer than 1024 bytes. `actor.invalid_key_encoding`: `key` is not in canonical slash-separated form. `actor.key_owned_elsewhere`: another datacenter owns the key. `envoy.invalid_pool_name`: `runner_name_selector` is not a valid pool name. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "actor",
- "code": "invalid_name",
- "message": "Actor name must be 1 to 64 bytes."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
-}
-```
-
-### 415
-
-The request is missing the `Content-Type: application/json` header. Returned as plain text.
-
-Content type: `text/plain`.
-
-### 422
-
-The JSON body does not match the request schema, for example a missing required field, a wrong type or an unknown field where unknown fields are rejected. Returned as plain text.
-
-Content type: `text/plain`.
-
-### 500
-
-`core.internal_error`: an unexpected failure, including `input` that is not valid base64 and a create that did not finish within 30 seconds.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
-```
diff --git a/vendor/api/docs/content/actors/get.mdx b/vendor/api/docs/content/actors/get.mdx
deleted file mode 100644
index ced55eba..00000000
--- a/vendor/api/docs/content/actors/get.mdx
+++ /dev/null
@@ -1,194 +0,0 @@
----
-title: "Get Actor"
-description: "Get a live actor by ID."
----
-
-{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-
-Returns `actor.not_found` for an actor that was destroyed or belongs to another namespace. A namespace token needs a grant on `actor` with `read`.
-
-```http
-GET https://rivet.example.com/actors/{actor_id}
-```
-
-## Examples
-
-
-
-```bash cURL
-curl "https://rivet.example.com/actors/$ACTOR_ID?namespace=$RIVET_NAMESPACE" \
- -H "Authorization: Bearer $RIVET_TOKEN"
-```
-
-
-
-## Authentication
-
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
-
-## Path Parameters
-
-| Name | Type | Required | Description |
-| --- | --- | --- | --- |
-| `actor_id` | `string` | Yes | ID of the actor. |
-
-## Query Parameters
-
-| Name | Type | Required | Description |
-| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
-
-## Responses
-
-### 200
-
-The actor.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `actor` | `object` | |
-| `actor.actor_id` | `string` | Unique ID of the actor. |
-| `actor.name` | `string` | Actor name as registered in your RivetKit registry. |
-| `actor.key` | `string` | Actor key. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). An empty string for an actor without a key. |
-| `actor.namespace` | `string` | Name of the namespace the actor belongs to. |
-| `actor.runner_name_selector` | `string` | Node pool the actor runs in. |
-| `actor.create_ts` | `integer` | When the actor was created, in Unix milliseconds. |
-| `actor.start_ts` | `integer \| null` | When the actor first started. Not recorded by this version, so always `null`. |
-| `actor.pending_allocation_ts` | `integer \| null` | When the actor started waiting for a node. Not recorded by this version, so always `null`. |
-| `actor.connectable_ts` | `integer \| null` | When the actor last became connectable. Not recorded by this version, so always `null`. |
-| `actor.sleep_ts` | `integer \| null` | When the actor went to sleep. Not recorded by this version, so always `null`. |
-| `actor.reschedule_ts` | `integer \| null` | When the actor will next try to allocate. Not recorded by this version, so always `null`. |
-| `actor.destroy_ts` | `integer \| null` | When the actor was destroyed, in Unix milliseconds. Only set in listings that include destroyed actors; otherwise `null`. |
-
-```json
-{
- "actor": {
- "actor_id": "d97pbq1nyqxw1w5qdwz0iirbqiblh2",
- "name": "my-actor",
- "key": "my-key",
- "namespace": "my-namespace",
- "runner_name_selector": "default",
- "create_ts": 1700000000000,
- "start_ts": null,
- "pending_allocation_ts": null,
- "connectable_ts": null,
- "sleep_ts": null,
- "reschedule_ts": null,
- "destroy_ts": null
- }
-}
-```
-
-### 400
-
-`envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request. For a namespace token this is also returned when the actor does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`actor.not_found`: the actor does not exist, was destroyed, or belongs to another namespace. `namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "actor",
- "code": "not_found",
- "message": "The actor does not exist or was destroyed."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure, including an `actor_id` that is not a valid Rivet ID.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
-```
diff --git a/vendor/api/docs/content/actors/list-names.mdx b/vendor/api/docs/content/actors/list-names.mdx
index 81974f0a..8b5cd98d 100644
--- a/vendor/api/docs/content/actors/list-names.mdx
+++ b/vendor/api/docs/content/actors/list-names.mdx
@@ -1,12 +1,10 @@
---
title: "List Actor Names"
-description: "List the actor names that the namespace's connected nodes accept."
+description: "List the distinct actor names that have been created in a namespace."
---
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-A namespace token needs a grant on `actor` with `list`.
-
```http
GET https://rivet.example.com/actors/names
```
@@ -26,140 +24,31 @@ curl "https://rivet.example.com/actors/names?namespace=$RIVET_NAMESPACE" \
## Authentication
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Query Parameters
| Name | Type | Required | Description |
| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
+| `limit` | `integer` | No | Maximum number of results to return. |
+| `cursor` | `string` | No | Pagination cursor. Pass the `pagination.cursor` value from the previous response to fetch the next page. |
## Responses
### 200
-Map of actor name to metadata.
-
| Field | Type | Description |
| --- | --- | --- |
| `names` | `object` | Map of actor name to metadata. |
+| `pagination` | `object` | |
+| `pagination.cursor` | `string \| null` | Cursor for the next page, or `null` when there are no more results. |
```json
{
- "names": {}
-}
-```
-
-### 400
-
-`envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure. Details are only logged on the server.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
+ "names": {},
+ "pagination": {
+ "cursor": null
+ }
}
```
diff --git a/vendor/api/docs/content/actors/list.mdx b/vendor/api/docs/content/actors/list.mdx
index 5ca3fdb1..dbd992e4 100644
--- a/vendor/api/docs/content/actors/list.mdx
+++ b/vendor/api/docs/content/actors/list.mdx
@@ -1,11 +1,11 @@
---
title: "List Actors"
-description: "List actors in a namespace by ID, by name and key, or by name. Listings by name are paginated."
+description: "List actors in a namespace, optionally filtered by name, key, or ID. Results are paginated."
---
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-Pass `actor_ids` (comma-separated) to look up actors by ID, or `name` with an optional `key`. `actor_ids` takes precedence over `name` and `key`. Only a listing by `name` without `key` is paginated; a page can hold fewer than `limit` actors while `pagination.cursor` is still set. Destroyed actors are excluded unless `include_destroyed` is `true`. A namespace token needs a grant on `actor` with `list`.
+`key` requires `name`. `actor_id` cannot be combined with `name` or `key`. Destroyed actors are excluded unless `include_destroyed` is `true`.
```http
GET https://rivet.example.com/actors
@@ -26,19 +26,19 @@ curl "https://rivet.example.com/actors?namespace=$RIVET_NAMESPACE&name=counter"
## Authentication
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Query Parameters
| Name | Type | Required | Description |
| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
-| `name` | `string` | No | Only return actors with this name. Required unless `actor_ids` or `actor_id` is set. |
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
+| `name` | `string` | No | Only return actors with this name. |
| `key` | `string` | No | Only return the actor with this key. Requires `name`. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). |
-| `actor_ids` | `string` | No | Comma-separated IDs of the actors to return. |
-| `actor_id` | `string` | No | Same as `actor_ids`. Used only when `actor_ids` is absent. |
-| `include_destroyed` | `boolean` | No | Include destroyed actors. Must be `true` or `false`. |
-| `limit` | `integer` | No | Maximum number of results to return, from 1 to 100. Defaults to 100. |
+| `actor_ids` | `string` | No | Deprecated. Use `actor_id` instead. |
+| `actor_id` | `string[]` | No | Only return actors with these IDs. Repeat the parameter for multiple IDs. |
+| `include_destroyed` | `boolean` | No | Include actors that have been destroyed. |
+| `limit` | `integer` | No | Maximum number of results to return. |
| `cursor` | `string` | No | Pagination cursor. Pass the `pagination.cursor` value from the previous response to fetch the next page. |
## Responses
@@ -51,17 +51,20 @@ Matching actors and a cursor for the next page. `pagination.cursor` is `null` on
| --- | --- | --- |
| `actors` | `object[]` | |
| `actors[].actor_id` | `string` | Unique ID of the actor. |
+| `actors[].connectable_ts` | `integer \| null` | Denotes when the actor was last connectable. Null if actor is not running. |
+| `actors[].crash_policy` | `"restart" \| "sleep" \| "destroy"` | What happens when the actor crashes. |
+| `actors[].create_ts` | `integer` | Denotes when the actor was first created. |
+| `actors[].datacenter` | `string` | Datacenter the actor is scheduled in. |
+| `actors[].destroy_ts` | `integer \| null` | Denotes when the actor was destroyed. |
+| `actors[].error` | `object \| null` | Error details if the actor failed to start. |
+| `actors[].key` | `string \| null` | Actor key. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). |
| `actors[].name` | `string` | Actor name as registered in your RivetKit registry. |
-| `actors[].key` | `string` | Actor key. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). An empty string for an actor without a key. |
-| `actors[].namespace` | `string` | Name of the namespace the actor belongs to. |
-| `actors[].runner_name_selector` | `string` | Node pool the actor runs in. |
-| `actors[].create_ts` | `integer` | When the actor was created, in Unix milliseconds. |
-| `actors[].start_ts` | `integer \| null` | When the actor first started. Not recorded by this version, so always `null`. |
-| `actors[].pending_allocation_ts` | `integer \| null` | When the actor started waiting for a node. Not recorded by this version, so always `null`. |
-| `actors[].connectable_ts` | `integer \| null` | When the actor last became connectable. Not recorded by this version, so always `null`. |
-| `actors[].sleep_ts` | `integer \| null` | When the actor went to sleep. Not recorded by this version, so always `null`. |
-| `actors[].reschedule_ts` | `integer \| null` | When the actor will next try to allocate. Not recorded by this version, so always `null`. |
-| `actors[].destroy_ts` | `integer \| null` | When the actor was destroyed, in Unix milliseconds. Only set in listings that include destroyed actors; otherwise `null`. |
+| `actors[].namespace_id` | `string` | ID of the namespace the actor belongs to. |
+| `actors[].pending_allocation_ts` | `integer \| null` | Denotes when the actor started waiting for an allocation. |
+| `actors[].reschedule_ts` | `integer \| null` | Denotes when the actor will try to allocate again. If this is set, the actor will not attempt to allocate until the given timestamp. |
+| `actors[].runner_name_selector` | `string` | Pool the actor runs on. |
+| `actors[].sleep_ts` | `integer \| null` | Denotes when the actor entered a sleeping state. |
+| `actors[].start_ts` | `integer \| null` | Denotes when the actor was first made connectable. Null if never. |
| `pagination` | `object` | |
| `pagination.cursor` | `string \| null` | Cursor for the next page, or `null` when there are no more results. |
@@ -69,18 +72,21 @@ Matching actors and a cursor for the next page. `pagination.cursor` is `null` on
{
"actors": [
{
- "actor_id": "d97pbq1nyqxw1w5qdwz0iirbqiblh2",
- "name": "my-actor",
- "key": "my-key",
- "namespace": "my-namespace",
- "runner_name_selector": "default",
+ "actor_id": "00000000-0000-0000-0000-000000000000",
+ "connectable_ts": null,
+ "crash_policy": "restart",
"create_ts": 1700000000000,
- "start_ts": null,
+ "datacenter": "us-east",
+ "destroy_ts": null,
+ "error": null,
+ "key": null,
+ "name": "my-actor",
+ "namespace_id": "00000000-0000-0000-0000-000000000000",
"pending_allocation_ts": null,
- "connectable_ts": null,
- "sleep_ts": null,
"reschedule_ts": null,
- "destroy_ts": null
+ "runner_name_selector": "default",
+ "sleep_ts": null,
+ "start_ts": null
}
],
"pagination": {
@@ -88,117 +94,3 @@ Matching actors and a cursor for the next page. `pagination.cursor` is `null` on
}
}
```
-
-### 400
-
-`actor.invalid_listing`: neither `name` nor actor IDs were given. `actor.invalid_include_destroyed`, `actor.invalid_limit`, `actor.invalid_cursor`: the parameter is malformed. `actor.invalid_key_encoding`: `key` is not in canonical slash-separated form. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "actor",
- "code": "invalid_listing",
- "message": "Listing actors requires a name or actor IDs."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure, including an actor ID that is not a valid Rivet ID.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
-```
diff --git a/vendor/api/docs/content/actors/reschedule.mdx b/vendor/api/docs/content/actors/reschedule.mdx
index da874ed2..c9646a60 100644
--- a/vendor/api/docs/content/actors/reschedule.mdx
+++ b/vendor/api/docs/content/actors/reschedule.mdx
@@ -1,12 +1,10 @@
---
title: "Reschedule Actor"
-description: "Move an actor to a new allocation. A running actor is stopped and starts again, possibly on another node, with its persisted state."
+description: "Move an actor to a different worker. The actor runs its shutdown sequence, then restarts elsewhere with its persisted state."
---
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-A running or stopping actor is stopped and allocated again, and a sleeping actor is allocated now. An actor that is still starting, or is destroyed, is left as is and the request still succeeds. The request body is ignored. A namespace token needs a grant on `actor` with `update`.
-
```http
POST https://rivet.example.com/actors/{actor_id}/reschedule
```
@@ -17,7 +15,9 @@ POST https://rivet.example.com/actors/{actor_id}/reschedule
```bash cURL
curl -X POST "https://rivet.example.com/actors/$ACTOR_ID/reschedule?namespace=$RIVET_NAMESPACE" \
- -H "Authorization: Bearer $RIVET_TOKEN"
+ -H "Authorization: Bearer $RIVET_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{}'
```
@@ -26,7 +26,7 @@ curl -X POST "https://rivet.example.com/actors/$ACTOR_ID/reschedule?namespace=$R
## Authentication
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Path Parameters
@@ -38,130 +38,20 @@ Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/
| Name | Type | Required | Description |
| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
-
-## Responses
-
-### 200
-
-The reschedule was accepted, or there was nothing to move. The response body is an empty object.
-
-```json
-{}
-```
-
-### 400
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
-`envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
+## Request Body
-### 403
+Content type: `application/json`.
-`auth.insufficient_permissions`: the token's grants do not cover this request. For a namespace token this is also returned when the actor does not exist.
+Send an empty JSON object: `{}`.
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`actor.not_found`: the actor does not exist, has no record yet, or belongs to another namespace. `namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "actor",
- "code": "not_found",
- "message": "The actor does not exist or was destroyed."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure, including an `actor_id` that is not a valid Rivet ID.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
+## Responses
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
+### 200
```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
+{}
```
## Related
diff --git a/vendor/api/docs/content/actors/sleep.mdx b/vendor/api/docs/content/actors/sleep.mdx
index b3adae65..f2ded065 100644
--- a/vendor/api/docs/content/actors/sleep.mdx
+++ b/vendor/api/docs/content/actors/sleep.mdx
@@ -5,8 +5,6 @@ description: "Put an actor to sleep. The actor runs its shutdown sequence and pe
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-The request body is ignored. A namespace token needs a grant on `actor` with `update`.
-
```http
POST https://rivet.example.com/actors/{actor_id}/sleep
```
@@ -17,7 +15,9 @@ POST https://rivet.example.com/actors/{actor_id}/sleep
```bash cURL
curl -X POST "https://rivet.example.com/actors/$ACTOR_ID/sleep?namespace=$RIVET_NAMESPACE" \
- -H "Authorization: Bearer $RIVET_TOKEN"
+ -H "Authorization: Bearer $RIVET_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{}'
```
@@ -26,7 +26,7 @@ curl -X POST "https://rivet.example.com/actors/$ACTOR_ID/sleep?namespace=$RIVET_
## Authentication
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Path Parameters
@@ -38,130 +38,20 @@ Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/
| Name | Type | Required | Description |
| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
-
-## Responses
-
-### 200
-
-The sleep was accepted. The response body is an empty object.
-
-```json
-{}
-```
-
-### 400
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
-`envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
+## Request Body
-### 403
+Content type: `application/json`.
-`auth.insufficient_permissions`: the token's grants do not cover this request. For a namespace token this is also returned when the actor does not exist.
+Send an empty JSON object: `{}`.
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`actor.not_found`: the actor does not exist or belongs to another namespace. `namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "actor",
- "code": "not_found",
- "message": "The actor does not exist or was destroyed."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure, including an `actor_id` that is not a valid Rivet ID.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
+## Responses
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
+### 200
```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
+{}
```
## Related
diff --git a/vendor/api/docs/content/control-plane/datacenters.mdx b/vendor/api/docs/content/control-plane/datacenters.mdx
index 87f64dfa..1a186189 100644
--- a/vendor/api/docs/content/control-plane/datacenters.mdx
+++ b/vendor/api/docs/content/control-plane/datacenters.mdx
@@ -5,8 +5,6 @@ description: "List the datacenters configured for the control plane."
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-A namespace token needs a grant on `datacenter` with `list`.
-
```http
GET https://rivet.example.com/datacenters
```
@@ -26,101 +24,34 @@ curl "https://rivet.example.com/datacenters" \
## Authentication
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Responses
### 200
-Configured datacenters.
+Configured datacenters and an empty pagination cursor.
| Field | Type | Description |
| --- | --- | --- |
| `datacenters` | `object[]` | |
-| `datacenters[].name` | `string` | Datacenter name. |
+| `datacenters[].label` | `integer` | |
+| `datacenters[].name` | `string` | |
+| `datacenters[].url` | `string` | |
+| `pagination` | `object` | |
+| `pagination.cursor` | `string \| null` | Cursor for the next page, or `null` when there are no more results. |
```json
{
"datacenters": [
{
- "name": "default"
+ "label": 0,
+ "name": "my-actor",
+ "url": ""
}
- ]
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure. Details are only logged on the server.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
+ ],
+ "pagination": {
+ "cursor": null
+ }
}
```
diff --git a/vendor/api/docs/content/control-plane/metadata.mdx b/vendor/api/docs/content/control-plane/metadata.mdx
index ff17f1d3..fd91ec89 100644
--- a/vendor/api/docs/content/control-plane/metadata.mdx
+++ b/vendor/api/docs/content/control-plane/metadata.mdx
@@ -1,11 +1,11 @@
---
title: "Get Metadata"
-description: "Get the runtime and version of the control plane."
+description: "Get build, runtime, compiler, and fleet protocol metadata for the control plane."
---
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-A request made with the admin token also receives `actorNames`.
+The protocol versions are the versions agreed on by the fleet, which can differ from the versions compiled into the responding node.
```http
GET https://rivet.example.com/metadata
@@ -31,39 +31,32 @@ No authentication is required.
### 200
-Runtime and version metadata.
+Build and protocol metadata for the responding node and its fleet.
| Field | Type | Description |
| --- | --- | --- |
-| `runtime` | `"engine"` | Always `engine`. |
-| `version` | `string` | Version of the control plane. |
-| `envoyProtocolVersion` | `integer` | Version of the protocol nodes use to connect to the control plane. |
-| `actorNames` | `object` | Actor names the default namespace's connected nodes accept. Only present for requests made with the admin token. |
+| `build_timestamp` | `string` | |
+| `cargo_profile` | `string` | |
+| `cargo_target` | `string` | |
+| `envoy_protocol_version` | `integer` | |
+| `epoxy_protocol_version` | `integer` | |
+| `git_sha` | `string` | |
+| `runtime` | `string` | |
+| `rustc_host` | `string` | |
+| `rustc_version` | `string` | |
+| `version` | `string` | |
```json
{
- "runtime": "engine",
- "version": "",
- "envoyProtocolVersion": 0,
- "actorNames": {}
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure. Details are only logged on the server.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
+ "build_timestamp": "",
+ "cargo_profile": "",
+ "cargo_target": "",
+ "envoy_protocol_version": 0,
+ "epoxy_protocol_version": 0,
+ "git_sha": "",
+ "runtime": "",
+ "rustc_host": "",
+ "rustc_version": "",
+ "version": ""
}
```
diff --git a/vendor/api/docs/content/index.mdx b/vendor/api/docs/content/index.mdx
index 59f7975c..40529711 100644
--- a/vendor/api/docs/content/index.mdx
+++ b/vendor/api/docs/content/index.mdx
@@ -10,7 +10,7 @@ Everything the RivetKit client does happens over HTTP. This reference documents
https://rivet.example.com
```
-Self-hosted deployments use the endpoint from your `RIVET_ENDPOINT` URL instead. See [Endpoints](/docs/connect).
+Self-hosted deployments use the endpoint from your `RIVET_ENDPOINT` URL instead. See [Endpoints](/docs/endpoints).
## Two Surfaces
diff --git a/vendor/api/docs/content/namespaces/create.mdx b/vendor/api/docs/content/namespaces/create.mdx
index 79fb7779..42ae148e 100644
--- a/vendor/api/docs/content/namespaces/create.mdx
+++ b/vendor/api/docs/content/namespaces/create.mdx
@@ -1,6 +1,6 @@
---
title: "Create Namespace"
-description: "Create a namespace with a unique name."
+description: "Create a namespace with a unique name and a display name."
---
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
@@ -18,7 +18,8 @@ curl -X POST "https://rivet.example.com/namespaces" \
-H "Authorization: Bearer $RIVET_TOKEN" \
-H "Content-Type: application/json" \
-d '{
- "name": "my-app"
+ "name": "my-app",
+ "display_name": "My App"
}'
```
@@ -28,7 +29,7 @@ curl -X POST "https://rivet.example.com/namespaces" \
## Authentication
-Requires the admin token, sent as a bearer token in the `Authorization` header. Namespace tokens are rejected. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Request Body
@@ -36,7 +37,8 @@ Content type: `application/json`.
| Field | Type | Required | Description |
| --- | --- | --- | --- |
-| `name` | `string` | Yes | Unique name of the namespace. A DNS label of 1 to 63 lowercase letters, digits and hyphens. |
+| `display_name` | `string` | Yes | Human-readable name for the namespace. |
+| `name` | `string` | Yes | Unique name used to identify the namespace. |
## Responses
@@ -46,141 +48,19 @@ The newly created namespace.
| Field | Type | Description |
| --- | --- | --- |
-| `namespace` | `object` | The created namespace. |
-| `namespace.name` | `string` | Namespace name. |
-| `namespace.create_ts` | `integer` | When the namespace was created, in Unix milliseconds. |
+| `namespace` | `object` | Name of the namespace to operate in. |
+| `namespace.create_ts` | `integer` | |
+| `namespace.display_name` | `string` | |
+| `namespace.name` | `string` | |
+| `namespace.namespace_id` | `string` | |
```json
{
"namespace": {
- "name": "my-namespace",
- "create_ts": 1700000000000
+ "create_ts": 1700000000000,
+ "display_name": "",
+ "name": "my-actor",
+ "namespace_id": "00000000-0000-0000-0000-000000000000"
}
}
```
-
-### 400
-
-`envoy.invalid_namespace_name`: `name` is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request. Namespace management is only available to the admin token.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 409
-
-`namespace.name_not_unique`: a namespace with this name already exists.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "namespace",
- "code": "name_not_unique",
- "message": "A namespace with this name already exists."
-}
-```
-
-### 415
-
-The request is missing the `Content-Type: application/json` header. Returned as plain text.
-
-Content type: `text/plain`.
-
-### 422
-
-The JSON body does not match the request schema, for example a missing required field, a wrong type or an unknown field where unknown fields are rejected. Returned as plain text.
-
-Content type: `text/plain`.
-
-### 500
-
-`core.internal_error`: an unexpected failure. Details are only logged on the server.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
-```
diff --git a/vendor/api/docs/content/namespaces/list.mdx b/vendor/api/docs/content/namespaces/list.mdx
index 5593a1bb..6e8ac9e9 100644
--- a/vendor/api/docs/content/namespaces/list.mdx
+++ b/vendor/api/docs/content/namespaces/list.mdx
@@ -1,11 +1,11 @@
---
title: "List Namespaces"
-description: "List namespaces in name order, or look up one namespace by name. Results are paginated."
+description: "List namespaces, optionally filtered by name or ID. Results are paginated."
---
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-`name` returns zero or one namespace and ignores `limit` and `cursor`. Any other query parameter, including `namespace`, is rejected.
+Use `namespace_id` for multiple IDs. `namespace_ids` is deprecated.
```http
GET https://rivet.example.com/namespaces
@@ -26,15 +26,17 @@ curl "https://rivet.example.com/namespaces" \
## Authentication
-Requires the admin token, sent as a bearer token in the `Authorization` header. Namespace tokens are rejected. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Query Parameters
| Name | Type | Required | Description |
| --- | --- | --- | --- |
-| `name` | `string` | No | Only return the namespace with this name. |
+| `limit` | `integer` | No | Maximum number of results to return. |
| `cursor` | `string` | No | Pagination cursor. Pass the `pagination.cursor` value from the previous response to fetch the next page. |
-| `limit` | `integer` | No | Maximum number of results to return, from 1 to 100. Defaults to 100. |
+| `name` | `string` | No | Only return namespaces with this name. |
+| `namespace_ids` | `string` | No | Deprecated. Use `namespace_id` instead. |
+| `namespace_id` | `string[]` | No | Only return namespaces with these IDs. Repeat the parameter for multiple IDs. |
## Responses
@@ -45,8 +47,10 @@ Matching namespaces and a cursor for the next page.
| Field | Type | Description |
| --- | --- | --- |
| `namespaces` | `object[]` | |
-| `namespaces[].name` | `string` | Namespace name. |
-| `namespaces[].create_ts` | `integer` | When the namespace was created, in Unix milliseconds. |
+| `namespaces[].create_ts` | `integer` | |
+| `namespaces[].display_name` | `string` | |
+| `namespaces[].name` | `string` | |
+| `namespaces[].namespace_id` | `string` | |
| `pagination` | `object` | |
| `pagination.cursor` | `string \| null` | Cursor for the next page, or `null` when there are no more results. |
@@ -54,8 +58,10 @@ Matching namespaces and a cursor for the next page.
{
"namespaces": [
{
- "name": "my-namespace",
- "create_ts": 1700000000000
+ "create_ts": 1700000000000,
+ "display_name": "",
+ "name": "my-actor",
+ "namespace_id": "00000000-0000-0000-0000-000000000000"
}
],
"pagination": {
@@ -63,98 +69,3 @@ Matching namespaces and a cursor for the next page.
}
}
```
-
-### 400
-
-`namespace.invalid`: `limit` is outside 1 to 100. `envoy.invalid_namespace_name`: `name` or `cursor` is not a valid namespace name. A query string with any other parameter, or a `limit` that is not a non-negative integer, is rejected with a plain-text 400.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "namespace",
- "code": "invalid",
- "message": "Namespace list limit must be between 1 and 100."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request. Namespace management is only available to the admin token.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure. Details are only logged on the server.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
-```
diff --git a/vendor/api/docs/content/pools/delete.mdx b/vendor/api/docs/content/pools/delete.mdx
deleted file mode 100644
index a50f177d..00000000
--- a/vendor/api/docs/content/pools/delete.mdx
+++ /dev/null
@@ -1,182 +0,0 @@
----
-title: "Delete Node Pool"
-description: "Delete a node pool's configuration."
----
-
-{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-
-Fails with `pool.nodes_connected` while any node of the pool is connected. A namespace token needs a grant on `pool` with `delete`.
-
-```http
-DELETE https://rivet.example.com/pools/{pool}
-```
-
-## Examples
-
-
-
-```bash cURL
-curl -X DELETE "https://rivet.example.com/pools/default?namespace=$RIVET_NAMESPACE" \
- -H "Authorization: Bearer $RIVET_TOKEN"
-```
-
-
-
-## Authentication
-
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
-
-## Path Parameters
-
-| Name | Type | Required | Description |
-| --- | --- | --- | --- |
-| `pool` | `string` | Yes | Name of the node pool. A DNS label of 1 to 63 lowercase letters, digits and hyphens. |
-
-## Query Parameters
-
-| Name | Type | Required | Description |
-| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
-
-## Responses
-
-### 200
-
-The node pool was deleted. The response body is an empty object.
-
-```json
-{}
-```
-
-### 400
-
-`envoy.invalid_pool_name`: the pool name is not valid. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "envoy",
- "code": "invalid_pool_name",
- "message": "Pool name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`pool.not_found`: the node pool does not exist. `namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "pool",
- "code": "not_found",
- "message": "The node pool does not exist."
-}
-```
-
-### 409
-
-`pool.nodes_connected`: the node pool still has connected nodes.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "pool",
- "code": "nodes_connected",
- "message": "The node pool still has connected nodes."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure. Details are only logged on the server.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
-```
diff --git a/vendor/api/docs/content/pools/get.mdx b/vendor/api/docs/content/pools/get.mdx
deleted file mode 100644
index 84b6b555..00000000
--- a/vendor/api/docs/content/pools/get.mdx
+++ /dev/null
@@ -1,182 +0,0 @@
----
-title: "Get Node Pool"
-description: "Get a node pool's configuration."
----
-
-{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-
-A namespace token needs a grant on `pool` with `read`.
-
-```http
-GET https://rivet.example.com/pools/{pool}
-```
-
-## Examples
-
-
-
-```bash cURL
-curl "https://rivet.example.com/pools/default?namespace=$RIVET_NAMESPACE" \
- -H "Authorization: Bearer $RIVET_TOKEN"
-```
-
-
-
-## Authentication
-
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
-
-## Path Parameters
-
-| Name | Type | Required | Description |
-| --- | --- | --- | --- |
-| `pool` | `string` | Yes | Name of the node pool. A DNS label of 1 to 63 lowercase letters, digits and hyphens. |
-
-## Query Parameters
-
-| Name | Type | Required | Description |
-| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
-
-## Responses
-
-### 200
-
-The node pool.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `pool` | `object` | |
-| `pool.name` | `string` | Name of the node pool. |
-| `pool.drain_on_version_upgrade` | `boolean` | Drain nodes running an older version when a newer version connects. |
-| `pool.actor_eviction_delay` | `integer` | Seconds to wait before evicting actors from a draining node. |
-| `pool.actor_eviction_period` | `integer` | Seconds over which actors are evicted from a draining node. |
-| `pool.actor_eviction_rate` | `number` | Rate at which actors are evicted from a draining node. Must be finite and greater than 0. |
-| `pool.metadata` | `any` | Opaque JSON stored with the pool, or `null` when unset. |
-
-```json
-{
- "pool": {
- "name": "default",
- "drain_on_version_upgrade": false,
- "actor_eviction_delay": 0,
- "actor_eviction_period": 0,
- "actor_eviction_rate": 0,
- "metadata": null
- }
-}
-```
-
-### 400
-
-`envoy.invalid_pool_name`: the pool name is not valid. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "envoy",
- "code": "invalid_pool_name",
- "message": "Pool name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`pool.not_found`: the node pool does not exist. `namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "pool",
- "code": "not_found",
- "message": "The node pool does not exist."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure. Details are only logged on the server.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
-```
diff --git a/vendor/api/docs/content/pools/list-nodes.mdx b/vendor/api/docs/content/pools/list-nodes.mdx
deleted file mode 100644
index 547810a8..00000000
--- a/vendor/api/docs/content/pools/list-nodes.mdx
+++ /dev/null
@@ -1,195 +0,0 @@
----
-title: "List Nodes"
-description: "List the live nodes of a node pool in node key order. Results are paginated."
----
-
-{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-
-A node is listed while its heartbeat is recent enough for it to receive actors. A page can hold fewer than `limit` nodes while `pagination.cursor` is still set. A namespace token needs a grant on `node` with `list`.
-
-```http
-GET https://rivet.example.com/pools/{pool}/nodes
-```
-
-## Examples
-
-
-
-```bash cURL
-curl "https://rivet.example.com/pools/default/nodes?namespace=$RIVET_NAMESPACE" \
- -H "Authorization: Bearer $RIVET_TOKEN"
-```
-
-
-
-## Authentication
-
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
-
-## Path Parameters
-
-| Name | Type | Required | Description |
-| --- | --- | --- | --- |
-| `pool` | `string` | Yes | Name of the node pool. A DNS label of 1 to 63 lowercase letters, digits and hyphens. |
-
-## Query Parameters
-
-| Name | Type | Required | Description |
-| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
-| `limit` | `integer` | No | Maximum number of results to return, from 1 to 100. Defaults to 100. |
-| `cursor` | `string` | No | Pagination cursor. Pass the `pagination.cursor` value from the previous response to fetch the next page. |
-
-## Responses
-
-### 200
-
-A page of live nodes and a cursor for the next page.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `nodes` | `object[]` | |
-| `nodes[].key` | `string` | Node key, unique within the pool. |
-| `nodes[].pool` | `string` | Name of the node pool. |
-| `nodes[].namespace` | `string` | Name of the namespace. |
-| `nodes[].datacenter` | `string` | Datacenter name. |
-| `nodes[].create_ts` | `integer` | When the node connected, in Unix milliseconds. |
-| `nodes[].last_ping_ts` | `integer` | When the node last sent a heartbeat, in Unix milliseconds. |
-| `nodes[].connected` | `boolean` | Whether the node is connected. |
-| `nodes[].stopping` | `boolean` | Whether the node is shutting down. |
-| `pagination` | `object` | |
-| `pagination.cursor` | `string \| null` | Cursor for the next page, or `null` when there are no more results. |
-
-```json
-{
- "nodes": [
- {
- "key": "node-1",
- "pool": "default",
- "namespace": "my-namespace",
- "datacenter": "default",
- "create_ts": 1700000000000,
- "last_ping_ts": 1700000000000,
- "connected": false,
- "stopping": false
- }
- ],
- "pagination": {
- "cursor": null
- }
-}
-```
-
-### 400
-
-`actor.invalid_limit`: `limit` is not an integer from 1 to 100. `actor.invalid_cursor`: `cursor` is malformed. `envoy.invalid_pool_name`: the pool name is not valid. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "actor",
- "code": "invalid_limit",
- "message": "The actor listing limit must be an integer from 1 to 100."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure. Details are only logged on the server.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
-```
diff --git a/vendor/api/docs/content/pools/list.mdx b/vendor/api/docs/content/pools/list.mdx
deleted file mode 100644
index 40e8dd11..00000000
--- a/vendor/api/docs/content/pools/list.mdx
+++ /dev/null
@@ -1,185 +0,0 @@
----
-title: "List Node Pools"
-description: "List the node pools configured in a namespace, ordered by name. Results are paginated."
----
-
-{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-
-A pool is listed once it is configured, whether or not any node is connected. A namespace token needs a grant on `pool` with `list`.
-
-```http
-GET https://rivet.example.com/pools
-```
-
-## Examples
-
-
-
-```bash cURL
-curl "https://rivet.example.com/pools?namespace=$RIVET_NAMESPACE" \
- -H "Authorization: Bearer $RIVET_TOKEN"
-```
-
-
-
-## Authentication
-
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
-
-## Query Parameters
-
-| Name | Type | Required | Description |
-| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
-| `limit` | `integer` | No | Maximum number of results to return, from 1 to 100. Defaults to 100. |
-| `cursor` | `string` | No | Pagination cursor. Pass the `pagination.cursor` value from the previous response to fetch the next page. |
-
-## Responses
-
-### 200
-
-A page of node pools and a cursor for the next page.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `pagination` | `object` | |
-| `pagination.cursor` | `string \| null` | Cursor for the next page, or `null` when there are no more results. |
-| `pools` | `object[]` | |
-| `pools[].name` | `string` | Name of the node pool. |
-| `pools[].drain_on_version_upgrade` | `boolean` | Drain nodes running an older version when a newer version connects. |
-| `pools[].actor_eviction_delay` | `integer` | Seconds to wait before evicting actors from a draining node. |
-| `pools[].actor_eviction_period` | `integer` | Seconds over which actors are evicted from a draining node. |
-| `pools[].actor_eviction_rate` | `number` | Rate at which actors are evicted from a draining node. Must be finite and greater than 0. |
-| `pools[].metadata` | `any` | Opaque JSON stored with the pool, or `null` when unset. |
-
-```json
-{
- "pagination": {
- "cursor": null
- },
- "pools": [
- {
- "name": "default",
- "drain_on_version_upgrade": false,
- "actor_eviction_delay": 0,
- "actor_eviction_period": 0,
- "actor_eviction_rate": 0,
- "metadata": null
- }
- ]
-}
-```
-
-### 400
-
-`actor.invalid_limit`: `limit` is not an integer from 1 to 100. `envoy.invalid_pool_name`: `cursor` is not a valid pool name. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "actor",
- "code": "invalid_limit",
- "message": "The actor listing limit must be an integer from 1 to 100."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure. Details are only logged on the server.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
-```
diff --git a/vendor/api/docs/content/pools/upsert.mdx b/vendor/api/docs/content/pools/upsert.mdx
deleted file mode 100644
index f2c35909..00000000
--- a/vendor/api/docs/content/pools/upsert.mdx
+++ /dev/null
@@ -1,207 +0,0 @@
----
-title: "Upsert Node Pool"
-description: "Create or replace a node pool's configuration."
----
-
-{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-
-Every field is optional and omitted fields take their defaults, so a request replaces the whole configuration. Unknown fields are rejected. Serverless pools are not supported. Nodes pick up the new configuration on their next connection. A namespace token needs a grant on `pool` with `update`.
-
-```http
-PUT https://rivet.example.com/pools/{pool}
-```
-
-## Examples
-
-
-
-```bash cURL
-curl -X PUT "https://rivet.example.com/pools/default?namespace=$RIVET_NAMESPACE" \
- -H "Authorization: Bearer $RIVET_TOKEN" \
- -H "Content-Type: application/json" \
- -d '{
- "drain_on_version_upgrade": true,
- "actor_eviction_delay": 0,
- "actor_eviction_period": 0,
- "actor_eviction_rate": 1
- }'
-```
-
-
-
-## Authentication
-
-Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication).
-
-## Path Parameters
-
-| Name | Type | Required | Description |
-| --- | --- | --- | --- |
-| `pool` | `string` | Yes | Name of the node pool. A DNS label of 1 to 63 lowercase letters, digits and hyphens. |
-
-## Query Parameters
-
-| Name | Type | Required | Description |
-| --- | --- | --- | --- |
-| `namespace` | `string` | No | Name of the namespace to operate in. Defaults to `default`. |
-
-## Request Body
-
-Content type: `application/json`.
-
-| Field | Type | Required | Description |
-| --- | --- | --- | --- |
-| `drain_on_version_upgrade` | `boolean` | No | Drain nodes running an older version when a newer version connects. |
-| `actor_eviction_delay` | `integer` | No | Seconds to wait before evicting actors from a draining node. |
-| `actor_eviction_period` | `integer` | No | Seconds over which actors are evicted from a draining node. |
-| `actor_eviction_rate` | `number` | No | Rate at which actors are evicted from a draining node. Must be finite and greater than 0. |
-| `metadata` | `any` | No | Opaque JSON stored with the pool, at most 16 KiB when serialized. |
-
-## Responses
-
-### 200
-
-The stored node pool.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `pool` | `object` | |
-| `pool.name` | `string` | Name of the node pool. |
-| `pool.drain_on_version_upgrade` | `boolean` | Drain nodes running an older version when a newer version connects. |
-| `pool.actor_eviction_delay` | `integer` | Seconds to wait before evicting actors from a draining node. |
-| `pool.actor_eviction_period` | `integer` | Seconds over which actors are evicted from a draining node. |
-| `pool.actor_eviction_rate` | `number` | Rate at which actors are evicted from a draining node. Must be finite and greater than 0. |
-| `pool.metadata` | `any` | Opaque JSON stored with the pool, or `null` when unset. |
-
-```json
-{
- "pool": {
- "name": "default",
- "drain_on_version_upgrade": false,
- "actor_eviction_delay": 0,
- "actor_eviction_period": 0,
- "actor_eviction_rate": 0,
- "metadata": null
- }
-}
-```
-
-### 400
-
-`pool.invalid`: the body has an unknown field or a value out of range. `pool.serverless_unsupported`: the body sets `serverless` or `kind: "serverless"`. `envoy.invalid_pool_name`: the pool name is not valid. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens. A body that is not valid JSON is rejected with a plain-text 400.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "pool",
- "code": "invalid",
- "message": "Node pool configuration is invalid."
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.insufficient_permissions`: the token's grants do not cover this request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
-}
-```
-
-### 404
-
-`namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
-}
-```
-
-### 415
-
-The request is missing the `Content-Type: application/json` header. Returned as plain text.
-
-Content type: `text/plain`.
-
-### 500
-
-`core.internal_error`: an unexpected failure. Details are only logged on the server.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
-}
-```
diff --git a/vendor/api/docs/content/tokens/create.mdx b/vendor/api/docs/content/tokens/create.mdx
index efc7a752..4e1497d3 100644
--- a/vendor/api/docs/content/tokens/create.mdx
+++ b/vendor/api/docs/content/tokens/create.mdx
@@ -5,7 +5,7 @@ description: "Issue a scoped token. Use this to mint short-lived tokens that gra
{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
-Each grant names a resource type, a target (`"any"` or a specific `{ "id": ... }`), and the operations it allows. A token carries 1 to 32 grants with 1 to 5 operations each. The RivetKit client wraps this as `handle.issueToken()`.
+Each grant names a resource type, a target (`"any"` or a specific `{ "id": ... }`), and the operations it allows. The RivetKit client wraps this as `handle.issueToken()`.
```http
POST https://rivet.example.com/auth/tokens
@@ -27,7 +27,7 @@ curl -X POST "https://rivet.example.com/auth/tokens" \
{
"resource": "actor_gateway",
"target": {
- "id": "d97pbq1nyqxw1w5qdwz0iirbqiblh2"
+ "id": "00000000-0000-0000-0000-000000000000"
},
"operations": [
"read"
@@ -43,7 +43,7 @@ curl -X POST "https://rivet.example.com/auth/tokens" \
## Authentication
-Requires the admin token, sent as a bearer token in the `Authorization` header. Namespace tokens are rejected. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Request Body
@@ -51,156 +51,28 @@ Content type: `application/json`.
| Field | Type | Required | Description |
| --- | --- | --- | --- |
-| `namespace` | `string` | Yes | Namespace the token is valid in. It must exist. |
-| `duration` | `integer \| null` | No | Lifetime in seconds, from 1 to the deployment's maximum. Omit for the default lifetime. |
-| `subject` | `string \| null` | No | Free-form subject to attach to the token, such as a user ID. At most 256 UTF-8 bytes. |
+| `duration` | `integer \| null` | No | Lifetime in seconds. Omit for the default lifetime. |
| `grants` | `object[]` | Yes | Permissions the token carries. |
-| `grants[].resource` | `"namespace" \| "actor" \| "node" \| "pool" \| "datacenter" \| "actor_gateway" \| "actor_kv"` | Yes | Resource type the grant applies to. |
-| `grants[].target` | `"any" \| object` | Yes | `"any"` for every resource of this type, or `{ "id": "..." }` for one resource. |
| `grants[].operations` | `("read" \| "update" \| "list" \| "create" \| "delete")[]` | Yes | Operations the token may perform on the target. |
+| `grants[].resource` | `"namespace" \| "actor" \| "runner" \| "runner_config" \| "datacenter" \| "actor_gateway" \| "actor_kv"` | Yes | Resource type the grant applies to. |
+| `grants[].target` | `"any" \| object` | Yes | `"any"` for every resource of this type, or `{ "id": "..." }` for one resource. |
+| `namespace` | `string` | Yes | Namespace the token is valid in. |
+| `subject` | `string \| null` | No | Free-form subject to attach to the token, such as a user ID. |
## Responses
### 200
-The issued token. The response carries `Cache-Control: no-store`.
-
| Field | Type | Description |
| --- | --- | --- |
-| `token` | `string` | The issued token. Treat it as a secret. |
-| `issued_ts` | `integer` | When the token was issued, in Unix milliseconds. |
| `expires_ts` | `integer` | When the token expires, in Unix milliseconds. |
+| `issued_ts` | `integer` | When the token was issued, in Unix milliseconds. |
+| `token` | `string` | The issued token. Treat it as a secret. |
```json
{
- "token": "eyJ...",
+ "expires_ts": 1700000000000,
"issued_ts": 1700000000000,
- "expires_ts": 1700000000000
-}
-```
-
-### 400
-
-`validation.invalid_input`: the subject exceeds 256 UTF-8 bytes, the duration is outside the allowed range, or the grant set is invalid (empty, more than 32 grants, a grant without operations or with more than 5, or a `token`, `acl` or `jwt` resource). `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "validation",
- "code": "invalid_input",
- "message": "subject exceeds 256 UTF-8 bytes"
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request does not carry the admin token.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 403
-
-`auth.issuance_disabled`: JWT issuance is not enabled for this deployment.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "issuance_disabled",
- "message": "JWT issuance is not enabled for this deployment."
-}
-```
-
-### 404
-
-`namespace.not_found`: the namespace does not exist.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
-}
-```
-
-### 415
-
-The request is missing the `Content-Type: application/json` header. Returned as plain text.
-
-Content type: `text/plain`.
-
-### 422
-
-The JSON body does not match the request schema, for example a missing required field, a wrong type or an unknown field where unknown fields are rejected. Returned as plain text.
-
-Content type: `text/plain`.
-
-### 500
-
-`core.internal_error`: an unexpected failure, including a deployment without authentication configured.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.issuance_unavailable`: the signing service is temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "issuance_unavailable",
- "message": "The server could not issue an authentication token because the signing service is temporarily unavailable. Retry the request."
+ "token": ""
}
```
diff --git a/vendor/api/docs/content/tokens/inspect.mdx b/vendor/api/docs/content/tokens/inspect.mdx
index 8500a974..f249d758 100644
--- a/vendor/api/docs/content/tokens/inspect.mdx
+++ b/vendor/api/docs/content/tokens/inspect.mdx
@@ -24,96 +24,37 @@ curl "https://rivet.example.com/auth/tokens/inspect" \
## Authentication
-Send the namespace token to inspect as a bearer token in the `Authorization` header. The admin token is rejected. See [Authentication](/docs/api/authentication).
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
## Responses
### 200
-The token's claims. The response carries `Cache-Control: no-store`.
-
| Field | Type | Description |
| --- | --- | --- |
-| `namespace` | `string` | Namespace the token is scoped to. |
-| `subject` | `string \| null` | Subject attached to the token, or `null`. |
+| `expires_ts` | `integer` | When the token expires, in Unix milliseconds. |
| `grants` | `object[]` | Permissions the token carries. |
-| `grants[].resource` | `"namespace" \| "actor" \| "node" \| "pool" \| "datacenter" \| "actor_gateway" \| "actor_kv"` | Resource type the grant applies to. |
-| `grants[].target` | `"any" \| object` | `"any"` for every resource of this type, or `{ "id": "..." }` for one resource. |
| `grants[].operations` | `("read" \| "update" \| "list" \| "create" \| "delete")[]` | Operations the token may perform on the target. |
+| `grants[].resource` | `"namespace" \| "actor" \| "runner" \| "runner_config" \| "datacenter" \| "actor_gateway" \| "actor_kv"` | Resource type the grant applies to. |
+| `grants[].target` | `"any" \| object` | `"any"` for every resource of this type, or `{ "id": "..." }` for one resource. |
| `issued_ts` | `integer` | When the token was issued, in Unix milliseconds. |
-| `expires_ts` | `integer` | When the token expires, in Unix milliseconds. |
+| `namespace_id` | `string` | ID of the namespace the token is scoped to. |
+| `subject` | `string \| null` | Subject attached to the token, if any. |
```json
{
- "namespace": "my-namespace",
- "subject": null,
+ "expires_ts": 1700000000000,
"grants": [
{
- "resource": "namespace",
- "target": "any",
"operations": [
"read"
- ]
+ ],
+ "resource": "namespace",
+ "target": "any"
}
],
"issued_ts": 1700000000000,
- "expires_ts": 1700000000000
-}
-```
-
-### 401
-
-`auth.invalid_token`: the request carries no token, the token is not valid, or it is the admin token rather than a JWT. `auth.token_expired`: the token has expired.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
-}
-```
-
-### 500
-
-`core.internal_error`: an unexpected failure. Details are only logged on the server.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
-}
-```
-
-### 503
-
-`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.
-
-| Field | Type | Description |
-| --- | --- | --- |
-| `group` | `string` | Error group, for example `actor`. |
-| `code` | `string` | Error code within the group, for example `not_found`. |
-| `message` | `string` | Human-readable error message. |
-| `metadata` | `any` | Extra details. Only present on some errors raised while authenticating or authorizing the request. |
-
-```json
-{
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
+ "namespace_id": "00000000-0000-0000-0000-000000000000",
+ "subject": null
}
```
diff --git a/vendor/api/docs/content/worker-connect.mdx b/vendor/api/docs/content/worker-connect.mdx
index eff92982..75aea676 100644
--- a/vendor/api/docs/content/worker-connect.mdx
+++ b/vendor/api/docs/content/worker-connect.mdx
@@ -30,4 +30,4 @@ Messages are binary [BARE](https://baremessages.org/) frames. The schema, versio
- [Rust protocol types](https://github.com/rivet-dev/rivet/tree/main/engine/sdks/rust/envoy-protocol) generated from the schemas
- [Rust client](https://github.com/rivet-dev/rivet/tree/main/engine/sdks/rust/envoy-client), the transport rivetkit-core uses to hold this connection
-To see which nodes are connected, use [List Nodes](/docs/api/pools/list-nodes).
+To see which nodes are connected, use [List Nodes](/docs/api/workers/list).
diff --git a/vendor/api/docs/content/workers/configs-delete.mdx b/vendor/api/docs/content/workers/configs-delete.mdx
new file mode 100644
index 00000000..71b64f33
--- /dev/null
+++ b/vendor/api/docs/content/workers/configs-delete.mdx
@@ -0,0 +1,51 @@
+---
+title: "Delete Worker Config"
+description: "Delete a worker configuration from every configured datacenter."
+---
+
+{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
+
+A failure can occur after the configuration has already been deleted from some datacenters.
+
+```http
+DELETE https://rivet.example.com/runner-configs/{runner_name}
+```
+
+## Examples
+
+
+
+```bash cURL
+curl -X DELETE "https://rivet.example.com/runner-configs/$RUNNER_NAME?namespace=$RIVET_NAMESPACE" \
+ -H "Authorization: Bearer $RIVET_TOKEN"
+```
+
+
+
+
+
+## Authentication
+
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
+
+## Path Parameters
+
+| Name | Type | Required | Description |
+| --- | --- | --- | --- |
+| `runner_name` | `string` | Yes | Name of the worker pool whose configuration will be deleted. |
+
+## Query Parameters
+
+| Name | Type | Required | Description |
+| --- | --- | --- | --- |
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
+
+## Responses
+
+### 200
+
+The configuration was deleted.
+
+```json
+{}
+```
diff --git a/vendor/api/docs/content/workers/configs-list.mdx b/vendor/api/docs/content/workers/configs-list.mdx
new file mode 100644
index 00000000..2c48b1ac
--- /dev/null
+++ b/vendor/api/docs/content/workers/configs-list.mdx
@@ -0,0 +1,61 @@
+---
+title: "List Worker Configs"
+description: "List worker configurations in a namespace, grouped by worker name and datacenter."
+---
+
+{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
+
+Filter by `variant` to return only `normal` or `serverless` configurations. Use `runner_name` for multiple names because `runner_names` is deprecated.
+
+```http
+GET https://rivet.example.com/runner-configs
+```
+
+## Examples
+
+
+
+```bash cURL
+curl "https://rivet.example.com/runner-configs?namespace=$RIVET_NAMESPACE" \
+ -H "Authorization: Bearer $RIVET_TOKEN"
+```
+
+
+
+
+
+## Authentication
+
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
+
+## Query Parameters
+
+| Name | Type | Required | Description |
+| --- | --- | --- | --- |
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
+| `limit` | `integer` | No | Maximum number of results to return. |
+| `cursor` | `string` | No | Pagination cursor. Pass the `pagination.cursor` value from the previous response to fetch the next page. |
+| `variant` | `string` | No | Only return configurations with this variant. One of `"serverless"`, `"normal"`. |
+| `runner_names` | `string` | No | Deprecated. Use `runner_name` instead. |
+| `runner_name` | `string[]` | No | Only return configurations for these worker names. Repeat the parameter for multiple names. |
+
+## Responses
+
+### 200
+
+Worker configurations grouped by worker name and datacenter.
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `pagination` | `object` | |
+| `pagination.cursor` | `string \| null` | Cursor for the next page, or `null` when there are no more results. |
+| `runner_configs` | `object` | |
+
+```json
+{
+ "pagination": {
+ "cursor": null
+ },
+ "runner_configs": {}
+}
+```
diff --git a/vendor/api/docs/content/workers/configs-refresh-metadata.mdx b/vendor/api/docs/content/workers/configs-refresh-metadata.mdx
new file mode 100644
index 00000000..34d7d699
--- /dev/null
+++ b/vendor/api/docs/content/workers/configs-refresh-metadata.mdx
@@ -0,0 +1,59 @@
+---
+title: "Refresh Config Metadata"
+description: "Fetch and store fresh metadata for a serverless worker configuration."
+---
+
+{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
+
+The endpoint refreshes the first serverless configuration it finds across datacenters. It fails when the worker name has no serverless configuration.
+
+```http
+POST https://rivet.example.com/runner-configs/{runner_name}/refresh-metadata
+```
+
+## Examples
+
+
+
+```bash cURL
+curl -X POST "https://rivet.example.com/runner-configs/$RUNNER_NAME/refresh-metadata?namespace=$RIVET_NAMESPACE" \
+ -H "Authorization: Bearer $RIVET_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{}'
+```
+
+
+
+
+
+## Authentication
+
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
+
+## Path Parameters
+
+| Name | Type | Required | Description |
+| --- | --- | --- | --- |
+| `runner_name` | `string` | Yes | Name of the worker pool whose metadata will be refreshed. |
+
+## Query Parameters
+
+| Name | Type | Required | Description |
+| --- | --- | --- | --- |
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
+
+## Request Body
+
+Content type: `application/json`.
+
+Send an empty JSON object: `{}`.
+
+## Responses
+
+### 200
+
+The metadata was refreshed.
+
+```json
+{}
+```
diff --git a/vendor/api/docs/content/workers/configs-upsert.mdx b/vendor/api/docs/content/workers/configs-upsert.mdx
new file mode 100644
index 00000000..952dbd05
--- /dev/null
+++ b/vendor/api/docs/content/workers/configs-upsert.mdx
@@ -0,0 +1,73 @@
+---
+title: "Upsert Worker Config"
+description: "Create or replace a worker configuration in each specified datacenter."
+---
+
+{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
+
+A `normal` configuration controls workers with direct, persistent connections. A `serverless` configuration starts workers through a URL and requires `url` and `request_lifespan`. Configurations for omitted datacenters are deleted. A failure can occur after some datacenters have already changed.
+
+```http
+PUT https://rivet.example.com/runner-configs/{runner_name}
+```
+
+## Examples
+
+
+
+```bash cURL
+curl -X PUT "https://rivet.example.com/runner-configs/$RUNNER_NAME?namespace=$RIVET_NAMESPACE" \
+ -H "Authorization: Bearer $RIVET_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "datacenters": {
+ "local": {
+ "normal": {}
+ }
+ }
+ }'
+```
+
+
+
+
+
+## Authentication
+
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
+
+## Path Parameters
+
+| Name | Type | Required | Description |
+| --- | --- | --- | --- |
+| `runner_name` | `string` | Yes | Name of the worker pool to configure. |
+
+## Query Parameters
+
+| Name | Type | Required | Description |
+| --- | --- | --- | --- |
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
+
+## Request Body
+
+Content type: `application/json`.
+
+| Field | Type | Required | Description |
+| --- | --- | --- | --- |
+| `datacenters` | `object` | Yes | Map of datacenter names to worker configurations. |
+
+## Responses
+
+### 200
+
+Whether the endpoint configuration changed.
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `endpoint_config_changed` | `boolean` | |
+
+```json
+{
+ "endpoint_config_changed": false
+}
+```
diff --git a/vendor/api/docs/content/workers/list.mdx b/vendor/api/docs/content/workers/list.mdx
new file mode 100644
index 00000000..f5d587f5
--- /dev/null
+++ b/vendor/api/docs/content/workers/list.mdx
@@ -0,0 +1,85 @@
+---
+title: "List Workers"
+description: "List workers connected to the control plane in a namespace, optionally filtered by name or key. Results are paginated."
+---
+
+{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
+
+```http
+GET https://rivet.example.com/envoys
+```
+
+## Examples
+
+
+
+```bash cURL
+curl "https://rivet.example.com/envoys?namespace=$RIVET_NAMESPACE" \
+ -H "Authorization: Bearer $RIVET_TOKEN"
+```
+
+
+
+
+
+## Authentication
+
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
+
+## Query Parameters
+
+| Name | Type | Required | Description |
+| --- | --- | --- | --- |
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
+| `name` | `string` | No | Only return workers with this name. |
+| `envoy_key` | `string[]` | No | Only return workers with these keys. Repeat the parameter for multiple keys. |
+| `limit` | `integer` | No | Maximum number of results to return. |
+| `cursor` | `string` | No | Pagination cursor. Pass the `pagination.cursor` value from the previous response to fetch the next page. |
+
+## Responses
+
+### 200
+
+Matching workers and a cursor for the next page.
+
+| Field | Type | Description |
+| --- | --- | --- |
+| `envoys` | `object[]` | |
+| `envoys[].create_ts` | `integer` | |
+| `envoys[].datacenter` | `string` | |
+| `envoys[].envoy_key` | `string` | |
+| `envoys[].last_connected_ts` | `integer \| null` | |
+| `envoys[].last_ping_ts` | `integer` | |
+| `envoys[].last_rtt` | `integer` | |
+| `envoys[].metadata` | `object \| null` | |
+| `envoys[].namespace_id` | `string` | |
+| `envoys[].pool_name` | `string` | |
+| `envoys[].slots` | `integer` | |
+| `envoys[].stop_ts` | `integer \| null` | |
+| `envoys[].version` | `integer` | |
+| `pagination` | `object` | |
+| `pagination.cursor` | `string \| null` | Cursor for the next page, or `null` when there are no more results. |
+
+```json
+{
+ "envoys": [
+ {
+ "create_ts": 1700000000000,
+ "datacenter": "us-east",
+ "envoy_key": "",
+ "last_connected_ts": null,
+ "last_ping_ts": 1700000000000,
+ "last_rtt": 0,
+ "metadata": null,
+ "namespace_id": "00000000-0000-0000-0000-000000000000",
+ "pool_name": "",
+ "slots": 0,
+ "stop_ts": null,
+ "version": 0
+ }
+ ],
+ "pagination": {
+ "cursor": null
+ }
+}
+```
diff --git a/vendor/api/docs/content/workers/serverless-health-check.mdx b/vendor/api/docs/content/workers/serverless-health-check.mdx
new file mode 100644
index 00000000..5a59ff2c
--- /dev/null
+++ b/vendor/api/docs/content/workers/serverless-health-check.mdx
@@ -0,0 +1,63 @@
+---
+title: "Serverless Health Check"
+description: "Probe a serverless URL and return the protocol version reported by its metadata endpoint."
+---
+
+{/* Generated by scripts/docs/gen-api-reference.mjs from engine/artifacts/openapi.json and docs/api/endpoints.json. Do not edit by hand. */}
+
+Metadata fetch failures are returned as a `failure` result in a successful HTTP response.
+
+```http
+POST https://rivet.example.com/runner-configs/serverless-health-check
+```
+
+## Examples
+
+
+
+```bash cURL
+curl -X POST "https://rivet.example.com/runner-configs/serverless-health-check?namespace=$RIVET_NAMESPACE" \
+ -H "Authorization: Bearer $RIVET_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "url": "https://workers.example.com",
+ "headers": {}
+ }'
+```
+
+
+
+
+
+## Authentication
+
+Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication).
+
+## Query Parameters
+
+| Name | Type | Required | Description |
+| --- | --- | --- | --- |
+| `namespace` | `string` | Yes | Name of the namespace to operate in. |
+
+## Request Body
+
+Content type: `application/json`.
+
+| Field | Type | Required | Description |
+| --- | --- | --- | --- |
+| `headers` | `object` | No | Headers to include in the metadata request. |
+| `url` | `string` | Yes | Serverless URL to probe. |
+
+## Responses
+
+### 200
+
+A success result with the reported version or a failure result with error details.
+
+```json
+{
+ "success": {
+ "version": ""
+ }
+}
+```
diff --git a/vendor/api/docs/endpoints.json b/vendor/api/docs/endpoints.json
index f004f2a8..9dbeac42 100644
--- a/vendor/api/docs/endpoints.json
+++ b/vendor/api/docs/endpoints.json
@@ -8,48 +8,47 @@
"curlHeaders": [
"Authorization: Bearer $RIVET_TOKEN"
],
- "description": "Send the admin token, or a namespace token from [Create Token](/docs/api/tokens/create) whose grants cover the request, as a bearer token in the `Authorization` header. The `x-rivet-token` header is also accepted. Routes with a `namespace` query parameter use the `default` namespace when it is omitted. See [Authentication](/docs/api/authentication)."
+ "description": "Send your namespace token as a bearer token in the `Authorization` header. Every control plane request also requires the `namespace` query parameter. See [Authentication](/docs/api/authentication)."
},
"parameters": {
- "namespace": "Name of the namespace to operate in. Defaults to `default`.",
+ "namespace": "Name of the namespace to operate in.",
"actor_id": "ID of the actor.",
- "limit": "Maximum number of results to return, from 1 to 100. Defaults to 100.",
+ "limit": "Maximum number of results to return.",
"cursor": "Pagination cursor. Pass the `pagination.cursor` value from the previous response to fetch the next page.",
"pagination.cursor": "Cursor for the next page, or `null` when there are no more results.",
"actor.actor_id": "Unique ID of the actor.",
"actor.name": "Actor name as registered in your RivetKit registry.",
- "actor.key": "Actor key. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). An empty string for an actor without a key.",
- "actor.runner_name_selector": "Node pool the actor runs in.",
+ "actor.key": "Actor key. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys).",
+ "actor.namespace_id": "ID of the namespace the actor belongs to.",
+ "actor.datacenter": "Datacenter the actor is scheduled in.",
+ "actor.runner_name_selector": "Pool the actor runs on.",
+ "actor.crash_policy": "What happens when the actor crashes.",
"actors[].actor_id": "Unique ID of the actor.",
"actors[].name": "Actor name as registered in your RivetKit registry.",
- "actors[].key": "Actor key. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). An empty string for an actor without a key.",
- "actors[].runner_name_selector": "Node pool the actor runs in.",
+ "actors[].key": "Actor key. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys).",
+ "actors[].namespace_id": "ID of the namespace the actor belongs to.",
+ "actors[].datacenter": "Datacenter the actor is scheduled in.",
+ "actors[].runner_name_selector": "Pool the actor runs on.",
+ "actors[].crash_policy": "What happens when the actor crashes.",
+ "created": "`true` if this request created the actor, `false` if it already existed.",
"names": "Map of actor name to metadata.",
+ "names.metadata": "Free-form metadata attached to the actor name.",
"token": "The issued token. Treat it as a secret.",
"issued_ts": "When the token was issued, in Unix milliseconds.",
"expires_ts": "When the token expires, in Unix milliseconds.",
- "subject": "Subject attached to the token, or `null`.",
+ "namespace_id": "ID of the namespace the token is scoped to.",
+ "subject": "Subject attached to the token, if any.",
"grants": "Permissions the token carries.",
"grants[].resource": "Resource type the grant applies to.",
"grants[].target": "`\"any\"` for every resource of this type, or `{ \"id\": \"...\" }` for one resource.",
- "grants[].operations": "Operations the token may perform on the target."
+ "grants[].operations": "Operations the token may perform on the target.",
+ "value": "Base64-encoded value bytes.",
+ "update_ts": "When the key was last written, in Unix milliseconds."
},
"authProfiles": {
"none": {
"curlHeaders": [],
"description": "No authentication is required."
- },
- "admin": {
- "curlHeaders": [
- "Authorization: Bearer $RIVET_TOKEN"
- ],
- "description": "Requires the admin token, sent as a bearer token in the `Authorization` header. Namespace tokens are rejected. See [Authentication](/docs/api/authentication)."
- },
- "token": {
- "curlHeaders": [
- "Authorization: Bearer $RIVET_TOKEN"
- ],
- "description": "Send the namespace token to inspect as a bearer token in the `Authorization` header. The admin token is rejected. See [Authentication](/docs/api/authentication)."
}
}
},
@@ -98,11 +97,11 @@
"statusSources": [
{
"label": "gateway",
- "file": "engine/packages/guard-core/src/errors.rs"
+ "file": "engine/packages/guard-core/src/utils.rs"
},
{
"label": "control plane",
- "file": "engine/packages/api-public-shim/src/lib.rs"
+ "file": "engine/packages/api-builder/src/error_response.rs"
},
{
"label": "gateway",
@@ -118,11 +117,10 @@
"api": "Malformed requests to the control plane.",
"auth": "Token validation and permissions.",
"connection": "Actor connections opened through the connection protocol.",
- "envoy": "Node connections, and validation of namespace and pool names.",
"guard": "The gateway that routes requests to actors, including request parsing, rate limits, and timeouts.",
+ "kv": "Low-level KV storage inside an actor.",
"message": "Message size limits on connections.",
"namespace": "Namespace lookup and creation.",
- "pool": "Node pool configuration.",
"protocol": "Encoding and framing of connection protocol messages.",
"queue": "Actor queues.",
"user": "Errors thrown by your actor code. The code is whatever you pass to `UserError`.",
@@ -176,15 +174,15 @@
"path": "/actors",
"slug": "list",
"title": "List Actors",
- "description": "List actors in a namespace by ID, by name and key, or by name. Listings by name are paginated.",
- "notes": "Pass `actor_ids` (comma-separated) to look up actors by ID, or `name` with an optional `key`. `actor_ids` takes precedence over `name` and `key`. Only a listing by `name` without `key` is paginated; a page can hold fewer than `limit` actors while `pagination.cursor` is still set. Destroyed actors are excluded unless `include_destroyed` is `true`. A namespace token needs a grant on `actor` with `list`.",
+ "description": "List actors in a namespace, optionally filtered by name, key, or ID. Results are paginated.",
+ "notes": "`key` requires `name`. `actor_id` cannot be combined with `name` or `key`. Destroyed actors are excluded unless `include_destroyed` is `true`.",
"typescript": "examples/docs/api/actors-list.ts",
"parameters": {
- "name": "Only return actors with this name. Required unless `actor_ids` or `actor_id` is set.",
+ "name": "Only return actors with this name.",
"key": "Only return the actor with this key. Requires `name`. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys).",
- "actor_ids": "Comma-separated IDs of the actors to return.",
- "actor_id": "Same as `actor_ids`. Used only when `actor_ids` is absent.",
- "include_destroyed": "Include destroyed actors. Must be `true` or `false`."
+ "actor_id": "Only return actors with these IDs. Repeat the parameter for multiple IDs.",
+ "actor_ids": "Deprecated. Use `actor_id` instead.",
+ "include_destroyed": "Include actors that have been destroyed."
},
"examples": {
"query": {
@@ -196,37 +194,22 @@
"200": "Matching actors and a cursor for the next page. `pagination.cursor` is `null` on the last page."
}
},
- {
- "spec": "engine",
- "method": "get",
- "path": "/actors/{actor_id}",
- "slug": "get",
- "title": "Get Actor",
- "description": "Get a live actor by ID.",
- "notes": "Returns `actor.not_found` for an actor that was destroyed or belongs to another namespace. A namespace token needs a grant on `actor` with `read`.",
- "examples": {
- "query": {
- "namespace": "$RIVET_NAMESPACE"
- }
- },
- "responses": {
- "200": "The actor."
- }
- },
{
"spec": "engine",
"method": "post",
"path": "/actors",
"slug": "create",
"title": "Create Actor",
- "description": "Create a new actor. Fails if a live actor with the same name and key already exists.",
- "notes": "Prefer [Get or Create Actor](/docs/api/actors/get-or-create) for idempotent access by key. Use this endpoint when you need a fresh actor every time, for example with a random key. The request returns once the actor's record exists, and fails after 30 seconds. A namespace token needs a grant on `actor` with `create`.",
+ "description": "Create a new actor. Fails if an actor with the same name and key already exists.",
+ "notes": "Prefer [Get or Create Actor](/docs/api/actors/get-or-create) for idempotent access by key. Use this endpoint when you need a fresh actor every time, for example with a random key.",
"typescript": "examples/docs/api/actors-create.ts",
"parameters": {
- "name": "Name of the actor as registered in your RivetKit registry. 1 to 64 bytes.",
- "key": "Key identifying this actor within its name. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). Omit for an actor without a key.",
- "runner_name_selector": "Node pool that runs the actor. Defaults to `default`.",
- "input": "Input passed to the actor, encoded as standard base64 (not base64url)."
+ "name": "Name of the actor as registered in your RivetKit registry.",
+ "key": "Key identifying this actor within its name. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys). Omit for a keyless actor.",
+ "runner_name_selector": "Pool that runs the actor. RivetKit registers the `default` pool unless configured otherwise.",
+ "crash_policy": "What happens when the actor crashes. RivetKit defaults to `sleep`.",
+ "datacenter": "Datacenter to create the actor in. Defaults to the datacenter serving the request.",
+ "input": "Base64url-encoded CBOR input passed to the actor's `createState` and `onCreate` hooks."
},
"examples": {
"query": {
@@ -235,11 +218,9 @@
"body": {
"name": "counter",
"key": "my-counter",
- "runner_name_selector": "default"
+ "runner_name_selector": "default",
+ "crash_policy": "sleep"
}
- },
- "responses": {
- "200": "The created actor. `created` is always `true`."
}
},
{
@@ -249,13 +230,15 @@
"slug": "get-or-create",
"title": "Get or Create Actor",
"description": "Return the actor with the given name and key, creating it if it does not exist. This is the HTTP equivalent of client.actor.getOrCreate(key).",
- "notes": "The response includes `created`, which is `true` when this call created the actor. A sleeping actor is woken. Without `key`, a new actor is created every time. Gateway endpoints can perform the same lookup inline with the `rvt-*` selector parameters, so you only need this endpoint when you want the `actor_id` up front. A namespace token needs a grant on `actor` with `create`.",
+ "notes": "The response includes `created`, which is `true` when this call created the actor. Gateway endpoints can perform the same lookup inline with the `rvt-*` selector parameters, so you only need this endpoint when you want the `actor_id` up front.",
"typescript": "examples/docs/api/actors-get-or-create.ts",
"parameters": {
- "name": "Name of the actor as registered in your RivetKit registry. 1 to 64 bytes.",
+ "name": "Name of the actor as registered in your RivetKit registry.",
"key": "Key identifying this actor within its name. Multi-part keys are joined with `/`, see [Actor Keys](/docs/api/actor-keys).",
- "runner_name_selector": "Node pool that runs the actor. Defaults to `default`.",
- "input": "Input passed to the actor if this request creates it, encoded as standard base64 (not base64url)."
+ "runner_name_selector": "Pool that runs the actor. RivetKit registers the `default` pool unless configured otherwise.",
+ "crash_policy": "What happens when the actor crashes. RivetKit defaults to `sleep`.",
+ "datacenter": "Datacenter to create the actor in if it does not exist. Defaults to the datacenter serving the request.",
+ "input": "Base64url-encoded CBOR input passed to the actor's `createState` and `onCreate` hooks when the actor is created."
},
"examples": {
"query": {
@@ -264,7 +247,8 @@
"body": {
"name": "counter",
"key": "my-counter",
- "runner_name_selector": "default"
+ "runner_name_selector": "default",
+ "crash_policy": "sleep"
}
}
},
@@ -286,11 +270,7 @@
"title": "Destroying Actors",
"href": "/actors/docs/destroy"
}
- ],
- "notes": "A namespace token needs a grant on `actor` with `delete`.",
- "responses": {
- "200": "The destroy was accepted. The response body is an empty object."
- }
+ ]
},
{
"spec": "engine",
@@ -303,18 +283,15 @@
"examples": {
"query": {
"namespace": "$RIVET_NAMESPACE"
- }
+ },
+ "body": {}
},
"related": [
{
"title": "Lifecycle",
"href": "/actors/docs/lifecycle"
}
- ],
- "notes": "The request body is ignored. A namespace token needs a grant on `actor` with `update`.",
- "responses": {
- "200": "The sleep was accepted. The response body is an empty object."
- }
+ ]
},
{
"spec": "engine",
@@ -322,23 +299,20 @@
"path": "/actors/{actor_id}/reschedule",
"slug": "reschedule",
"title": "Reschedule Actor",
- "description": "Move an actor to a new allocation. A running actor is stopped and starts again, possibly on another node, with its persisted state.",
+ "description": "Move an actor to a different worker. The actor runs its shutdown sequence, then restarts elsewhere with its persisted state.",
"typescript": "examples/docs/api/actors-reschedule.ts",
"examples": {
"query": {
"namespace": "$RIVET_NAMESPACE"
- }
+ },
+ "body": {}
},
"related": [
{
"title": "Lifecycle",
"href": "/actors/docs/lifecycle"
}
- ],
- "notes": "A running or stopping actor is stopped and allocated again, and a sleeping actor is allocated now. An actor that is still starting, or is destroyed, is left as is and the request still succeeds. The request body is ignored. A namespace token needs a grant on `actor` with `update`.",
- "responses": {
- "200": "The reschedule was accepted, or there was nothing to move. The response body is an empty object."
- }
+ ]
},
{
"spec": "engine",
@@ -346,16 +320,12 @@
"path": "/actors/names",
"slug": "list-names",
"title": "List Actor Names",
- "description": "List the actor names that the namespace's connected nodes accept.",
+ "description": "List the distinct actor names that have been created in a namespace.",
"typescript": "examples/docs/api/actors-list-names.ts",
"examples": {
"query": {
"namespace": "$RIVET_NAMESPACE"
}
- },
- "notes": "A namespace token needs a grant on `actor` with `list`.",
- "responses": {
- "200": "Map of actor name to metadata."
}
}
]
@@ -1089,12 +1059,12 @@
"slug": "create",
"title": "Create Token",
"description": "Issue a scoped token. Use this to mint short-lived tokens that grant a client access to a single actor instead of sharing your namespace token.",
- "notes": "Each grant names a resource type, a target (`\"any\"` or a specific `{ \"id\": ... }`), and the operations it allows. A token carries 1 to 32 grants with 1 to 5 operations each. The RivetKit client wraps this as `handle.issueToken()`.",
+ "notes": "Each grant names a resource type, a target (`\"any\"` or a specific `{ \"id\": ... }`), and the operations it allows. The RivetKit client wraps this as `handle.issueToken()`.",
"typescript": "examples/docs/api/tokens-create.ts",
"parameters": {
- "namespace": "Namespace the token is valid in. It must exist.",
- "duration": "Lifetime in seconds, from 1 to the deployment's maximum. Omit for the default lifetime.",
- "subject": "Free-form subject to attach to the token, such as a user ID. At most 256 UTF-8 bytes.",
+ "namespace": "Namespace the token is valid in.",
+ "duration": "Lifetime in seconds. Omit for the default lifetime.",
+ "subject": "Free-form subject to attach to the token, such as a user ID.",
"grants": "Permissions the token carries.",
"grants[].resource": "Resource type the grant applies to.",
"grants[].target": "`\"any\"` for every resource of this type, or `{ \"id\": \"...\" }` for one resource.",
@@ -1109,7 +1079,7 @@
{
"resource": "actor_gateway",
"target": {
- "id": "d97pbq1nyqxw1w5qdwz0iirbqiblh2"
+ "id": "00000000-0000-0000-0000-000000000000"
},
"operations": [
"read"
@@ -1117,8 +1087,7 @@
}
]
}
- },
- "auth": "admin"
+ }
},
{
"spec": "engine",
@@ -1127,11 +1096,7 @@
"slug": "inspect",
"title": "Inspect Token",
"description": "Return the namespace, grants, and expiry of the token used to authenticate the request.",
- "typescript": "examples/docs/api/tokens-inspect.ts",
- "auth": "token",
- "parameters": {
- "namespace": "Namespace the token is scoped to."
- }
+ "typescript": "examples/docs/api/tokens-inspect.ts"
}
]
},
@@ -1145,16 +1110,17 @@
"path": "/namespaces",
"slug": "list",
"title": "List Namespaces",
- "description": "List namespaces in name order, or look up one namespace by name. Results are paginated.",
- "notes": "`name` returns zero or one namespace and ignores `limit` and `cursor`. Any other query parameter, including `namespace`, is rejected.",
+ "description": "List namespaces, optionally filtered by name or ID. Results are paginated.",
+ "notes": "Use `namespace_id` for multiple IDs. `namespace_ids` is deprecated.",
"typescript": "examples/docs/api/namespaces-list.ts",
"parameters": {
- "name": "Only return the namespace with this name."
+ "name": "Only return namespaces with this name.",
+ "namespace_ids": "Deprecated. Use `namespace_id` instead.",
+ "namespace_id": "Only return namespaces with these IDs. Repeat the parameter for multiple IDs."
},
"responses": {
"200": "Matching namespaces and a cursor for the next page."
- },
- "auth": "admin"
+ }
},
{
"spec": "engine",
@@ -1162,129 +1128,177 @@
"path": "/namespaces",
"slug": "create",
"title": "Create Namespace",
- "description": "Create a namespace with a unique name.",
+ "description": "Create a namespace with a unique name and a display name.",
"typescript": "examples/docs/api/namespaces-create.ts",
"parameters": {
- "name": "Unique name of the namespace. A DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "namespace": "The created namespace."
+ "name": "Unique name used to identify the namespace.",
+ "display_name": "Human-readable name for the namespace."
},
"examples": {
"body": {
- "name": "my-app"
+ "name": "my-app",
+ "display_name": "My App"
}
},
"responses": {
"200": "The newly created namespace."
- },
- "auth": "admin"
+ }
}
]
},
{
- "title": "Node Pools",
- "dir": "pools",
+ "title": "Workers",
+ "dir": "workers",
"endpoints": [
{
"spec": "engine",
"method": "get",
- "path": "/pools",
+ "path": "/envoys",
"slug": "list",
- "title": "List Node Pools",
- "description": "List the node pools configured in a namespace, ordered by name. Results are paginated.",
- "notes": "A pool is listed once it is configured, whether or not any node is connected. A namespace token needs a grant on `pool` with `list`.",
+ "title": "List Workers",
+ "description": "List workers connected to the control plane in a namespace, optionally filtered by name or key. Results are paginated.",
+ "typescript": "examples/docs/api/workers-list.ts",
+ "parameters": {
+ "name": "Only return workers with this name.",
+ "envoy_key": "Only return workers with these keys. Repeat the parameter for multiple keys."
+ },
"examples": {
"query": {
"namespace": "$RIVET_NAMESPACE"
}
},
"responses": {
- "200": "A page of node pools and a cursor for the next page."
+ "200": "Matching workers and a cursor for the next page."
}
},
{
"spec": "engine",
"method": "get",
- "path": "/pools/{pool}",
- "slug": "get",
- "title": "Get Node Pool",
- "description": "Get a node pool's configuration.",
- "notes": "A namespace token needs a grant on `pool` with `read`.",
+ "path": "/runner-configs",
+ "slug": "configs-list",
+ "title": "List Worker Configs",
+ "description": "List worker configurations in a namespace, grouped by worker name and datacenter.",
+ "notes": "Filter by `variant` to return only `normal` or `serverless` configurations. Use `runner_name` for multiple names because `runner_names` is deprecated.",
+ "typescript": "examples/docs/api/workers-configs-list.ts",
+ "parameters": {
+ "variant": "Only return configurations with this variant.",
+ "runner_names": "Deprecated. Use `runner_name` instead.",
+ "runner_name": "Only return configurations for these worker names. Repeat the parameter for multiple names."
+ },
"examples": {
- "path": {
- "pool": "default"
- },
"query": {
"namespace": "$RIVET_NAMESPACE"
}
},
"responses": {
- "200": "The node pool."
+ "200": "Worker configurations grouped by worker name and datacenter."
}
},
{
"spec": "engine",
"method": "put",
- "path": "/pools/{pool}",
- "slug": "upsert",
- "title": "Upsert Node Pool",
- "description": "Create or replace a node pool's configuration.",
- "notes": "Every field is optional and omitted fields take their defaults, so a request replaces the whole configuration. Unknown fields are rejected. Serverless pools are not supported. Nodes pick up the new configuration on their next connection. A namespace token needs a grant on `pool` with `update`.",
+ "path": "/runner-configs/{runner_name}",
+ "slug": "configs-upsert",
+ "title": "Upsert Worker Config",
+ "description": "Create or replace a worker configuration in each specified datacenter.",
+ "notes": "A `normal` configuration controls workers with direct, persistent connections. A `serverless` configuration starts workers through a URL and requires `url` and `request_lifespan`. Configurations for omitted datacenters are deleted. A failure can occur after some datacenters have already changed.",
+ "typescript": "examples/docs/api/workers-configs-upsert.ts",
+ "parameters": {
+ "runner_name": "Name of the worker pool to configure.",
+ "datacenters": "Map of datacenter names to worker configurations."
+ },
"examples": {
"path": {
- "pool": "default"
+ "runner_name": "$RUNNER_NAME"
},
"query": {
"namespace": "$RIVET_NAMESPACE"
},
"body": {
- "drain_on_version_upgrade": true,
- "actor_eviction_delay": 0,
- "actor_eviction_period": 0,
- "actor_eviction_rate": 1
+ "datacenters": {
+ "local": {
+ "normal": {}
+ }
+ }
}
},
"responses": {
- "200": "The stored node pool."
+ "200": "Whether the endpoint configuration changed."
}
},
{
"spec": "engine",
"method": "delete",
- "path": "/pools/{pool}",
- "slug": "delete",
- "title": "Delete Node Pool",
- "description": "Delete a node pool's configuration.",
- "notes": "Fails with `pool.nodes_connected` while any node of the pool is connected. A namespace token needs a grant on `pool` with `delete`.",
+ "path": "/runner-configs/{runner_name}",
+ "slug": "configs-delete",
+ "title": "Delete Worker Config",
+ "description": "Delete a worker configuration from every configured datacenter.",
+ "notes": "A failure can occur after the configuration has already been deleted from some datacenters.",
+ "typescript": "examples/docs/api/workers-configs-delete.ts",
+ "parameters": {
+ "runner_name": "Name of the worker pool whose configuration will be deleted."
+ },
"examples": {
"path": {
- "pool": "default"
+ "runner_name": "$RUNNER_NAME"
},
"query": {
"namespace": "$RIVET_NAMESPACE"
}
},
"responses": {
- "200": "The node pool was deleted. The response body is an empty object."
+ "200": "The configuration was deleted."
}
},
{
"spec": "engine",
- "method": "get",
- "path": "/pools/{pool}/nodes",
- "slug": "list-nodes",
- "title": "List Nodes",
- "description": "List the live nodes of a node pool in node key order. Results are paginated.",
- "notes": "A node is listed while its heartbeat is recent enough for it to receive actors. A page can hold fewer than `limit` nodes while `pagination.cursor` is still set. A namespace token needs a grant on `node` with `list`.",
+ "method": "post",
+ "path": "/runner-configs/{runner_name}/refresh-metadata",
+ "slug": "configs-refresh-metadata",
+ "title": "Refresh Config Metadata",
+ "description": "Fetch and store fresh metadata for a serverless worker configuration.",
+ "notes": "The endpoint refreshes the first serverless configuration it finds across datacenters. It fails when the worker name has no serverless configuration.",
+ "typescript": "examples/docs/api/workers-configs-refresh-metadata.ts",
+ "parameters": {
+ "runner_name": "Name of the worker pool whose metadata will be refreshed."
+ },
"examples": {
"path": {
- "pool": "default"
+ "runner_name": "$RUNNER_NAME"
},
"query": {
"namespace": "$RIVET_NAMESPACE"
+ },
+ "body": {}
+ },
+ "responses": {
+ "200": "The metadata was refreshed."
+ }
+ },
+ {
+ "spec": "engine",
+ "method": "post",
+ "path": "/runner-configs/serverless-health-check",
+ "slug": "serverless-health-check",
+ "title": "Serverless Health Check",
+ "description": "Probe a serverless URL and return the protocol version reported by its metadata endpoint.",
+ "notes": "Metadata fetch failures are returned as a `failure` result in a successful HTTP response.",
+ "typescript": "examples/docs/api/workers-serverless-health-check.ts",
+ "parameters": {
+ "url": "Serverless URL to probe.",
+ "headers": "Headers to include in the metadata request."
+ },
+ "examples": {
+ "query": {
+ "namespace": "$RIVET_NAMESPACE"
+ },
+ "body": {
+ "url": "https://workers.example.com",
+ "headers": {}
}
},
"responses": {
- "200": "A page of live nodes and a cursor for the next page."
+ "200": "A success result with the reported version or a failure result with error details."
}
}
],
@@ -1293,7 +1307,7 @@
"title": "Worker Connection",
"href": "/docs/api/worker-connect",
"badge": "WS",
- "after": "list-nodes"
+ "after": "list"
}
]
},
@@ -1307,12 +1321,12 @@
"path": "/metadata",
"slug": "metadata",
"title": "Get Metadata",
- "description": "Get the runtime and version of the control plane.",
- "notes": "A request made with the admin token also receives `actorNames`.",
+ "description": "Get build, runtime, compiler, and fleet protocol metadata for the control plane.",
+ "notes": "The protocol versions are the versions agreed on by the fleet, which can differ from the versions compiled into the responding node.",
"typescript": "examples/docs/api/control-plane-metadata.ts",
"auth": "none",
"responses": {
- "200": "Runtime and version metadata."
+ "200": "Build and protocol metadata for the responding node and its fleet."
}
},
{
@@ -1324,9 +1338,8 @@
"description": "List the datacenters configured for the control plane.",
"typescript": "examples/docs/api/control-plane-datacenters.ts",
"responses": {
- "200": "Configured datacenters."
- },
- "notes": "A namespace token needs a grant on `datacenter` with `list`."
+ "200": "Configured datacenters and an empty pagination cursor."
+ }
}
]
}
diff --git a/vendor/api/docs/error-registry.json b/vendor/api/docs/error-registry.json
index 01f74932..632e5b5a 100644
--- a/vendor/api/docs/error-registry.json
+++ b/vendor/api/docs/error-registry.json
@@ -30,65 +30,50 @@
]
},
{
- "code": "destroying",
- "message": "Actor is destroying.",
- "statuses": []
- },
- {
- "code": "dropped_reply",
- "message": "Actor reply channel was dropped without a response.",
- "statuses": []
- },
- {
- "code": "duplicate_key",
- "message": "Actor key already in use.",
+ "code": "creation_rate_limit",
+ "message": "Too many actors created at once. Try again later.",
"statuses": [
{
- "status": 409,
+ "status": 429,
"surfaces": [
- "control plane"
+ "gateway"
]
}
]
},
{
- "code": "input_too_large",
- "message": "Actor input too large.",
- "statuses": []
- },
- {
- "code": "invalid_cursor",
- "message": "The actor listing cursor is malformed.",
+ "code": "destroyed_during_creation",
+ "message": "Actor was destroyed during creation.",
"statuses": []
},
{
- "code": "invalid_include_destroyed",
- "message": "The actor listing include_destroyed flag must be true or false.",
+ "code": "destroyed_while_waiting_for_ready",
+ "message": "Actor was destroyed while waiting for ready state.",
"statuses": []
},
{
- "code": "invalid_key",
- "message": "Actor key is invalid.",
+ "code": "destroying",
+ "message": "Actor is destroying.",
"statuses": []
},
{
- "code": "invalid_key_encoding",
- "message": "Actor key is not in the canonical slash-separated form produced by serializeActorKey.",
+ "code": "dropped_reply",
+ "message": "Actor reply channel was dropped without a response.",
"statuses": []
},
{
- "code": "invalid_limit",
- "message": "The actor listing limit must be an integer from 1 to 100.",
+ "code": "duplicate_key",
+ "message": "Actor key already in use.",
"statuses": []
},
{
- "code": "invalid_listing",
- "message": "Listing actors requires a name or actor IDs.",
+ "code": "empty_key",
+ "message": "Key label cannot be empty.",
"statuses": []
},
{
- "code": "invalid_name",
- "message": "Actor name is invalid.",
+ "code": "input_too_large",
+ "message": "Actor input too large.",
"statuses": []
},
{
@@ -108,34 +93,39 @@
}
]
},
+ {
+ "code": "js_callback_failed",
+ "message": "JavaScript callback failed",
+ "statuses": []
+ },
{
"code": "js_callback_unavailable",
"message": "JavaScript callback unavailable",
"statuses": []
},
{
- "code": "key_owned_elsewhere",
- "message": "The actor key is owned by another datacenter.",
+ "code": "key_index_scan_limit_exceeded",
+ "message": "Too many index entries for this actor key to resolve it.",
"statuses": []
},
{
- "code": "key_too_large",
- "message": "Key label too large.",
+ "code": "key_reserved_in_different_datacenter",
+ "message": "Actor key is already reserved in a different datacenter. Either remove the datacenter constraint to automatically create this actor in the correct datacenter or provide the datacenter that matches.",
"statuses": []
},
{
- "code": "kv_key_too_large",
- "message": "A KV key is too large.",
+ "code": "key_too_large",
+ "message": "Key label too large.",
"statuses": []
},
{
- "code": "kv_response_too_large",
- "message": "The KV response is too large. Read fewer keys per request.",
+ "code": "kv_key_not_found",
+ "message": "The KV key does not exist for this actor.",
"statuses": []
},
{
- "code": "kv_too_many_keys",
- "message": "The KV request names too many keys.",
+ "code": "kv_storage_quota_exceeded",
+ "message": "Not enough space left in storage.",
"statuses": []
},
{
@@ -155,6 +145,16 @@
"message": "Actor input is missing.",
"statuses": []
},
+ {
+ "code": "namespace_not_found",
+ "message": "The namespace does not exist.",
+ "statuses": []
+ },
+ {
+ "code": "no_runner_config_configured",
+ "message": "No runner config configured in any datacenter. Validate a provider is listed that matches requested pool name.",
+ "statuses": []
+ },
{
"code": "not_configured",
"message": "Actor capability is not configured.",
@@ -167,7 +167,6 @@
{
"status": 404,
"surfaces": [
- "control plane",
"gateway"
]
}
@@ -203,10 +202,20 @@
"message": "Actor is starting.",
"statuses": []
},
+ {
+ "code": "state_mutation_reentrant",
+ "message": "Actor state mutation is re-entrant.",
+ "statuses": []
+ },
{
"code": "stopping",
"message": "Actor is stopping.",
"statuses": []
+ },
+ {
+ "code": "workflow_in_flight",
+ "message": "Workflow replay is unavailable while the workflow is currently in flight.",
+ "statuses": []
}
]
},
@@ -214,6 +223,16 @@
"name": "api",
"description": "Malformed requests to the control plane.",
"errors": [
+ {
+ "code": "bad_request",
+ "message": "Request is invalid",
+ "statuses": []
+ },
+ {
+ "code": "bad_token",
+ "message": "Invalid token provided",
+ "statuses": []
+ },
{
"code": "forbidden",
"message": "Access denied",
@@ -221,6 +240,7 @@
{
"status": 403,
"surfaces": [
+ "control plane",
"gateway"
]
}
@@ -238,6 +258,7 @@
{
"status": 404,
"surfaces": [
+ "control plane",
"gateway"
]
}
@@ -250,6 +271,7 @@
{
"status": 401,
"surfaces": [
+ "control plane",
"gateway"
]
}
@@ -291,12 +313,6 @@
"code": "issuance_disabled",
"message": "JWT issuance is not enabled for this deployment.",
"statuses": [
- {
- "status": 403,
- "surfaces": [
- "control plane"
- ]
- },
{
"status": 503,
"surfaces": [
@@ -344,6 +360,22 @@
}
]
},
+ {
+ "name": "compute_gateway",
+ "description": null,
+ "errors": [
+ {
+ "code": "cloud_route_error",
+ "message": "Failed to resolve route from cloud.",
+ "statuses": []
+ },
+ {
+ "code": "no_route",
+ "message": "No route found.",
+ "statuses": []
+ }
+ ]
+ },
{
"name": "config",
"description": null,
@@ -407,144 +439,128 @@
"description": null,
"errors": [
{
- "code": "command_too_large",
- "message": "The command exceeds the byte limit.",
+ "code": "branch_not_reachable",
+ "message": "Restore point branch is not reachable from this database branch chain.",
"statuses": []
},
{
- "code": "conflict",
- "message": "The command conflicted with a concurrent change to the volume.",
+ "code": "branch_not_writable",
+ "message": "Database branch is not writable.",
"statuses": []
},
{
- "code": "corrupt",
- "message": "The volume's stored data failed a consistency check.",
+ "code": "bucket_fork_chain_too_deep",
+ "message": "Bucket branch fork chain is too deep.",
"statuses": []
},
{
- "code": "database_not_found",
- "message": "Database was not found in this bucket branch.",
- "statuses": []
- },
- {
- "code": "fenced",
- "message": "A newer owner holds the volume; the command was not applied by this owner.",
+ "code": "cold_object_corrupt",
+ "message": "SQLite cold object does not match the reference that named it.",
"statuses": []
},
{
- "code": "head_fence_mismatch",
- "message": "SQLite head fence mismatch.",
+ "code": "commit_too_large",
+ "message": "SQLite commit payload is too large.",
"statuses": []
},
{
- "code": "legacy_layout",
- "message": "The actor volume predates the /actor layout and must be reinitialized.",
+ "code": "database_not_found",
+ "message": "Database was not found in this bucket branch.",
"statuses": []
},
{
- "code": "overloaded",
- "message": "The storage host refused the command; retry after the hinted delay.",
+ "code": "delta_page_missing",
+ "message": "SQLite delta does not carry a page it owns.",
"statuses": []
},
{
- "code": "quota_exceeded",
- "message": "Not enough space left in Depot.",
+ "code": "fence_mismatch",
+ "message": "Depot debug fence mismatch.",
"statuses": []
},
{
- "code": "read_interrupted",
- "message": "The storage read was interrupted; retry after the hinted delay.",
+ "code": "fork_chain_too_deep",
+ "message": "Database branch fork chain is too deep.",
"statuses": []
},
{
- "code": "request_deadline_exceeded",
- "message": "The command deadline elapsed; its outcome may be unknown.",
+ "code": "fork_out_of_retention",
+ "message": "Cannot fork from a point that has fallen out of retention.",
"statuses": []
},
{
- "code": "routing_unavailable",
- "message": "No tablet maintainer route is available.",
+ "code": "head_fence_mismatch",
+ "message": "SQLite head fence mismatch.",
"statuses": []
},
{
- "code": "scope_revoked",
- "message": "The caller scope ended; submitted work may still complete.",
+ "code": "invalid_policy_value",
+ "message": "SQLite policy value is invalid.",
"statuses": []
},
{
- "code": "storage_unavailable",
- "message": "Depot storage is not available in this build.",
+ "code": "invalid_v1_migration_state",
+ "message": "Invalid SQLite v1 migration state.",
"statuses": []
},
{
- "code": "unavailable",
- "message": "The storage host could not finish the command; its outcome may be unknown.",
+ "code": "meta_missing",
+ "message": "SQLite metadata is missing.",
"statuses": []
},
{
- "code": "unknown_command",
- "message": "The maintainer does not recognize this command.",
+ "code": "quota_exceeded",
+ "message": "Not enough space left in Depot.",
"statuses": []
},
{
- "code": "volume_deleted",
- "message": "The KV database volume was deleted.",
+ "code": "restore_point_expired",
+ "message": "Restore point history is no longer retained.",
"statuses": []
},
{
- "code": "volume_not_found",
- "message": "The KV database volume does not exist.",
- "statuses": []
- }
- ]
- },
- {
- "name": "depot_kv",
- "description": null,
- "errors": [
- {
- "code": "closed",
- "message": "The engine is closed.",
+ "code": "restore_point_not_found",
+ "message": "Restore point was not found.",
"statuses": []
},
{
- "code": "conflict",
- "message": "The transaction conflicts with a later write.",
+ "code": "shard_cache_corrupt",
+ "message": "SQLite shard cache is corrupt.",
"statuses": []
},
{
- "code": "corrupt",
- "message": "Stored data failed its integrity checks.",
+ "code": "shard_coverage_missing",
+ "message": "SQLite shard coverage is missing.",
"statuses": []
},
{
- "code": "failed",
- "message": "The write failed.",
+ "code": "shard_version_cap_exhausted",
+ "message": "SQLite shard version cap is exhausted.",
"statuses": []
},
{
- "code": "invalid_key",
- "message": "The key or range is invalid.",
+ "code": "stage_not_found",
+ "message": "SQLite staged commit segment is missing.",
"statuses": []
},
{
- "code": "overloaded",
- "message": "The engine commit queue is full.",
+ "code": "stage_segment_invalid",
+ "message": "SQLite staged commit segment is invalid.",
"statuses": []
},
{
- "code": "storage",
- "message": "A block device read failed.",
+ "code": "stale_main_page",
+ "message": "SQLite page one disagrees with the database size at its txid.",
"statuses": []
},
{
- "code": "too_large",
- "message": "The transaction exceeds a configured limit.",
+ "code": "too_many_pins",
+ "message": "Bucket has too many restore_points.",
"statuses": []
},
{
- "code": "too_old",
- "message": "The snapshot is too old.",
+ "code": "too_many_restore_points",
+ "message": "Bucket has too many restore points.",
"statuses": []
}
]
@@ -578,11 +594,6 @@
"message": "Engine health check failed.",
"statuses": []
},
- {
- "code": "incompatible_engine",
- "message": "An incompatible engine is already running on the endpoint.",
- "statuses": []
- },
{
"code": "invalid_endpoint",
"message": "Engine endpoint is invalid.",
@@ -593,11 +604,6 @@
"message": "Engine process is missing a pid.",
"statuses": []
},
- {
- "code": "not_ready",
- "message": "Engine did not become ready.",
- "statuses": []
- },
{
"code": "port_occupied",
"message": "Engine port is occupied by a different runtime.",
@@ -605,44 +611,13 @@
}
]
},
- {
- "name": "envoy",
- "description": "Node connections, and validation of namespace and pool names.",
- "errors": [
- {
- "code": "connect_overloaded",
- "message": "Too many runners are connecting at once. Retry after the hint.",
- "statuses": []
- },
- {
- "code": "connect_unavailable",
- "message": "Storage could not register the runner yet. Retry after the hint.",
- "statuses": []
- },
- {
- "code": "invalid_namespace_name",
- "message": "Namespace name is invalid.",
- "statuses": []
- },
- {
- "code": "invalid_pool_name",
- "message": "Pool name is invalid.",
- "statuses": []
- },
- {
- "code": "malformed_message",
- "message": "The message could not be decoded.",
- "statuses": []
- }
- ]
- },
{
"name": "guard",
"description": "The gateway that routes requests to actors, including request parsing, rate limits, and timeouts.",
"errors": [
{
"code": "actor_ready_timeout",
- "message": "Timed out waiting for actor to become ready. Ensure that the pool selector is accurate and there are runners available in the namespace you created this actor.",
+ "message": "Timed out waiting for actor to become ready. Ensure that the pool selector is accurate and there are envoys available in the namespace you created this actor.",
"statuses": [
{
"status": 503,
@@ -652,6 +627,11 @@
}
]
},
+ {
+ "code": "actor_runner_failed",
+ "message": "Actor's runner pool is experiencing errors.",
+ "statuses": []
+ },
{
"code": "actor_stopped_while_waiting",
"message": "Actor stopped while waiting for a response.",
@@ -665,26 +645,16 @@
]
},
{
- "code": "invalid_request",
- "message": "Invalid request.",
- "statuses": []
- },
- {
- "code": "missing_header",
- "message": "Missing header required for routing.",
- "statuses": []
- },
- {
- "code": "query_invalid_params",
- "message": "invalid query gateway params",
+ "code": "actor_stopped_while_waiting_for_websocket_open",
+ "message": "Actor stopped while waiting for WebSocket open.",
"statuses": []
},
{
- "code": "rate_limit",
- "message": "Too many requests. Try again later.",
+ "code": "actor_wake_retries_exceeded",
+ "message": "Actor wake retries exceeded.",
"statuses": [
{
- "status": 429,
+ "status": 503,
"surfaces": [
"gateway"
]
@@ -692,185 +662,653 @@
]
},
{
- "code": "service_unavailable",
- "message": "Service unavailable.",
+ "code": "connection_error",
+ "message": "Connection error: {error_message}.",
+ "statuses": []
+ },
+ {
+ "code": "gateway_response_start_timeout",
+ "message": "Timed out waiting for actor response start.",
"statuses": [
{
- "status": 503,
+ "status": 504,
"surfaces": [
"gateway"
]
}
]
- }
- ]
- },
- {
- "name": "inspector",
- "description": null,
- "errors": [
+ },
{
- "code": "invalid_request",
- "message": "Invalid inspector request",
+ "code": "http_request_build_failed",
+ "message": "Failed to build HTTP request.",
"statuses": []
},
{
- "code": "unauthorized",
- "message": "Inspector request requires a valid bearer token",
+ "code": "invalid_header",
+ "message": "Invalid header value.",
"statuses": []
- }
- ]
- },
- {
- "name": "message",
- "description": "Message size limits on connections.",
- "errors": [
- {
- "code": "incoming_too_long",
- "message": "Incoming message too long.",
- "statuses": [
- {
- "status": 400,
- "surfaces": [
- "gateway"
- ]
- }
- ]
},
{
- "code": "outgoing_too_long",
- "message": "Outgoing message too long",
- "statuses": [
- {
- "status": 400,
- "surfaces": [
- "gateway"
- ]
- }
- ]
- }
- ]
- },
- {
- "name": "namespace",
- "description": "Namespace lookup and creation.",
- "errors": [
- {
- "code": "invalid",
- "message": "Namespace list limit must be between 1 and 100.",
+ "code": "invalid_request",
+ "message": "Invalid request.",
"statuses": []
},
{
- "code": "name_not_unique",
- "message": "A namespace with this name already exists.",
+ "code": "invalid_request_body",
+ "message": "Unable to parse request body.",
"statuses": [
{
- "status": 409,
+ "status": 413,
"surfaces": [
- "control plane"
+ "gateway"
]
}
]
},
{
- "code": "not_found",
- "message": "The namespace does not exist.",
+ "code": "invalid_response_body",
+ "message": "Unable to parse response body.",
"statuses": [
{
- "status": 404,
+ "status": 502,
"surfaces": [
- "control plane"
+ "gateway"
]
}
]
- }
- ]
- },
- {
- "name": "napi",
- "description": null,
- "errors": [
+ },
{
- "code": "invalid_argument",
- "message": "Invalid native argument",
+ "code": "max_in_flight",
+ "message": "Too many concurrent requests. Try again later.",
"statuses": []
},
{
- "code": "invalid_state",
- "message": "Invalid native state",
+ "code": "missing_header",
+ "message": "Missing header required for routing.",
"statuses": []
- }
- ]
- },
- {
- "name": "pool",
- "description": "Node pool configuration.",
- "errors": [
+ },
{
- "code": "invalid",
- "message": "Node pool configuration is invalid.",
+ "code": "missing_query_parameter",
+ "message": "Missing query parameter required for routing.",
"statuses": []
},
{
- "code": "nodes_connected",
- "message": "The node pool still has connected nodes.",
- "statuses": [
- {
- "status": 409,
- "surfaces": [
- "control plane"
- ]
- }
- ]
+ "code": "must_use_regional_host",
+ "message": "Request must use a regional URL for this datacenter.",
+ "statuses": []
},
{
- "code": "not_found",
- "message": "The node pool does not exist.",
+ "code": "no_route",
+ "message": "No route found.",
"statuses": [
{
"status": 404,
"surfaces": [
- "control plane"
+ "gateway"
]
}
]
},
{
- "code": "serverless_unsupported",
- "message": "Serverless node pools are not supported.",
+ "code": "no_route_targets",
+ "message": "No targets found.",
"statuses": []
- }
- ]
- },
- {
- "name": "protocol",
- "description": "Encoding and framing of connection protocol messages.",
- "errors": [
+ },
{
- "code": "invalid_actor_connect_request",
- "message": "Invalid actor-connect request.",
+ "code": "query_ambiguous_runner_configs",
+ "message": "query gateway actor resolution found multiple runner configs for namespace",
"statuses": []
},
{
- "code": "invalid_http_request",
- "message": "Invalid HTTP request.",
+ "code": "query_duplicate_param",
+ "message": "duplicate query gateway param",
"statuses": []
},
{
- "code": "invalid_http_response",
- "message": "Invalid HTTP response.",
+ "code": "query_empty_actor_name",
+ "message": "query gateway actor name must not be empty",
"statuses": []
},
{
- "code": "invalid_persisted_data",
- "message": "Invalid persisted actor data.",
+ "code": "query_get_disallowed_params",
+ "message": "query gateway method=get does not allow rvt-input, rvt-region, rvt-crash-policy, or rvt-pool params",
"statuses": []
},
{
- "code": "unsupported_encoding",
- "message": "Unsupported protocol encoding.",
+ "code": "query_invalid_base64_input",
+ "message": "invalid base64url in query gateway input",
"statuses": []
- }
+ },
+ {
+ "code": "query_invalid_cbor_input",
+ "message": "invalid query gateway input cbor",
+ "statuses": []
+ },
+ {
+ "code": "query_invalid_params",
+ "message": "invalid query gateway params",
+ "statuses": []
+ },
+ {
+ "code": "query_invalid_percent_encoding",
+ "message": "invalid percent-encoding for query gateway param",
+ "statuses": []
+ },
+ {
+ "code": "query_missing_pool",
+ "message": "query gateway method=getOrCreate requires rvt-pool param",
+ "statuses": []
+ },
+ {
+ "code": "query_missing_runner_name",
+ "message": "query gateway method=getOrCreate requires rvt-runner param",
+ "statuses": []
+ },
+ {
+ "code": "query_no_runner_configs",
+ "message": "query gateway actor resolution found no runner configs for namespace",
+ "statuses": []
+ },
+ {
+ "code": "query_param_missing_equals",
+ "message": "query gateway param is missing '='",
+ "statuses": []
+ },
+ {
+ "code": "query_path_token_syntax",
+ "message": "query gateway paths must not use @token syntax",
+ "statuses": []
+ },
+ {
+ "code": "query_unknown_param",
+ "message": "unknown query gateway param",
+ "statuses": []
+ },
+ {
+ "code": "rate_limit",
+ "message": "Too many requests. Try again later.",
+ "statuses": [
+ {
+ "status": 429,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "request_body_too_large",
+ "message": "Request body too large.",
+ "statuses": []
+ },
+ {
+ "code": "request_build_error",
+ "message": "Request build error.",
+ "statuses": []
+ },
+ {
+ "code": "request_delivery_unconfirmed",
+ "message": "Actor did not respond to request start.",
+ "statuses": [
+ {
+ "status": 503,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "request_timeout",
+ "message": "Request timed out.",
+ "statuses": [
+ {
+ "status": 504,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "response_body_too_large",
+ "message": "Response body too large.",
+ "statuses": []
+ },
+ {
+ "code": "retry_attempts_exceeded",
+ "message": "Retry attempts exceeded.",
+ "statuses": [
+ {
+ "status": 502,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "route_api_public_timeout",
+ "message": "Timed out resolving the api-public route.",
+ "statuses": [
+ {
+ "status": 504,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "route_auth_check_timeout",
+ "message": "Timed out checking route authorization.",
+ "statuses": [
+ {
+ "status": 504,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "route_compute_timeout",
+ "message": "Timed out resolving the compute gateway route.",
+ "statuses": [
+ {
+ "status": 504,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "route_dispatch_timeout",
+ "message": "Timed out dispatching route resolution to a routing module.",
+ "statuses": [
+ {
+ "status": 504,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "service_unavailable",
+ "message": "Service unavailable.",
+ "statuses": [
+ {
+ "status": 503,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "target_changed",
+ "message": "WebSocket target changed, retry not possible.",
+ "statuses": []
+ },
+ {
+ "code": "tunnel_message_timeout",
+ "message": "Actor tunnel message timed out.",
+ "statuses": [
+ {
+ "status": 504,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "tunnel_request_aborted",
+ "message": "Actor tunnel aborted the request.",
+ "statuses": [
+ {
+ "status": 503,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "tunnel_response_closed",
+ "message": "Actor tunnel closed before sending a response.",
+ "statuses": [
+ {
+ "status": 503,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "upstream_error",
+ "message": "Upstream error.",
+ "statuses": [
+ {
+ "status": 502,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "uri_parse_error",
+ "message": "URI parse error.",
+ "statuses": []
+ },
+ {
+ "code": "websocket_closed_before_open",
+ "message": "WebSocket closed before opening.",
+ "statuses": []
+ },
+ {
+ "code": "websocket_garbage_collected",
+ "message": "WebSocket request was garbage collected.",
+ "statuses": []
+ },
+ {
+ "code": "websocket_hibernation_not_supported",
+ "message": "The requested service does not support websocket hibernation.",
+ "statuses": []
+ },
+ {
+ "code": "websocket_not_supported",
+ "message": "The requested service does not support websockets.",
+ "statuses": []
+ },
+ {
+ "code": "websocket_open_dropped",
+ "message": "WebSocket open was dropped.",
+ "statuses": []
+ },
+ {
+ "code": "websocket_open_response_closed",
+ "message": "WebSocket open response closed.",
+ "statuses": []
+ },
+ {
+ "code": "websocket_open_timeout",
+ "message": "Timed out waiting for WebSocket open.",
+ "statuses": []
+ },
+ {
+ "code": "websocket_pending_limit_reached",
+ "message": "Reached limit on pending websocket messages, aborting connection.",
+ "statuses": []
+ },
+ {
+ "code": "websocket_service_hibernate",
+ "message": "Initiate WebSocket service hibernation.",
+ "statuses": []
+ },
+ {
+ "code": "websocket_tunnel_ping_timeout",
+ "message": "WebSocket tunnel ping timed out.",
+ "statuses": []
+ },
+ {
+ "code": "websocket_tunnel_subscription_closed",
+ "message": "WebSocket tunnel subscription closed.",
+ "statuses": []
+ },
+ {
+ "code": "wrong_addr_protocol",
+ "message": "Attempted to access a address using the wrong protocol.",
+ "statuses": []
+ }
+ ]
+ },
+ {
+ "name": "inspector",
+ "description": null,
+ "errors": [
+ {
+ "code": "invalid_request",
+ "message": "Invalid inspector request",
+ "statuses": []
+ },
+ {
+ "code": "unauthorized",
+ "message": "Inspector request requires a valid bearer token",
+ "statuses": []
+ }
+ ]
+ },
+ {
+ "name": "kv",
+ "description": "Low-level KV storage inside an actor.",
+ "errors": [
+ {
+ "code": "leader_forwarding_failed",
+ "message": "Failed to forward request to leader.",
+ "statuses": [
+ {
+ "status": 400,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "no_leader_elected",
+ "message": "No leader has been elected yet.",
+ "statuses": [
+ {
+ "status": 400,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "not_leader",
+ "message": "Current node is not the leader.",
+ "statuses": [
+ {
+ "status": 400,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "response_channel_closed",
+ "message": "Failed to receive KV response, channel closed.",
+ "statuses": [
+ {
+ "status": 400,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "message",
+ "description": "Message size limits on connections.",
+ "errors": [
+ {
+ "code": "incoming_too_long",
+ "message": "Incoming message too long.",
+ "statuses": [
+ {
+ "status": 400,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "outgoing_too_long",
+ "message": "Outgoing message too long",
+ "statuses": [
+ {
+ "status": 400,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "namespace",
+ "description": "Namespace lookup and creation.",
+ "errors": [
+ {
+ "code": "failed_to_create",
+ "message": "Failed to create namespace.",
+ "statuses": []
+ },
+ {
+ "code": "invalid_update",
+ "message": "Failed to update namespace.",
+ "statuses": []
+ },
+ {
+ "code": "name_not_unique",
+ "message": "Namespace name must be unique.",
+ "statuses": []
+ },
+ {
+ "code": "not_found",
+ "message": "The namespace does not exist.",
+ "statuses": []
+ },
+ {
+ "code": "not_leader",
+ "message": "Attempting to run operation in non-leader datacenter.",
+ "statuses": []
+ }
+ ]
+ },
+ {
+ "name": "napi",
+ "description": null,
+ "errors": [
+ {
+ "code": "invalid_argument",
+ "message": "Invalid native argument",
+ "statuses": []
+ },
+ {
+ "code": "invalid_state",
+ "message": "Invalid native state",
+ "statuses": []
+ }
+ ]
+ },
+ {
+ "name": "pegboard",
+ "description": null,
+ "errors": [
+ {
+ "code": "route_auth_check_timeout",
+ "message": "Timed out checking actor route authorization.",
+ "statuses": [
+ {
+ "status": 504,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "route_fetch_actor_timeout",
+ "message": "Timed out fetching actor routing state.",
+ "statuses": [
+ {
+ "status": 504,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "route_resolve_query_timeout",
+ "message": "Timed out resolving actor query route.",
+ "statuses": [
+ {
+ "status": 504,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "route_subscribe_timeout",
+ "message": "Timed out subscribing to actor routing events.",
+ "statuses": [
+ {
+ "status": 504,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ },
+ {
+ "code": "route_wake_signal_timeout",
+ "message": "Timed out sending actor wake signal.",
+ "statuses": [
+ {
+ "status": 504,
+ "surfaces": [
+ "gateway"
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "protocol",
+ "description": "Encoding and framing of connection protocol messages.",
+ "errors": [
+ {
+ "code": "invalid_actor_connect_request",
+ "message": "Invalid actor-connect request.",
+ "statuses": []
+ },
+ {
+ "code": "invalid_http_request",
+ "message": "Invalid HTTP request.",
+ "statuses": []
+ },
+ {
+ "code": "invalid_http_response",
+ "message": "Invalid HTTP response.",
+ "statuses": []
+ },
+ {
+ "code": "invalid_persisted_data",
+ "message": "Invalid persisted actor data.",
+ "statuses": []
+ },
+ {
+ "code": "unsupported_encoding",
+ "message": "Unsupported protocol encoding.",
+ "statuses": []
+ }
]
},
{
@@ -1009,12 +1447,12 @@
]
},
{
- "name": "runner_pool",
+ "name": "runner_config",
"description": null,
"errors": [
{
"code": "invalid",
- "message": "Invalid runner pool.",
+ "message": "Invalid runner config.",
"statuses": []
},
{
@@ -1028,6 +1466,11 @@
"name": "serverless_runner_pool",
"description": null,
"errors": [
+ {
+ "code": "failed_to_fetch_metadata",
+ "message": "Failed to fetch serverless metadata: {reason}.",
+ "statuses": []
+ },
{
"code": "not_found",
"message": "No serverless pool for this runner exists.",
@@ -1049,11 +1492,6 @@
"message": "Invalid SQLite bind parameter.",
"statuses": []
},
- {
- "code": "invalid_compile_options",
- "message": "SQLite requires SQLITE_ENABLE_BATCH_ATOMIC_WRITE and SQLITE_DIRECT_OVERFLOW_READ=0. Rebuild with LIBSQLITE3_FLAGS=\"SQLITE_ENABLE_BATCH_ATOMIC_WRITE SQLITE_DIRECT_OVERFLOW_READ=0\".",
- "statuses": []
- },
{
"code": "not_configured",
"message": "SQLite is not configured.",
@@ -1086,94 +1524,18 @@
}
]
},
- {
- "name": "topology",
- "description": null,
- "errors": [
- {
- "code": "unsupported_version",
- "message": "The peer does not read any version of this family that this binary writes.",
- "statuses": []
- },
- {
- "code": "version_unavailable",
- "message": "No version of this family is both readable by every storage worker and writable here.",
- "statuses": []
- },
- {
- "code": "version_unknown",
- "message": "The storage workers that read persisted data are unknown.",
- "statuses": []
- }
- ]
- },
{
"name": "ups",
"description": null,
"errors": [
{
- "code": "consumer_closed",
- "message": "The consumer closed without replying; the operation may have executed.",
+ "code": "publish_failed",
+ "message": "Failed to publish message after retries",
"statuses": []
},
{
- "code": "dispatch_rejected",
- "message": "The caller revoked the request before dispatch.",
- "statuses": []
- },
- {
- "code": "endpoint_unresolved",
- "message": "The worker's endpoint could not be resolved; the request was not sent.",
- "statuses": []
- },
- {
- "code": "invalid_message",
- "message": "The message exceeds the limit or has an invalid subject.",
- "statuses": []
- },
- {
- "code": "invalid_stream",
- "message": "The packet stream is malformed or ended without a terminal frame.",
- "statuses": []
- },
- {
- "code": "no_responders",
- "message": "The worker has no consumer for this subject.",
- "statuses": []
- },
- {
- "code": "overloaded",
- "message": "UPS capacity is full; the operation was not admitted.",
- "statuses": []
- },
- {
- "code": "subscription_exists",
- "message": "This worker already has a consumer for the subject.",
- "statuses": []
- },
- {
- "code": "timeout",
- "message": "The operation deadline expired; it may still have completed.",
- "statuses": []
- },
- {
- "code": "transport",
- "message": "Worker transport failed; the operation may have executed.",
- "statuses": []
- },
- {
- "code": "unexpected_packet",
- "message": "Expected exactly one packet followed by the end of the stream.",
- "statuses": []
- },
- {
- "code": "unknown_worker",
- "message": "The worker is not in current membership.",
- "statuses": []
- },
- {
- "code": "wrong_worker",
- "message": "The target worker incarnation has changed.",
+ "code": "request_timeout",
+ "message": "Request timeout.",
"statuses": []
}
]
@@ -1189,7 +1551,22 @@
"errors": [
{
"code": "invalid_input",
- "message": "Invalid input.",
+ "message": "Invalid input provided",
+ "statuses": []
+ },
+ {
+ "code": "no_keys",
+ "message": "No keys provided. At least one key is required.",
+ "statuses": []
+ },
+ {
+ "code": "race_condition",
+ "message": "Race condition detected",
+ "statuses": []
+ },
+ {
+ "code": "too_many_actor_ids",
+ "message": "Too many actor IDs provided",
"statuses": []
}
]
@@ -1224,15 +1601,50 @@
"message": "The websocket has been evicted and should not attempt to reconnect.",
"statuses": []
},
+ {
+ "code": "going_away",
+ "message": "The Rivet Engine is migrating. The websocket should attempt to reconnect as soon as possible.",
+ "statuses": []
+ },
+ {
+ "code": "invalid_initial_packet",
+ "message": "The websocket could not process the initial packet.",
+ "statuses": []
+ },
+ {
+ "code": "invalid_packet",
+ "message": "The websocket could not process the given packet.",
+ "statuses": []
+ },
{
"code": "invalid_request",
"message": "The websocket could not open due to an invalid request.",
"statuses": []
},
+ {
+ "code": "invalid_url",
+ "message": "The connection URL is invalid.",
+ "statuses": []
+ },
+ {
+ "code": "no_runner_config",
+ "message": "Must create a runner config before connecting an envoy with pool name {pool_name:?}.",
+ "statuses": []
+ },
+ {
+ "code": "registration_expired",
+ "message": "The envoy registration expired while its connection was still active. The websocket should reconnect.",
+ "statuses": []
+ },
{
"code": "timed_out",
"message": "Ping timed out.",
"statuses": []
+ },
+ {
+ "code": "timed_out_waiting_for_init",
+ "message": "Timed out waiting for the init packet to be sent.",
+ "statuses": []
}
]
}
diff --git a/vendor/api/docs/sidebar.json b/vendor/api/docs/sidebar.json
index 2fd79095..5c3c822d 100644
--- a/vendor/api/docs/sidebar.json
+++ b/vendor/api/docs/sidebar.json
@@ -43,11 +43,6 @@
"href": "/docs/api/actors/list",
"badge": "GET"
},
- {
- "title": "Get Actor",
- "href": "/docs/api/actors/get",
- "badge": "GET"
- },
{
"title": "Create Actor",
"href": "/docs/api/actors/create",
@@ -238,37 +233,42 @@
]
},
{
- "title": "Node Pools",
+ "title": "Workers",
"pages": [
{
- "title": "List Node Pools",
- "href": "/docs/api/pools/list",
+ "title": "List Workers",
+ "href": "/docs/api/workers/list",
"badge": "GET"
},
{
- "title": "Get Node Pool",
- "href": "/docs/api/pools/get",
+ "title": "Worker Connection",
+ "href": "/docs/api/worker-connect",
+ "badge": "WS"
+ },
+ {
+ "title": "List Worker Configs",
+ "href": "/docs/api/workers/configs-list",
"badge": "GET"
},
{
- "title": "Upsert Node Pool",
- "href": "/docs/api/pools/upsert",
+ "title": "Upsert Worker Config",
+ "href": "/docs/api/workers/configs-upsert",
"badge": "PUT"
},
{
- "title": "Delete Node Pool",
- "href": "/docs/api/pools/delete",
+ "title": "Delete Worker Config",
+ "href": "/docs/api/workers/configs-delete",
"badge": "DELETE"
},
{
- "title": "List Nodes",
- "href": "/docs/api/pools/list-nodes",
- "badge": "GET"
+ "title": "Refresh Config Metadata",
+ "href": "/docs/api/workers/configs-refresh-metadata",
+ "badge": "POST"
},
{
- "title": "Node Connection",
- "href": "/docs/api/worker-connect",
- "badge": "WS"
+ "title": "Serverless Health Check",
+ "href": "/docs/api/workers/serverless-health-check",
+ "badge": "POST"
}
]
},
diff --git a/vendor/api/engine/artifacts/openapi.json b/vendor/api/engine/artifacts/openapi.json
index eab3912a..b8e25749 100644
--- a/vendor/api/engine/artifacts/openapi.json
+++ b/vendor/api/engine/artifacts/openapi.json
@@ -2,1286 +2,149 @@
"openapi": "3.1.0",
"info": {
"title": "rivet-api-public",
- "description": "HTTP API of the Rivet control plane.",
+ "description": "",
"contact": {
"name": "Rivet Gaming, LLC",
"email": "developer@rivet.dev"
},
"license": {
- "name": "LicenseRef-RivetEnterprise",
- "identifier": "LicenseRef-RivetEnterprise"
+ "name": "Apache-2.0",
+ "identifier": "Apache-2.0"
},
- "version": "2.3.20"
+ "version": "2.3.31"
},
- "servers": [
- {
- "url": "https://api.rivet.dev"
- }
- ],
- "paths": {
- "/metadata": {
- "get": {
- "tags": [
- "metadata"
- ],
- "summary": "Returns the runtime and version of the control plane. Requests with the admin token also receive the actor names served by the default namespace.",
- "operationId": "metadata_get",
- "responses": {
- "200": {
- "description": "Runtime and version metadata.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/MetadataGetResponse"
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure. Details are only logged on the server.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
- }
- }
- },
- "security": [
- {},
- {
- "bearer_auth": []
- },
- {
- "rivet_token_header": []
- }
- ]
- }
- },
- "/auth/tokens": {
- "post": {
- "tags": [
- "auth::tokens"
- ],
- "summary": "Issues a namespace-scoped JWT. Requires the admin token, even when the deployment allows unauthenticated requests.",
- "operationId": "auth_tokens_create",
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/AuthTokenCreateRequest"
- }
- }
- }
- },
- "responses": {
- "200": {
- "description": "The issued token. The response carries `Cache-Control: no-store`.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/AuthTokenCreateResponse"
- }
- }
- }
- },
- "400": {
- "description": "`validation.invalid_input`: the subject exceeds 256 UTF-8 bytes, the duration is outside the allowed range, or the grant set is invalid (empty, more than 32 grants, a grant without operations or with more than 5, or a `token`, `acl` or `jwt` resource). `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "validation",
- "code": "invalid_input",
- "message": "subject exceeds 256 UTF-8 bytes"
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request does not carry the admin token.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
- }
- },
- "403": {
- "description": "`auth.issuance_disabled`: JWT issuance is not enabled for this deployment.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "issuance_disabled",
- "message": "JWT issuance is not enabled for this deployment."
- }
- }
- }
- }
- },
- "404": {
- "description": "`namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
- }
- }
- }
- }
- },
- "415": {
- "description": "The request is missing the `Content-Type: application/json` header. Returned as plain text.",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- },
- "422": {
- "description": "The JSON body does not match the request schema, for example a missing required field, a wrong type or an unknown field where unknown fields are rejected. Returned as plain text.",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure, including a deployment without authentication configured.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
- }
- },
- "503": {
- "description": "`auth.issuance_unavailable`: the signing service is temporarily unavailable. Retry the request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "issuance_unavailable",
- "message": "The server could not issue an authentication token because the signing service is temporarily unavailable. Retry the request."
- }
- }
- }
- }
- }
- },
- "security": [
- {
- "bearer_auth": []
- },
- {
- "rivet_token_header": []
- }
- ]
- }
- },
- "/auth/tokens/inspect": {
- "get": {
- "tags": [
- "auth::tokens"
- ],
- "summary": "Returns the namespace, subject, grants and lifetime of the JWT that authenticates the request.",
- "operationId": "auth_tokens_inspect",
- "responses": {
- "200": {
- "description": "The token's claims. The response carries `Cache-Control: no-store`.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/AuthTokenInspectResponse"
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, the token is not valid, or it is the admin token rather than a JWT. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure. Details are only logged on the server.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
- }
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
- }
- }
- }
- }
- },
- "security": [
- {
- "bearer_auth": []
- },
- {
- "rivet_token_header": []
- }
- ]
- }
- },
- "/datacenters": {
- "get": {
- "tags": [
- "datacenters"
- ],
- "summary": "Lists the datacenters of the deployment. This version serves a single datacenter named `default`.",
- "operationId": "datacenters_list",
- "responses": {
- "200": {
- "description": "The datacenters.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/DatacentersListResponse"
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
- }
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure. Details are only logged on the server.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
- }
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
- }
- }
- }
- }
- },
- "security": [
- {
- "bearer_auth": []
- },
- {
- "rivet_token_header": []
- }
- ]
- }
- },
- "/pools": {
- "get": {
- "tags": [
- "pools"
- ],
- "summary": "Lists a page of the namespace's configured node pools, ordered by name. A pool is listed once it is configured, whether or not any node is connected.",
- "operationId": "pools_list",
- "parameters": [
- {
- "name": "namespace",
- "in": "query",
- "required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
- "schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
- }
- },
- {
- "name": "limit",
- "in": "query",
- "required": false,
- "description": "Maximum number of results to return, from 1 to 100. Defaults to 100.",
- "schema": {
- "type": "integer",
- "minimum": 1,
- "maximum": 100,
- "default": 100
- }
- },
- {
- "name": "cursor",
- "in": "query",
- "required": false,
- "description": "Name of the last pool on the previous page. Pass the `pagination.cursor` value from the previous response.",
- "schema": {
- "type": "string"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A page of node pools.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/PoolsListResponse"
- }
- }
- }
- },
- "400": {
- "description": "`actor.invalid_limit`: `limit` is not an integer from 1 to 100. `envoy.invalid_pool_name`: `cursor` is not a valid pool name. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "actor",
- "code": "invalid_limit",
- "message": "The actor listing limit must be an integer from 1 to 100."
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
- }
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
- }
- }
- },
- "404": {
- "description": "`namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
- }
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure. Details are only logged on the server.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
- }
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
- }
- }
- }
- }
- },
- "security": [
- {
- "bearer_auth": []
- },
- {
- "rivet_token_header": []
- }
- ]
- }
- },
- "/pools/{pool}": {
- "get": {
- "tags": [
- "pools"
- ],
- "summary": "Returns a node pool's configuration.",
- "operationId": "pools_get",
- "parameters": [
- {
- "name": "pool",
- "in": "path",
- "required": true,
- "description": "Name of the node pool. A DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "schema": {
- "type": "string",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
- }
- },
- {
- "name": "namespace",
- "in": "query",
- "required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
- "schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
- }
- }
- ],
- "responses": {
- "200": {
- "description": "The node pool.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/PoolResponse"
- }
- }
- }
- },
- "400": {
- "description": "`envoy.invalid_pool_name`: the pool name is not valid. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "envoy",
- "code": "invalid_pool_name",
- "message": "Pool name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
- }
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
- }
- }
- },
- "404": {
- "description": "`pool.not_found`: the node pool does not exist. `namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "pool",
- "code": "not_found",
- "message": "The node pool does not exist."
- }
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure. Details are only logged on the server.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
- }
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
- }
- }
- }
- }
- },
- "security": [
- {
- "bearer_auth": []
- },
- {
- "rivet_token_header": []
- }
- ]
- },
- "put": {
- "tags": [
- "pools"
- ],
- "summary": "Creates or replaces a node pool's configuration. Omitted fields take their defaults. Nodes pick up the new configuration on their next connection.",
- "operationId": "pools_upsert",
- "parameters": [
- {
- "name": "pool",
- "in": "path",
- "required": true,
- "description": "Name of the node pool. A DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "schema": {
- "type": "string",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
- }
- },
- {
- "name": "namespace",
- "in": "query",
- "required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
- "schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
- }
- }
- ],
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/PoolUpsertRequest"
- }
- }
- }
- },
- "responses": {
- "200": {
- "description": "The stored node pool.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/PoolResponse"
- }
- }
- }
- },
- "400": {
- "description": "`pool.invalid`: the body has an unknown field or a value out of range. `pool.serverless_unsupported`: the body sets `serverless` or `kind: \"serverless\"`. `envoy.invalid_pool_name`: the pool name is not valid. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens. A body that is not valid JSON is rejected with a plain-text 400.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "pool",
- "code": "invalid",
- "message": "Node pool configuration is invalid."
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
- }
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
- }
- }
- },
- "404": {
- "description": "`namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
- }
- }
- }
- }
- },
- "415": {
- "description": "The request is missing the `Content-Type: application/json` header. Returned as plain text.",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure. Details are only logged on the server.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
- }
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
- }
- }
- }
- }
- },
- "security": [
- {
- "bearer_auth": []
- },
- {
- "rivet_token_header": []
- }
- ]
- },
- "delete": {
+ "paths": {
+ "/actors": {
+ "get": {
"tags": [
- "pools"
+ "actors::list"
],
- "summary": "Deletes a node pool. Fails while any node of the pool is connected.",
- "operationId": "pools_delete",
+ "summary": " ## Datacenter Round Trips",
+ "description": " **If key is some & `include_destroyed` is false**\n\n 2 round trips:\n - namespace::ops::resolve_for_name_global\n - GET /actors (multiple DCs based on actor IDs)\n\n\tThis path is optimized because we can read the actor IDs fro the key directly from Epoxy with\n\tstale consistency to determine which datacenter the actor lives in. Under most circumstances,\n\tthis means we don't need to fan out to all datacenters (like normal list does).\n\n\tThe reason `include_destroyed` has to be false is Epoxy only stores currently active actors. If\n\t`include_destroyed` is true, we show all previous iterations of actors with the same key.\n\n **Otherwise**\n\n 2 round trips:\n - namespace::ops::resolve_for_name_global\n - GET /actors (fanout)\n\n ## Optimized Alternative Routes",
+ "operationId": "actors_list",
"parameters": [
{
- "name": "pool",
- "in": "path",
+ "name": "namespace",
+ "in": "query",
"required": true,
- "description": "Name of the node pool. A DNS label of 1 to 63 lowercase letters, digits and hyphens.",
"schema": {
- "type": "string",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
+ "type": "string"
}
},
{
- "name": "namespace",
+ "name": "name",
"in": "query",
"required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
- "schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
- }
- }
- ],
- "responses": {
- "200": {
- "description": "The node pool was deleted.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/PoolsDeleteResponse"
- }
- }
- }
- },
- "400": {
- "description": "`envoy.invalid_pool_name`: the pool name is not valid. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "envoy",
- "code": "invalid_pool_name",
- "message": "Pool name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
- }
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
- }
- }
- },
- "404": {
- "description": "`pool.not_found`: the node pool does not exist. `namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "pool",
- "code": "not_found",
- "message": "The node pool does not exist."
- }
- }
- }
- }
- },
- "409": {
- "description": "`pool.nodes_connected`: the node pool still has connected nodes.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "pool",
- "code": "nodes_connected",
- "message": "The node pool still has connected nodes."
- }
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure. Details are only logged on the server.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
- }
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
- }
- }
- }
- }
- },
- "security": [
- {
- "bearer_auth": []
- },
- {
- "rivet_token_header": []
- }
- ]
- }
- },
- "/pools/{pool}/nodes": {
- "get": {
- "tags": [
- "pools"
- ],
- "summary": "Lists a page of the pool's live nodes in node key order. A node is listed while its heartbeat is recent enough for it to receive actors.",
- "operationId": "pools_list_nodes",
- "parameters": [
- {
- "name": "pool",
- "in": "path",
- "required": true,
- "description": "Name of the node pool. A DNS label of 1 to 63 lowercase letters, digits and hyphens.",
"schema": {
- "type": "string",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
+ "type": "string"
}
},
{
- "name": "namespace",
+ "name": "key",
"in": "query",
"required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
"schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
+ "type": "string"
}
},
{
- "name": "limit",
+ "name": "actor_ids",
"in": "query",
+ "description": "Deprecated.",
"required": false,
- "description": "Maximum number of results to return, from 1 to 100. Defaults to 100.",
"schema": {
- "type": "integer",
- "minimum": 1,
- "maximum": 100,
- "default": 100
+ "type": "string"
}
},
{
- "name": "cursor",
+ "name": "actor_id",
"in": "query",
"required": false,
- "description": "Opaque cursor from the previous response's `pagination.cursor`.",
"schema": {
- "type": "string"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "A page of live nodes.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/PoolsListNodesResponse"
- }
- }
- }
- },
- "400": {
- "description": "`actor.invalid_limit`: `limit` is not an integer from 1 to 100. `actor.invalid_cursor`: `cursor` is malformed. `envoy.invalid_pool_name`: the pool name is not valid. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "actor",
- "code": "invalid_limit",
- "message": "The actor listing limit must be an integer from 1 to 100."
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
- }
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
- }
- }
- },
- "404": {
- "description": "`namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
- }
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure. Details are only logged on the server.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
- }
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
- }
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/RivetId"
}
}
- }
- },
- "security": [
- {
- "bearer_auth": []
},
{
- "rivet_token_header": []
- }
- ]
- }
- },
- "/namespaces": {
- "get": {
- "tags": [
- "namespaces"
- ],
- "summary": "Lists namespaces in name order, or looks up one namespace by name. Requires the admin token.",
- "operationId": "namespaces_list",
- "parameters": [
- {
- "name": "name",
+ "name": "include_destroyed",
"in": "query",
"required": false,
- "description": "Only return the namespace with this name. The response then holds zero or one namespace, `pagination.cursor` is `null`, and `limit` and `cursor` are ignored.",
"schema": {
- "type": "string",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
+ "type": "boolean"
}
},
{
- "name": "cursor",
+ "name": "limit",
"in": "query",
"required": false,
- "description": "Name of the last namespace on the previous page. Pass the `pagination.cursor` value from the previous response.",
"schema": {
- "type": "string"
+ "type": "integer",
+ "minimum": 0
}
},
{
- "name": "limit",
+ "name": "cursor",
"in": "query",
"required": false,
- "description": "Maximum number of namespaces to return, from 1 to 100. Defaults to 100.",
"schema": {
- "type": "integer",
- "format": "int32",
- "minimum": 1,
- "maximum": 100,
- "default": 100
+ "type": "string"
}
}
],
"responses": {
"200": {
- "description": "A page of namespaces.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/NamespaceListResponse"
- }
- }
- }
- },
- "400": {
- "description": "`namespace.invalid`: `limit` is outside 1 to 100. `envoy.invalid_namespace_name`: `name` or `cursor` is not a valid namespace name. A query string with any other parameter, or a `limit` that is not a non-negative integer, is rejected with a plain-text 400.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "namespace",
- "code": "invalid",
- "message": "Namespace list limit must be between 1 and 100."
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
+ "$ref": "#/components/schemas/ActorsListResponse"
}
}
}
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request. Namespace management is only available to the admin token.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
- }
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ },
+ "put": {
+ "tags": [
+ "actors::get_or_create"
+ ],
+ "summary": "## Datacenter Round Trips",
+ "description": "**If actor exists**\n\n2 round trips:\n- namespace::ops::resolve_for_name_global\n- GET /actors/{}\n\n**If actor does not exist and is created in the current datacenter:**\n\n2 round trips:\n- namespace::ops::resolve_for_name_global\n- [pegboard::workflows::actor] Create actor workflow (includes Epoxy key allocation)\n\n**If actor does not exist and is created in a different datacenter:**\n\n3 round trips:\n- namespace::ops::resolve_for_name_global\n- POST /actors to remote datacenter\n- [pegboard::workflows::actor] Create actor workflow (includes Epoxy key allocation)\n\nactor::get will always be in the same datacenter.\n\n## Optimized Alternative Routes",
+ "operationId": "actors_get_or_create",
+ "parameters": [
+ {
+ "name": "namespace",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string"
}
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure. Details are only logged on the server.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ActorsGetOrCreateRequest"
}
}
},
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
+ "$ref": "#/components/schemas/ActorsGetOrCreateResponse"
}
}
}
@@ -1290,145 +153,43 @@
"security": [
{
"bearer_auth": []
- },
- {
- "rivet_token_header": []
}
]
},
"post": {
"tags": [
- "namespaces"
+ "actors::create"
+ ],
+ "summary": "## Datacenter Round Trips",
+ "description": "**If actor is created in the current datacenter:**\n\n2 round trips:\n- namespace::ops::resolve_for_name_global\n- [pegboard::workflows::actor] Create actor workflow (includes Epoxy key allocation)\n\n**If actor is created in a different datacenter:**\n\n3 round trips:\n- namespace::ops::resolve_for_name_global\n- POST /actors to remote datacenter\n- [pegboard::workflows::actor] Create actor workflow (includes Epoxy key allocation)\n\nactor::get will always be in the same datacenter.",
+ "operationId": "actors_create",
+ "parameters": [
+ {
+ "name": "namespace",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
],
- "summary": "Creates a namespace. Requires the admin token.",
- "operationId": "namespaces_create",
"requestBody": {
- "required": true,
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/NamespacesCreateRequest"
+ "$ref": "#/components/schemas/ActorsCreateRequest"
}
}
- }
+ },
+ "required": true
},
"responses": {
"200": {
- "description": "The created namespace.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/NamespacesCreateResponse"
- }
- }
- }
- },
- "400": {
- "description": "`envoy.invalid_namespace_name`: `name` is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
- }
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request. Namespace management is only available to the admin token.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
- }
- }
- },
- "409": {
- "description": "`namespace.name_not_unique`: a namespace with this name already exists.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "namespace",
- "code": "name_not_unique",
- "message": "A namespace with this name already exists."
- }
- }
- }
- }
- },
- "415": {
- "description": "The request is missing the `Content-Type: application/json` header. Returned as plain text.",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- },
- "422": {
- "description": "The JSON body does not match the request schema, for example a missing required field, a wrong type or an unknown field where unknown fields are rejected. Returned as plain text.",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure. Details are only logged on the server.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
- }
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
+ "$ref": "#/components/schemas/ActorsCreateResponse"
}
}
}
@@ -1437,96 +198,40 @@
"security": [
{
"bearer_auth": []
- },
- {
- "rivet_token_header": []
}
]
}
},
- "/actors": {
+ "/actors/names": {
"get": {
"tags": [
- "actors::list"
+ "actors::list_names"
],
- "summary": "Lists actors by IDs, by name and key, or by name. Only a listing by name is paginated.",
- "operationId": "actors_list",
+ "summary": "## Datacenter Round Trips",
+ "description": "2 round trips:\n- GET /actors/names (fanout)\n- [api-peer] namespace::ops::resolve_for_name_global",
+ "operationId": "actors_list_names",
"parameters": [
{
"name": "namespace",
"in": "query",
- "required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
- "schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
- }
- },
- {
- "name": "name",
- "in": "query",
- "required": false,
- "description": "Actor name. Required unless `actor_ids` or `actor_id` is set. Without `key`, lists every actor with this name, newest first.",
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "key",
- "in": "query",
- "required": false,
- "description": "Actor key in slash-separated form. Requires `name`. Returns at most one actor.",
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "actor_ids",
- "in": "query",
- "required": false,
- "description": "Comma-separated actor IDs to look up. Takes precedence over `actor_id`, `name` and `key`. IDs of missing actors or of actors in another namespace are skipped.",
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "actor_id",
- "in": "query",
- "required": false,
- "description": "Same as `actor_ids`, used when `actor_ids` is absent.",
+ "required": true,
"schema": {
"type": "string"
}
},
- {
- "name": "include_destroyed",
- "in": "query",
- "required": false,
- "description": "Include destroyed actors. Must be exactly `true` or `false`.",
- "schema": {
- "type": "boolean",
- "default": false
- }
- },
{
"name": "limit",
"in": "query",
"required": false,
- "description": "Maximum number of actors to return for a listing by name, from 1 to 100. Defaults to 100. A page can hold fewer actors even when more remain.",
"schema": {
"type": "integer",
- "minimum": 1,
- "maximum": 100,
- "default": 100
+ "minimum": 0
}
},
{
"name": "cursor",
"in": "query",
"required": false,
- "description": "Opaque cursor from the previous response's `pagination.cursor`. Only used for a listing by name.",
"schema": {
"type": "string"
}
@@ -1534,101 +239,107 @@
],
"responses": {
"200": {
- "description": "The matching actors.",
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ActorsListResponse"
+ "$ref": "#/components/schemas/ActorsListNamesResponse"
}
}
}
- },
- "400": {
- "description": "`actor.invalid_listing`: neither `name` nor actor IDs were given. `actor.invalid_include_destroyed`, `actor.invalid_limit`, `actor.invalid_cursor`: the parameter is malformed. `actor.invalid_key_encoding`: `key` is not in canonical slash-separated form. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "actor",
- "code": "invalid_listing",
- "message": "Listing actors requires a name or actor IDs."
- }
- }
- }
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ }
+ },
+ "/actors/{actor_id}": {
+ "delete": {
+ "tags": [
+ "actors::delete"
+ ],
+ "summary": "## Datacenter Round Trips",
+ "description": "2 round trip:\n- DELETE /actors/{}\n- [api-peer] namespace::ops::resolve_for_name_global",
+ "operationId": "actors_delete",
+ "parameters": [
+ {
+ "name": "actor_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/RivetId"
}
},
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
+ {
+ "name": "namespace",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string"
}
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request.",
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
+ "$ref": "#/components/schemas/ActorsDeleteResponse"
}
}
}
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ }
+ },
+ "/actors/{actor_id}/kv/keys/{key}": {
+ "get": {
+ "tags": [
+ "actors::kv_get"
+ ],
+ "operationId": "actors_kv_get",
+ "parameters": [
+ {
+ "name": "actor_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/RivetId"
+ }
},
- "404": {
- "description": "`namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
- }
- }
- }
+ {
+ "name": "key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
}
},
- "500": {
- "description": "`core.internal_error`: an unexpected failure, including an actor ID that is not a valid Rivet ID.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
+ {
+ "name": "namespace",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string"
}
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
+ "$ref": "#/components/schemas/ActorsKvGetResponse"
}
}
}
@@ -1637,174 +348,51 @@
"security": [
{
"bearer_auth": []
- },
- {
- "rivet_token_header": []
}
]
- },
+ }
+ },
+ "/actors/{actor_id}/reschedule": {
"post": {
"tags": [
- "actors::create"
+ "actors::reschedule"
],
- "summary": "Creates an actor and waits until its record exists. Fails if a live actor with the same name and key exists.",
- "operationId": "actors_create",
+ "operationId": "actors_reschedule",
"parameters": [
+ {
+ "name": "actor_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/RivetId"
+ }
+ },
{
"name": "namespace",
"in": "query",
- "required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
+ "required": true,
"schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
+ "type": "string"
}
}
],
"requestBody": {
- "required": true,
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ActorsCreateRequest"
+ "$ref": "#/components/schemas/ActorsRescheduleRequestBody"
}
}
- }
+ },
+ "required": true
},
"responses": {
"200": {
- "description": "The created actor.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ActorsCreateResponse"
- }
- }
- }
- },
- "400": {
- "description": "`actor.invalid_name`: `name` is empty or longer than 64 bytes. `actor.invalid_key`: `key` is longer than 1024 bytes. `actor.invalid_key_encoding`: `key` is not in canonical slash-separated form. `actor.key_owned_elsewhere`: another datacenter owns the key. `envoy.invalid_pool_name`: `runner_name_selector` is not a valid pool name. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "actor",
- "code": "invalid_name",
- "message": "Actor name must be 1 to 64 bytes."
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
- }
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
- }
- }
- },
- "404": {
- "description": "`namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
- }
- }
- }
- }
- },
- "409": {
- "description": "`actor.duplicate_key`: a live actor with this name and key already exists.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "actor",
- "code": "duplicate_key",
- "message": "Actor key already in use."
- }
- }
- }
- }
- },
- "415": {
- "description": "The request is missing the `Content-Type: application/json` header. Returned as plain text.",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- },
- "422": {
- "description": "The JSON body does not match the request schema, for example a missing required field, a wrong type or an unknown field where unknown fields are rejected. Returned as plain text.",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure, including `input` that is not valid base64 and a create that did not finish within 30 seconds.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
- }
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
+ "$ref": "#/components/schemas/ActorsRescheduleResponse"
}
}
}
@@ -1813,159 +401,136 @@
"security": [
{
"bearer_auth": []
- },
- {
- "rivet_token_header": []
}
]
- },
- "put": {
+ }
+ },
+ "/actors/{actor_id}/sleep": {
+ "post": {
"tags": [
- "actors::get_or_create"
+ "actors::sleep"
],
- "summary": "Returns the live actor with the given name and key, or creates it. Waking a sleeping actor is part of the lookup. Without a key, a new actor is always created.",
- "operationId": "actors_get_or_create",
+ "operationId": "actors_sleep",
"parameters": [
+ {
+ "name": "actor_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/RivetId"
+ }
+ },
{
"name": "namespace",
"in": "query",
- "required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
+ "required": true,
"schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
+ "type": "string"
}
}
],
"requestBody": {
- "required": true,
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ActorsGetOrCreateRequest"
+ "$ref": "#/components/schemas/ActorsSleepRequestBody"
}
}
- }
+ },
+ "required": true
},
"responses": {
"200": {
- "description": "The existing or created actor.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ActorsGetOrCreateResponse"
- }
- }
- }
- },
- "400": {
- "description": "`actor.invalid_name`: `name` is empty or longer than 64 bytes. `actor.invalid_key`: `key` is longer than 1024 bytes. `actor.invalid_key_encoding`: `key` is not in canonical slash-separated form. `actor.key_owned_elsewhere`: another datacenter owns the key. `envoy.invalid_pool_name`: `runner_name_selector` is not a valid pool name. `envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "actor",
- "code": "invalid_name",
- "message": "Actor name must be 1 to 64 bytes."
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
+ "$ref": "#/components/schemas/ActorsSleepResponse"
}
}
}
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ }
+ },
+ "/auth/tokens": {
+ "post": {
+ "tags": [
+ "auth::tokens"
+ ],
+ "operationId": "auth_tokens_create",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AuthTokenCreateRequest"
}
}
},
- "404": {
- "description": "`namespace.not_found`: the namespace does not exist.",
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
- }
- }
- }
- }
- },
- "415": {
- "description": "The request is missing the `Content-Type: application/json` header. Returned as plain text.",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- },
- "422": {
- "description": "The JSON body does not match the request schema, for example a missing required field, a wrong type or an unknown field where unknown fields are rejected. Returned as plain text.",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
+ "$ref": "#/components/schemas/AuthTokenCreateResponse"
}
}
}
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure, including `input` that is not valid base64 and a create that did not finish within 30 seconds.",
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ }
+ },
+ "/auth/tokens/inspect": {
+ "get": {
+ "tags": [
+ "auth::tokens"
+ ],
+ "operationId": "auth_tokens_inspect",
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
+ "$ref": "#/components/schemas/AuthTokenInspectResponse"
}
}
}
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ }
+ },
+ "/datacenters": {
+ "get": {
+ "tags": [
+ "datacenters"
+ ],
+ "operationId": "datacenters_list",
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
+ "$ref": "#/components/schemas/DatacentersListResponse"
}
}
}
@@ -1974,131 +539,220 @@
"security": [
{
"bearer_auth": []
- },
- {
- "rivet_token_header": []
}
]
}
},
- "/actors/names": {
+ "/envoys": {
"get": {
"tags": [
- "actors::list_names"
+ "envoys"
],
- "summary": "Lists the actor names that the namespace's connected nodes accept.",
- "operationId": "actors_list_names",
+ "operationId": "envoys_list",
"parameters": [
{
"name": "namespace",
"in": "query",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "envoy_key",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ {
+ "name": "cursor",
+ "in": "query",
"required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
"schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
+ "type": "string"
}
}
],
"responses": {
"200": {
- "description": "The actor names.",
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ActorsListNamesResponse"
+ "$ref": "#/components/schemas/EnvoysListResponse"
}
}
}
- },
- "400": {
- "description": "`envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ }
+ },
+ "/health/fanout": {
+ "get": {
+ "tags": [
+ "health"
+ ],
+ "operationId": "health_fanout",
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
- }
+ "$ref": "#/components/schemas/HealthFanoutResponse"
}
}
}
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ }
+ },
+ "/metadata": {
+ "get": {
+ "tags": [
+ "metadata"
+ ],
+ "summary": "Returns metadata about the API including runtime and version",
+ "operationId": "metadata_get",
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
+ "$ref": "#/components/schemas/MetadataGetResponse"
}
}
}
+ }
+ }
+ }
+ },
+ "/namespaces": {
+ "get": {
+ "tags": [
+ "namespaces"
+ ],
+ "operationId": "namespaces_list",
+ "parameters": [
+ {
+ "name": "limit",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "minimum": 0
+ }
},
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
- }
+ {
+ "name": "cursor",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string"
}
},
- "404": {
- "description": "`namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "namespace",
- "code": "not_found",
- "message": "The namespace does not exist."
- }
- }
- }
+ {
+ "name": "name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "namespace_ids",
+ "in": "query",
+ "description": "Deprecated.",
+ "required": false,
+ "schema": {
+ "type": "string"
}
},
- "500": {
- "description": "`core.internal_error`: an unexpected failure. Details are only logged on the server.",
+ {
+ "name": "namespace_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/RivetId"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
+ "$ref": "#/components/schemas/NamespaceListResponse"
}
}
}
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "namespaces"
+ ],
+ "operationId": "namespaces_create",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NamespacesCreateRequest"
+ }
+ }
},
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
+ "$ref": "#/components/schemas/NamespacesCreateResponse"
}
}
}
@@ -2107,140 +761,123 @@
"security": [
{
"bearer_auth": []
- },
- {
- "rivet_token_header": []
}
]
}
},
- "/actors/{actor_id}": {
+ "/runner-configs": {
"get": {
"tags": [
- "actors::get"
+ "runner_configs::list"
],
- "summary": "Returns one live actor.",
- "operationId": "actors_get",
+ "operationId": "runner_configs_list",
"parameters": [
{
- "name": "actor_id",
- "in": "path",
+ "name": "namespace",
+ "in": "query",
"required": true,
- "description": "ID of the actor.",
"schema": {
- "$ref": "#/components/schemas/RivetId"
+ "type": "string"
}
},
{
- "name": "namespace",
+ "name": "limit",
"in": "query",
"required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
"schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
+ "type": "integer",
+ "minimum": 0
}
- }
- ],
- "responses": {
- "200": {
- "description": "The actor.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ActorsGetResponse"
- }
- }
+ },
+ {
+ "name": "cursor",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string"
}
},
- "400": {
- "description": "`envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
- }
- }
- }
+ {
+ "name": "variant",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "$ref": "#/components/schemas/RunnerConfigVariant"
}
},
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
+ {
+ "name": "runner_names",
+ "in": "query",
+ "description": "Deprecated.",
+ "required": false,
+ "schema": {
+ "type": "string"
}
},
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request. For a namespace token this is also returned when the actor does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
+ {
+ "name": "runner_name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
}
}
- },
- "404": {
- "description": "`actor.not_found`: the actor does not exist, was destroyed, or belongs to another namespace. `namespace.not_found`: the namespace does not exist.",
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "actor",
- "code": "not_found",
- "message": "The actor does not exist or was destroyed."
- }
+ "$ref": "#/components/schemas/RunnerConfigsListResponse"
}
}
}
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure, including an `actor_id` that is not a valid Rivet ID.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ }
+ },
+ "/runner-configs/serverless-health-check": {
+ "post": {
+ "tags": [
+ "runner_configs::serverless_health_check"
+ ],
+ "operationId": "runner_configs_serverless_health_check",
+ "parameters": [
+ {
+ "name": "namespace",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RunnerConfigsServerlessHealthCheckRequest"
}
}
},
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
+ "$ref": "#/components/schemas/RunnerConfigsServerlessHealthCheckResponse"
}
}
}
@@ -2249,138 +886,92 @@
"security": [
{
"bearer_auth": []
- },
- {
- "rivet_token_header": []
}
]
- },
- "delete": {
+ }
+ },
+ "/runner-configs/{runner_name}": {
+ "put": {
"tags": [
- "actors::delete"
+ "runner_configs::upsert"
],
- "summary": "Destroys an actor.",
- "operationId": "actors_delete",
+ "operationId": "runner_configs_upsert",
"parameters": [
{
- "name": "actor_id",
+ "name": "runner_name",
"in": "path",
"required": true,
- "description": "ID of the actor.",
"schema": {
- "$ref": "#/components/schemas/RivetId"
+ "type": "string"
}
},
{
"name": "namespace",
"in": "query",
- "required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
+ "required": true,
"schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
+ "type": "string"
}
}
],
- "responses": {
- "200": {
- "description": "The destroy was accepted.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ActorsDeleteResponse"
- }
- }
- }
- },
- "400": {
- "description": "`envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RunnerConfigsUpsertRequestBody"
}
}
},
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request. For a namespace token this is also returned when the actor does not exist.",
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
+ "$ref": "#/components/schemas/RunnerConfigsUpsertResponse"
}
}
}
- },
- "404": {
- "description": "`actor.not_found`: the actor does not exist or belongs to another namespace. `namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "actor",
- "code": "not_found",
- "message": "The actor does not exist or was destroyed."
- }
- }
- }
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "runner_configs::delete"
+ ],
+ "operationId": "runner_configs_delete",
+ "parameters": [
+ {
+ "name": "runner_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
}
},
- "500": {
- "description": "`core.internal_error`: an unexpected failure, including an `actor_id` that is not a valid Rivet ID.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
+ {
+ "name": "namespace",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string"
}
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
+ "$ref": "#/components/schemas/RunnerConfigsDeleteResponse"
}
}
}
@@ -2389,140 +980,51 @@
"security": [
{
"bearer_auth": []
- },
- {
- "rivet_token_header": []
}
]
}
},
- "/actors/{actor_id}/sleep": {
+ "/runner-configs/{runner_name}/refresh-metadata": {
"post": {
"tags": [
- "actors::sleep"
+ "runner_configs::refresh_metadata"
],
- "summary": "Puts an actor to sleep. The request body is ignored.",
- "operationId": "actors_sleep",
+ "operationId": "runner_configs_refresh_metadata",
"parameters": [
{
- "name": "actor_id",
+ "name": "runner_name",
"in": "path",
"required": true,
- "description": "ID of the actor.",
"schema": {
- "$ref": "#/components/schemas/RivetId"
+ "type": "string"
}
},
{
"name": "namespace",
"in": "query",
- "required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
+ "required": true,
"schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
+ "type": "string"
}
}
],
- "responses": {
- "200": {
- "description": "The sleep was accepted.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ActorsSleepResponse"
- }
- }
- }
- },
- "400": {
- "description": "`envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
- }
- }
- }
- }
- },
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
- }
- },
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request. For a namespace token this is also returned when the actor does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
- }
- }
- }
- },
- "404": {
- "description": "`actor.not_found`: the actor does not exist or belongs to another namespace. `namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "actor",
- "code": "not_found",
- "message": "The actor does not exist or was destroyed."
- }
- }
- }
- }
- },
- "500": {
- "description": "`core.internal_error`: an unexpected failure, including an `actor_id` that is not a valid Rivet ID.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RunnerConfigsRefreshMetadataRequestBody"
}
}
},
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
+ "$ref": "#/components/schemas/RunnerConfigsRefreshMetadataResponse"
}
}
}
@@ -2531,140 +1033,140 @@
"security": [
{
"bearer_auth": []
- },
- {
- "rivet_token_header": []
}
]
}
},
- "/actors/{actor_id}/reschedule": {
- "post": {
+ "/runners": {
+ "get": {
"tags": [
- "actors::reschedule"
+ "runners"
],
- "summary": "Moves an actor to a new allocation. A running or stopping actor is stopped and allocated again, and a sleeping actor is allocated now. An actor that is still starting, or is destroyed, is left as is. The request body is ignored.",
- "operationId": "actors_reschedule",
+ "operationId": "runners_list",
"parameters": [
{
- "name": "actor_id",
- "in": "path",
+ "name": "namespace",
+ "in": "query",
"required": true,
- "description": "ID of the actor.",
"schema": {
- "$ref": "#/components/schemas/RivetId"
+ "type": "string"
}
},
{
- "name": "namespace",
+ "name": "name",
"in": "query",
"required": false,
- "description": "Name of the namespace to operate in. Defaults to `default`.",
"schema": {
- "type": "string",
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63
+ "type": "string"
}
- }
- ],
- "responses": {
- "200": {
- "description": "The reschedule was accepted, or there was nothing to move.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ActorsRescheduleResponse"
- }
- }
+ },
+ {
+ "name": "runner_ids",
+ "in": "query",
+ "description": "Deprecated.",
+ "required": false,
+ "schema": {
+ "type": "string"
}
},
- "400": {
- "description": "`envoy.invalid_namespace_name`: the `namespace` value is not a DNS label of 1 to 63 lowercase letters, digits and hyphens.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "envoy",
- "code": "invalid_namespace_name",
- "message": "Namespace name must be a DNS label of 1 to 63 lowercase letters, digits and hyphens."
- }
- }
+ {
+ "name": "runner_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/RivetId"
}
}
},
- "401": {
- "description": "`auth.invalid_token`: the request carries no token, or the token is not valid. `auth.token_expired`: the token has expired.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "invalid_token",
- "message": "Authentication token is invalid."
- }
- }
- }
+ {
+ "name": "include_stopped",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "minimum": 0
}
},
- "403": {
- "description": "`auth.insufficient_permissions`: the token's grants do not cover this request. For a namespace token this is also returned when the actor does not exist.",
+ {
+ "name": "cursor",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "insufficient_permissions",
- "message": "Insufficient permissions to access this resource."
- }
+ "$ref": "#/components/schemas/RunnersListResponse"
}
}
}
+ }
+ },
+ "security": [
+ {
+ "bearer_auth": []
+ }
+ ]
+ }
+ },
+ "/runners/names": {
+ "get": {
+ "tags": [
+ "runners"
+ ],
+ "summary": "## Datacenter Round Trips",
+ "description": "2 round trips:\n- GET /runners/names (fanout)\n- [api-peer] namespace::ops::resolve_for_name_global",
+ "operationId": "runners_list_names",
+ "parameters": [
+ {
+ "name": "namespace",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
},
- "404": {
- "description": "`actor.not_found`: the actor does not exist, has no record yet, or belongs to another namespace. `namespace.not_found`: the namespace does not exist.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "actor",
- "code": "not_found",
- "message": "The actor does not exist or was destroyed."
- }
- }
- }
+ {
+ "name": "limit",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "minimum": 0
}
},
- "500": {
- "description": "`core.internal_error`: an unexpected failure, including an `actor_id` that is not a valid Rivet ID.",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "core",
- "code": "internal_error",
- "message": "An internal error occurred"
- }
- }
- }
+ {
+ "name": "cursor",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string"
}
- },
- "503": {
- "description": "`auth.verification_unavailable`: token verification keys are temporarily unavailable. Retry the request.",
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ErrorResponse",
- "example": {
- "group": "auth",
- "code": "verification_unavailable",
- "message": "The server could not verify the authentication token because verification keys are temporarily unavailable. Retry the request."
- }
+ "$ref": "#/components/schemas/RunnersListNamesResponse"
}
}
}
@@ -2673,9 +1175,6 @@
"security": [
{
"bearer_auth": []
- },
- {
- "rivet_token_header": []
}
]
}
@@ -2688,92 +1187,98 @@
"required": [
"actor_id",
"name",
- "key",
- "namespace",
+ "namespace_id",
+ "datacenter",
"runner_name_selector",
- "create_ts",
- "start_ts",
- "pending_allocation_ts",
- "connectable_ts",
- "sleep_ts",
- "reschedule_ts",
- "destroy_ts"
+ "crash_policy",
+ "create_ts"
],
"properties": {
"actor_id": {
"$ref": "#/components/schemas/RivetId"
},
- "name": {
- "type": "string",
- "description": "Actor name."
- },
- "key": {
- "type": "string",
- "description": "Actor key in slash-separated form. An empty string for an actor without a key."
- },
- "namespace": {
- "type": "string",
- "description": "Name of the namespace the actor belongs to."
+ "connectable_ts": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int64",
+ "description": "Denotes when the actor was last connectable. Null if actor is not running."
},
- "runner_name_selector": {
- "type": "string",
- "description": "Name of the node pool the actor runs in."
+ "crash_policy": {
+ "$ref": "#/components/schemas/CrashPolicy"
},
"create_ts": {
"type": "integer",
"format": "int64",
- "description": "When the actor was created, in Unix milliseconds."
+ "description": "Denotes when the actor was first created."
},
- "start_ts": {
+ "datacenter": {
+ "type": "string"
+ },
+ "destroy_ts": {
"type": [
"integer",
"null"
],
"format": "int64",
- "description": "When the actor first started. Not recorded by this version, so always `null`."
+ "description": "Denotes when the actor was destroyed."
},
- "pending_allocation_ts": {
+ "error": {
"type": [
- "integer",
+ "object",
"null"
],
- "format": "int64",
- "description": "When the actor started waiting for a node. Not recorded by this version, so always `null`."
+ "description": "Error details if the actor failed to start."
},
- "connectable_ts": {
+ "key": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "name": {
+ "type": "string"
+ },
+ "namespace_id": {
+ "$ref": "#/components/schemas/RivetId"
+ },
+ "pending_allocation_ts": {
"type": [
"integer",
"null"
],
"format": "int64",
- "description": "When the actor last became connectable. Not recorded by this version, so always `null`."
+ "description": "Denotes when the actor started waiting for an allocation."
},
- "sleep_ts": {
+ "reschedule_ts": {
"type": [
"integer",
"null"
],
"format": "int64",
- "description": "When the actor went to sleep. Not recorded by this version, so always `null`."
+ "description": "Denotes when the actor will try to allocate again. If this is set, the actor will not attempt to\nallocate until the given timestamp."
},
- "reschedule_ts": {
+ "runner_name_selector": {
+ "type": "string"
+ },
+ "sleep_ts": {
"type": [
"integer",
"null"
],
"format": "int64",
- "description": "When the actor will next try to allocate. Not recorded by this version, so always `null`."
+ "description": "Denotes when the actor entered a sleeping state."
},
- "destroy_ts": {
+ "start_ts": {
"type": [
"integer",
"null"
],
"format": "int64",
- "description": "When the actor was destroyed, in Unix milliseconds. Only set in listings that include destroyed actors; otherwise `null`."
+ "description": "Denotes when the actor was first made connectable. Null if never."
}
- },
- "additionalProperties": false
+ }
},
"ActorName": {
"type": "object",
@@ -2784,109 +1289,101 @@
"metadata": {
"type": "object",
"additionalProperties": {},
- "description": "Metadata for the actor name. Currently always empty."
+ "propertyNames": {
+ "type": "string"
+ }
}
- },
- "additionalProperties": false
+ }
},
"ActorsCreateRequest": {
"type": "object",
- "description": "Unknown fields are ignored.",
"required": [
- "name"
+ "name",
+ "runner_name_selector",
+ "crash_policy"
],
"properties": {
- "name": {
- "type": "string",
- "minLength": 1,
- "maxLength": 64,
- "description": "Actor name, 1 to 64 bytes."
+ "crash_policy": {
+ "$ref": "#/components/schemas/CrashPolicy"
},
- "key": {
+ "datacenter": {
"type": [
"string",
"null"
- ],
- "maxLength": 1024,
- "description": "Actor key in canonical slash-separated form, at most 1024 bytes. Omit for an actor without a key."
+ ]
},
"input": {
"type": [
"string",
"null"
],
- "description": "Actor input as standard base64 (with padding)."
+ "description": "Arbitrary base64 encoded binary data."
},
- "runner_name_selector": {
+ "key": {
"type": [
"string",
"null"
- ],
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "description": "Name of the node pool to run the actor in. Defaults to `default`."
+ ]
+ },
+ "name": {
+ "type": "string"
+ },
+ "runner_name_selector": {
+ "type": "string"
}
- }
+ },
+ "additionalProperties": false
},
"ActorsCreateResponse": {
"type": "object",
"required": [
- "actor",
- "created"
+ "actor"
],
"properties": {
"actor": {
"$ref": "#/components/schemas/Actor"
- },
- "created": {
- "type": "boolean",
- "description": "Always `true`."
}
},
"additionalProperties": false
},
"ActorsDeleteResponse": {
- "type": "object",
- "additionalProperties": false
+ "type": "object"
},
"ActorsGetOrCreateRequest": {
"type": "object",
- "description": "Unknown fields are ignored.",
"required": [
- "name"
+ "name",
+ "key",
+ "runner_name_selector",
+ "crash_policy"
],
"properties": {
- "name": {
- "type": "string",
- "minLength": 1,
- "maxLength": 64,
- "description": "Actor name, 1 to 64 bytes."
+ "crash_policy": {
+ "$ref": "#/components/schemas/CrashPolicy"
},
- "key": {
+ "datacenter": {
"type": [
"string",
"null"
- ],
- "maxLength": 1024,
- "description": "Actor key in canonical slash-separated form, at most 1024 bytes. Without a key, a new actor is always created."
+ ]
},
"input": {
"type": [
"string",
"null"
- ],
- "description": "Actor input as standard base64 (with padding)."
+ ]
+ },
+ "key": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
},
"runner_name_selector": {
- "type": [
- "string",
- "null"
- ],
- "default": "default",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "description": "Name of the node pool to run the actor in. Defaults to `default`."
+ "type": "string"
}
- }
+ },
+ "additionalProperties": false
},
"ActorsGetOrCreateResponse": {
"type": "object",
@@ -2899,95 +1396,221 @@
"$ref": "#/components/schemas/Actor"
},
"created": {
- "type": "boolean",
- "description": "`true` if this request created the actor, `false` if it already existed."
+ "type": "boolean"
}
},
"additionalProperties": false
},
- "ActorsGetResponse": {
+ "ActorsKvGetResponse": {
"type": "object",
"required": [
- "actor"
+ "value",
+ "update_ts"
],
"properties": {
- "actor": {
- "$ref": "#/components/schemas/Actor"
+ "update_ts": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ActorsListNamesResponse": {
+ "type": "object",
+ "required": [
+ "names",
+ "pagination"
+ ],
+ "properties": {
+ "names": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ActorName"
+ },
+ "propertyNames": {
+ "type": "string"
+ }
+ },
+ "pagination": {
+ "$ref": "#/components/schemas/Pagination"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ActorsListResponse": {
+ "type": "object",
+ "required": [
+ "actors",
+ "pagination"
+ ],
+ "properties": {
+ "actors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Actor"
+ }
+ },
+ "pagination": {
+ "$ref": "#/components/schemas/Pagination"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ActorsRescheduleRequestBody": {
+ "type": "object",
+ "additionalProperties": false
+ },
+ "ActorsRescheduleResponse": {
+ "type": "object",
+ "additionalProperties": false
+ },
+ "ActorsSleepRequestBody": {
+ "type": "object",
+ "additionalProperties": false
+ },
+ "ActorsSleepResponse": {
+ "type": "object",
+ "additionalProperties": false
+ },
+ "AuthOperationKind": {
+ "type": "string",
+ "enum": [
+ "read",
+ "update",
+ "list",
+ "create",
+ "delete"
+ ]
+ },
+ "AuthTokenCreateRequest": {
+ "type": "object",
+ "required": [
+ "namespace",
+ "grants"
+ ],
+ "properties": {
+ "duration": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int64",
+ "minimum": 0
+ },
+ "grants": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/AuthTokenGrant"
+ }
+ },
+ "namespace": {
+ "type": "string"
+ },
+ "subject": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthTokenCreateResponse": {
+ "type": "object",
+ "required": [
+ "token",
+ "issued_ts",
+ "expires_ts"
+ ],
+ "properties": {
+ "expires_ts": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "issued_ts": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "token": {
+ "type": "string"
}
},
"additionalProperties": false
},
- "ActorsListNamesResponse": {
+ "AuthTokenGrant": {
"type": "object",
"required": [
- "names"
+ "resource",
+ "target",
+ "operations"
],
"properties": {
- "names": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/components/schemas/ActorName"
- },
- "propertyNames": {
- "type": "string"
- },
- "description": "Map from actor name to its metadata."
+ "operations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/AuthOperationKind"
+ }
+ },
+ "resource": {
+ "$ref": "#/components/schemas/AuthTokenResource"
+ },
+ "target": {
+ "$ref": "#/components/schemas/AuthTokenTargetScope"
}
},
"additionalProperties": false
},
- "ActorsListResponse": {
+ "AuthTokenInspectResponse": {
"type": "object",
"required": [
- "actors",
- "pagination"
+ "namespace_id",
+ "grants",
+ "issued_ts",
+ "expires_ts"
],
"properties": {
- "actors": {
+ "expires_ts": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "grants": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/Actor"
+ "$ref": "#/components/schemas/AuthTokenGrant"
}
},
- "pagination": {
- "$ref": "#/components/schemas/Pagination"
+ "issued_ts": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "namespace_id": {
+ "$ref": "#/components/schemas/RivetId"
+ },
+ "subject": {
+ "type": [
+ "string",
+ "null"
+ ]
}
},
"additionalProperties": false
},
- "ActorsRescheduleResponse": {
- "type": "object",
- "additionalProperties": false
- },
- "ActorsSleepResponse": {
- "type": "object",
- "additionalProperties": false
- },
- "AuthOperationKind": {
- "type": "string",
- "enum": [
- "read",
- "update",
- "list",
- "create",
- "delete"
- ]
- },
- "AuthResourceKind": {
+ "AuthTokenResource": {
"type": "string",
"enum": [
"namespace",
"actor",
- "node",
- "pool",
+ "runner",
+ "runner_config",
"datacenter",
"actor_gateway",
"actor_kv"
- ],
- "description": "Resource type a grant applies to."
+ ]
},
- "AuthTargetScope": {
- "description": "`\"any\"` for every resource of the type, or `{ \"id\": \"...\" }` for one resource.",
+ "AuthTokenTargetScope": {
"oneOf": [
{
"type": "string",
@@ -3004,159 +1627,199 @@
"id": {
"$ref": "#/components/schemas/RivetId"
}
- },
- "additionalProperties": false
+ }
}
]
},
- "AuthTokenCreateRequest": {
+ "CrashPolicy": {
+ "type": "string",
+ "enum": [
+ "restart",
+ "sleep",
+ "destroy"
+ ]
+ },
+ "Datacenter": {
"type": "object",
"required": [
- "namespace",
- "grants"
+ "label",
+ "name",
+ "url"
],
"properties": {
- "namespace": {
- "type": "string",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "description": "Name of the namespace the token is scoped to. It must exist."
- },
- "duration": {
- "type": [
- "integer",
- "null"
- ],
- "format": "int64",
- "minimum": 1,
- "description": "Token lifetime in seconds, from 1 to the deployment's maximum. Defaults to the deployment's configured duration."
+ "label": {
+ "type": "integer",
+ "format": "int32",
+ "minimum": 0
},
- "subject": {
- "type": [
- "string",
- "null"
- ],
- "description": "Opaque identifier of the end user, at most 256 UTF-8 bytes. Only used for correlation."
+ "name": {
+ "type": "string"
},
- "grants": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/AuthTokenGrant"
- },
- "minItems": 1,
- "maxItems": 32,
- "description": "Access the token carries within its namespace."
+ "url": {
+ "type": "string"
}
},
"additionalProperties": false
},
- "AuthTokenCreateResponse": {
+ "DatacenterHealth": {
"type": "object",
"required": [
- "token",
- "issued_ts",
- "expires_ts"
+ "datacenter_label",
+ "datacenter_name",
+ "status"
],
"properties": {
- "token": {
- "type": "string",
- "description": "The signed JWT.",
- "example": "eyJ..."
- },
- "issued_ts": {
+ "datacenter_label": {
"type": "integer",
- "format": "int64",
- "description": "When the token was issued, in Unix milliseconds."
+ "format": "int32",
+ "minimum": 0
},
- "expires_ts": {
- "type": "integer",
- "format": "int64",
- "description": "When the token expires, in Unix milliseconds."
+ "datacenter_name": {
+ "type": "string"
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "response": {
+ "oneOf": [
+ {
+ "type": "null"
+ },
+ {
+ "$ref": "#/components/schemas/HealthResponse"
+ }
+ ]
+ },
+ "rtt_ms": {
+ "type": [
+ "number",
+ "null"
+ ],
+ "format": "double"
+ },
+ "status": {
+ "$ref": "#/components/schemas/HealthStatus"
}
- },
- "additionalProperties": false
+ }
},
- "AuthTokenGrant": {
+ "DatacentersListResponse": {
"type": "object",
"required": [
- "resource",
- "target",
- "operations"
+ "datacenters",
+ "pagination"
],
"properties": {
- "resource": {
- "$ref": "#/components/schemas/AuthResourceKind"
- },
- "target": {
- "$ref": "#/components/schemas/AuthTargetScope"
- },
- "operations": {
+ "datacenters": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/AuthOperationKind"
- },
- "minItems": 1,
- "maxItems": 5,
- "description": "Operations the grant allows on the target."
+ "$ref": "#/components/schemas/Datacenter"
+ }
+ },
+ "pagination": {
+ "$ref": "#/components/schemas/Pagination"
}
},
"additionalProperties": false
},
- "AuthTokenInspectResponse": {
+ "Envoy": {
"type": "object",
"required": [
- "namespace",
- "subject",
- "grants",
- "issued_ts",
- "expires_ts"
+ "envoy_key",
+ "namespace_id",
+ "datacenter",
+ "pool_name",
+ "version",
+ "slots",
+ "create_ts",
+ "last_ping_ts",
+ "last_rtt"
],
"properties": {
- "namespace": {
- "type": "string",
- "description": "Name of the namespace the token is scoped to."
+ "create_ts": {
+ "type": "integer",
+ "format": "int64"
},
- "subject": {
+ "datacenter": {
+ "type": "string"
+ },
+ "envoy_key": {
+ "type": "string"
+ },
+ "last_connected_ts": {
"type": [
- "string",
+ "integer",
"null"
],
- "description": "Subject attached to the token, or `null`."
+ "format": "int64"
},
- "grants": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/AuthTokenGrant"
- },
- "description": "Access the token carries."
+ "last_ping_ts": {
+ "type": "integer",
+ "format": "int64"
},
- "issued_ts": {
+ "last_rtt": {
"type": "integer",
- "format": "int64",
- "description": "When the token was issued, in Unix milliseconds."
+ "format": "int32",
+ "minimum": 0
},
- "expires_ts": {
+ "metadata": {
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": {},
+ "propertyNames": {
+ "type": "string"
+ }
+ },
+ "namespace_id": {
+ "$ref": "#/components/schemas/RivetId"
+ },
+ "pool_name": {
+ "type": "string"
+ },
+ "slots": {
"type": "integer",
"format": "int64",
- "description": "When the token expires, in Unix milliseconds."
+ "minimum": 0
+ },
+ "stop_ts": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int64"
+ },
+ "version": {
+ "type": "integer",
+ "format": "int32",
+ "minimum": 0
}
},
"additionalProperties": false
},
- "Datacenter": {
+ "EnvoysListResponse": {
"type": "object",
"required": [
- "name"
+ "envoys",
+ "pagination"
],
"properties": {
- "name": {
- "type": "string",
- "description": "Datacenter name.",
- "example": "default"
+ "envoys": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Envoy"
+ }
+ },
+ "pagination": {
+ "$ref": "#/components/schemas/Pagination"
}
},
"additionalProperties": false
},
- "DatacentersListResponse": {
+ "HealthFanoutResponse": {
"type": "object",
"required": [
"datacenters"
@@ -3165,95 +1828,111 @@
"datacenters": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/Datacenter"
+ "$ref": "#/components/schemas/DatacenterHealth"
}
}
- },
- "additionalProperties": false
+ }
},
- "ErrorResponse": {
+ "HealthResponse": {
"type": "object",
- "description": "A structured error. The response also carries an `x-rivet-error: .` header.",
"required": [
- "group",
- "code",
- "message"
+ "runtime",
+ "status",
+ "version"
],
"properties": {
- "group": {
- "type": "string",
- "description": "Error group, for example `actor`."
- },
- "code": {
- "type": "string",
- "description": "Error code within the group, for example `not_found`."
+ "runtime": {
+ "type": "string"
},
- "message": {
- "type": "string",
- "description": "Human-readable error message."
+ "status": {
+ "type": "string"
},
- "metadata": {
- "description": "Extra details. Only present on some errors raised while authenticating or authorizing the request."
+ "version": {
+ "type": "string"
}
}
},
+ "HealthStatus": {
+ "type": "string",
+ "enum": [
+ "ok",
+ "error"
+ ]
+ },
"MetadataGetResponse": {
"type": "object",
"required": [
"runtime",
"version",
- "envoyProtocolVersion"
+ "git_sha",
+ "build_timestamp",
+ "rustc_version",
+ "rustc_host",
+ "cargo_target",
+ "cargo_profile",
+ "epoxy_protocol_version",
+ "envoy_protocol_version"
],
"properties": {
- "runtime": {
- "type": "string",
- "enum": [
- "engine"
- ],
- "description": "Always `engine`."
+ "build_timestamp": {
+ "type": "string"
},
- "version": {
- "type": "string",
- "description": "Version of the control plane."
+ "cargo_profile": {
+ "type": "string"
},
- "envoyProtocolVersion": {
+ "cargo_target": {
+ "type": "string"
+ },
+ "envoy_protocol_version": {
"type": "integer",
"format": "int32",
- "minimum": 0,
- "description": "Version of the protocol nodes use to connect to the control plane."
+ "minimum": 0
},
- "actorNames": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/components/schemas/ActorName"
- },
- "propertyNames": {
- "type": "string"
- },
- "description": "Actor names the default namespace's connected nodes accept. Only present for requests made with the admin token."
+ "epoxy_protocol_version": {
+ "type": "integer",
+ "format": "int32",
+ "minimum": 0
+ },
+ "git_sha": {
+ "type": "string"
+ },
+ "runtime": {
+ "type": "string"
+ },
+ "rustc_host": {
+ "type": "string"
+ },
+ "rustc_version": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
}
- },
- "additionalProperties": false
+ }
},
"Namespace": {
"type": "object",
"required": [
+ "namespace_id",
"name",
+ "display_name",
"create_ts"
],
"properties": {
- "name": {
- "type": "string",
- "description": "Namespace name.",
- "example": "my-namespace"
- },
"create_ts": {
"type": "integer",
- "format": "int64",
- "description": "When the namespace was created, in Unix milliseconds."
+ "format": "int64"
+ },
+ "display_name": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "namespace_id": {
+ "$ref": "#/components/schemas/RivetId"
}
- },
- "additionalProperties": false
+ }
},
"NamespaceListResponse": {
"type": "object",
@@ -3277,14 +1956,15 @@
"NamespacesCreateRequest": {
"type": "object",
"required": [
- "name"
+ "name",
+ "display_name"
],
"properties": {
+ "display_name": {
+ "type": "string"
+ },
"name": {
- "type": "string",
- "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
- "maxLength": 63,
- "description": "Immutable namespace name. A DNS label of 1 to 63 lowercase letters, digits and hyphens."
+ "type": "string"
}
},
"additionalProperties": false
@@ -3301,185 +1981,520 @@
},
"additionalProperties": false
},
- "Node": {
+ "Pagination": {
+ "type": "object",
+ "properties": {
+ "cursor": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "RivetId": {
+ "type": "string"
+ },
+ "Runner": {
"type": "object",
"required": [
- "key",
- "pool",
- "namespace",
+ "runner_id",
+ "namespace_id",
"datacenter",
+ "name",
+ "key",
+ "version",
+ "total_slots",
+ "remaining_slots",
"create_ts",
"last_ping_ts",
- "connected",
- "stopping"
+ "last_rtt"
],
"properties": {
- "key": {
- "type": "string",
- "description": "Node key, unique within the pool.",
- "example": "node-1"
+ "create_ts": {
+ "type": "integer",
+ "format": "int64"
},
- "pool": {
- "type": "string",
- "description": "Name of the node pool."
+ "datacenter": {
+ "type": "string"
},
- "namespace": {
- "type": "string",
- "description": "Name of the namespace."
+ "drain_ts": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int64"
},
- "datacenter": {
- "type": "string",
- "description": "Datacenter name.",
- "example": "default"
+ "key": {
+ "type": "string"
},
- "create_ts": {
- "type": "integer",
- "format": "int64",
- "description": "When the node connected, in Unix milliseconds."
+ "last_connected_ts": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int64"
},
"last_ping_ts": {
"type": "integer",
- "format": "int64",
- "description": "When the node last sent a heartbeat, in Unix milliseconds."
+ "format": "int64"
},
- "connected": {
- "type": "boolean",
- "description": "Whether the node is connected."
+ "last_rtt": {
+ "type": "integer",
+ "format": "int32",
+ "minimum": 0
},
- "stopping": {
- "type": "boolean",
- "description": "Whether the node is shutting down."
- }
- },
- "additionalProperties": false
- },
- "Pagination": {
- "type": "object",
- "required": [
- "cursor"
- ],
- "properties": {
- "cursor": {
+ "metadata": {
"type": [
- "string",
+ "object",
"null"
],
- "description": "Cursor for the next page, or `null` when there are no more results."
- }
- },
- "additionalProperties": false
- },
- "Pool": {
- "type": "object",
- "required": [
- "name",
- "drain_on_version_upgrade",
- "actor_eviction_delay",
- "actor_eviction_period",
- "actor_eviction_rate",
- "metadata"
- ],
- "properties": {
+ "additionalProperties": {},
+ "propertyNames": {
+ "type": "string"
+ }
+ },
"name": {
- "type": "string",
- "description": "Name of the node pool.",
- "example": "default"
+ "type": "string"
+ },
+ "namespace_id": {
+ "$ref": "#/components/schemas/RivetId"
+ },
+ "remaining_slots": {
+ "type": "integer",
+ "format": "int32",
+ "minimum": 0
},
- "drain_on_version_upgrade": {
- "type": "boolean",
- "description": "Drain nodes running an older version when a newer version connects."
+ "runner_id": {
+ "$ref": "#/components/schemas/RivetId"
+ },
+ "stop_ts": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int64"
},
- "actor_eviction_delay": {
+ "total_slots": {
"type": "integer",
"format": "int32",
- "minimum": 0,
- "maximum": 86400,
- "description": "Seconds to wait before evicting actors from a draining node."
+ "minimum": 0
},
- "actor_eviction_period": {
+ "version": {
"type": "integer",
"format": "int32",
- "minimum": 0,
- "maximum": 86400,
- "description": "Seconds over which actors are evicted from a draining node."
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false
+ },
+ "RunnerConfig": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RunnerConfigKind"
},
- "actor_eviction_rate": {
- "type": "number",
- "format": "double",
- "exclusiveMinimum": 0,
- "description": "Rate at which actors are evicted from a draining node. Must be finite and greater than 0."
+ {
+ "type": "object",
+ "properties": {
+ "drain_on_version_upgrade": {
+ "type": [
+ "boolean",
+ "null"
+ ],
+ "description": "Deprecated."
+ },
+ "metadata": {}
+ }
+ }
+ ]
+ },
+ "RunnerConfigKind": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "normal"
+ ],
+ "properties": {
+ "normal": {
+ "type": "object",
+ "properties": {
+ "actor_eviction_delay": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int32",
+ "description": "Seconds.",
+ "minimum": 0
+ },
+ "actor_eviction_period": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int32",
+ "description": "Seconds.",
+ "minimum": 0
+ },
+ "actor_eviction_rate": {
+ "type": [
+ "number",
+ "null"
+ ],
+ "format": "float",
+ "description": "Actors per second."
+ },
+ "drain_on_version_upgrade": {
+ "type": [
+ "boolean",
+ "null"
+ ]
+ }
+ }
+ }
+ }
},
- "metadata": {
- "description": "Opaque JSON stored with the pool, or `null` when unset.",
- "example": null
+ {
+ "type": "object",
+ "required": [
+ "serverless"
+ ],
+ "properties": {
+ "serverless": {
+ "type": "object",
+ "required": [
+ "url",
+ "request_lifespan"
+ ],
+ "properties": {
+ "actor_eviction_delay": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int32",
+ "description": "Seconds.",
+ "minimum": 0
+ },
+ "actor_eviction_period": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int32",
+ "description": "Seconds.",
+ "minimum": 0
+ },
+ "actor_eviction_rate": {
+ "type": [
+ "number",
+ "null"
+ ],
+ "format": "float",
+ "description": "Actors per second."
+ },
+ "drain_grace_period": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int32",
+ "description": "Seconds.",
+ "minimum": 0
+ },
+ "drain_on_version_upgrade": {
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "headers": {
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": {
+ "type": "string"
+ },
+ "propertyNames": {
+ "type": "string"
+ }
+ },
+ "max_concurrent_actors": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int64",
+ "minimum": 0
+ },
+ "max_runners": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int32",
+ "description": "Deprecated.",
+ "minimum": 0
+ },
+ "metadata_poll_interval": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int64",
+ "description": "Milliseconds between metadata polling. If not set, uses the global default.",
+ "minimum": 0
+ },
+ "min_runners": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int32",
+ "description": "Deprecated.",
+ "minimum": 0
+ },
+ "request_lifespan": {
+ "type": "integer",
+ "format": "int32",
+ "description": "Seconds.",
+ "minimum": 0
+ },
+ "runners_margin": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int32",
+ "description": "Deprecated.",
+ "minimum": 0
+ },
+ "slots_per_runner": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int32",
+ "description": "Deprecated.",
+ "minimum": 0
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "RunnerConfigResponse": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RunnerConfig"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "protocol_version": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "int32",
+ "minimum": 0
+ },
+ "runner_pool_error": {
+ "type": [
+ "object",
+ "null"
+ ]
+ }
+ }
+ }
+ ]
+ },
+ "RunnerConfigVariant": {
+ "type": "string",
+ "enum": [
+ "serverless",
+ "normal"
+ ]
+ },
+ "RunnerConfigsDeleteResponse": {
+ "type": "object"
+ },
+ "RunnerConfigsListResponse": {
+ "type": "object",
+ "required": [
+ "runner_configs",
+ "pagination"
+ ],
+ "properties": {
+ "pagination": {
+ "$ref": "#/components/schemas/Pagination"
+ },
+ "runner_configs": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/components/schemas/RunnerConfigsListResponseRunnerConfigsValue"
+ },
+ "propertyNames": {
+ "type": "string"
+ }
}
},
"additionalProperties": false
},
- "PoolResponse": {
+ "RunnerConfigsListResponseRunnerConfigsValue": {
"type": "object",
"required": [
- "pool"
+ "datacenters"
],
"properties": {
- "pool": {
- "$ref": "#/components/schemas/Pool"
+ "datacenters": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/components/schemas/RunnerConfigResponse"
+ },
+ "propertyNames": {
+ "type": "string"
+ }
}
}
},
- "PoolUpsertRequest": {
+ "RunnerConfigsRefreshMetadataRequestBody": {
+ "type": "object",
+ "additionalProperties": false
+ },
+ "RunnerConfigsRefreshMetadataResponse": {
+ "type": "object",
+ "additionalProperties": false
+ },
+ "RunnerConfigsServerlessHealthCheckRequest": {
"type": "object",
- "description": "Every field is optional. Unknown fields are rejected.",
+ "required": [
+ "url"
+ ],
"properties": {
- "drain_on_version_upgrade": {
- "type": "boolean",
- "default": false,
- "description": "Drain nodes running an older version when a newer version connects."
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "propertyNames": {
+ "type": "string"
+ }
},
- "actor_eviction_delay": {
- "type": "integer",
- "format": "int32",
- "minimum": 0,
- "maximum": 86400,
- "default": 0,
- "description": "Seconds to wait before evicting actors from a draining node."
+ "url": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "RunnerConfigsServerlessHealthCheckResponse": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "success"
+ ],
+ "properties": {
+ "success": {
+ "type": "object",
+ "required": [
+ "version"
+ ],
+ "properties": {
+ "version": {
+ "type": "string"
+ }
+ }
+ }
+ }
},
- "actor_eviction_period": {
- "type": "integer",
- "format": "int32",
- "minimum": 0,
- "maximum": 86400,
- "default": 0,
- "description": "Seconds over which actors are evicted from a draining node."
- },
- "actor_eviction_rate": {
- "type": "number",
- "format": "double",
- "exclusiveMinimum": 0,
- "default": 1,
- "description": "Rate at which actors are evicted from a draining node. Must be finite and greater than 0."
+ {
+ "type": "object",
+ "required": [
+ "failure"
+ ],
+ "properties": {
+ "failure": {
+ "type": "object",
+ "required": [
+ "error"
+ ],
+ "properties": {
+ "error": {
+ "$ref": "#/components/schemas/RunnerConfigsServerlessMetadataError"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "RunnerConfigsServerlessMetadataError": {
+ "type": "object",
+ "description": "Wire-format envelope for serverless metadata errors.\n\nSurfaced to API clients with a stable `{message, details, metadata}` shape\nregardless of which internal `ServerlessMetadataError` variant produced it.\n`metadata.kind` discriminates the variant; per-variant fields live alongside\n`kind`.",
+ "required": [
+ "message"
+ ],
+ "properties": {
+ "details": {
+ "type": [
+ "string",
+ "null"
+ ]
},
- "metadata": {
- "description": "Opaque JSON stored with the pool, at most 16 KiB when serialized."
+ "message": {
+ "type": "string"
+ },
+ "metadata": {}
+ }
+ },
+ "RunnerConfigsUpsertRequestBody": {
+ "type": "object",
+ "required": [
+ "datacenters"
+ ],
+ "properties": {
+ "datacenters": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/components/schemas/RunnerConfig"
+ },
+ "propertyNames": {
+ "type": "string"
+ }
}
},
"additionalProperties": false
},
- "PoolsDeleteResponse": {
+ "RunnerConfigsUpsertResponse": {
"type": "object",
- "additionalProperties": false
+ "required": [
+ "endpoint_config_changed"
+ ],
+ "properties": {
+ "endpoint_config_changed": {
+ "type": "boolean"
+ }
+ }
},
- "PoolsListNodesResponse": {
+ "RunnersListNamesResponse": {
"type": "object",
"required": [
- "nodes",
+ "names",
"pagination"
],
"properties": {
- "nodes": {
+ "names": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/Node"
+ "type": "string"
}
},
"pagination": {
@@ -3488,51 +2503,36 @@
},
"additionalProperties": false
},
- "PoolsListResponse": {
+ "RunnersListResponse": {
"type": "object",
"required": [
- "pools",
+ "runners",
"pagination"
],
"properties": {
"pagination": {
"$ref": "#/components/schemas/Pagination"
},
- "pools": {
+ "runners": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/Pool"
+ "$ref": "#/components/schemas/Runner"
}
}
},
"additionalProperties": false
- },
- "RivetId": {
- "type": "string",
- "description": "A Rivet ID: 30 lowercase base36 characters.",
- "example": "d97pbq1nyqxw1w5qdwz0iirbqiblh2"
}
},
"securitySchemes": {
"bearer_auth": {
"type": "http",
- "scheme": "bearer",
- "description": "The admin token or a namespace JWT from `POST /auth/tokens`."
- },
- "rivet_token_header": {
- "type": "apiKey",
- "in": "header",
- "name": "x-rivet-token",
- "description": "The same token sent in the `x-rivet-token` header instead of `Authorization`."
+ "scheme": "bearer"
}
}
},
"security": [
{
"bearer_auth": []
- },
- {
- "rivet_token_header": []
}
]
-}
+}
\ No newline at end of file
diff --git a/vendor/api/examples/docs/actors-quickstart-next-js/app/page.tsx b/vendor/api/examples/docs/actors-quickstart-next-js/app/page.tsx
new file mode 100644
index 00000000..a0c8ade1
--- /dev/null
+++ b/vendor/api/examples/docs/actors-quickstart-next-js/app/page.tsx
@@ -0,0 +1,5 @@
+import { Counter } from "../rivet/Counter";
+
+export default function Home() {
+ return ;
+}
diff --git a/vendor/api/examples/docs/actors-quickstart-next-js/rivet/Counter.tsx b/vendor/api/examples/docs/actors-quickstart-next-js/rivet/Counter.tsx
new file mode 100644
index 00000000..f13b0c67
--- /dev/null
+++ b/vendor/api/examples/docs/actors-quickstart-next-js/rivet/Counter.tsx
@@ -0,0 +1,23 @@
+"use client";
+
+import { createRivetKit } from "@rivetkit/next-js/client";
+import { useState } from "react";
+import type { registry } from "./registry";
+
+const { useActor } = createRivetKit({
+ endpoint: process.env.NEXT_PUBLIC_RIVET_ENDPOINT ?? "http://localhost:6420",
+});
+
+export function Counter() {
+ const [count, setCount] = useState(0);
+ const counter = useActor({ name: "counter", key: ["my-counter"] });
+
+ counter.useEvent("newCount", (value: number) => setCount(value));
+
+ return (
+