Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 10 additions & 2 deletions engine/artifacts/openapi.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 9 additions & 11 deletions engine/packages/api-peer/src/actors/delete.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,16 @@ pub async fn delete(ctx: ApiCtx, path: DeletePath, query: DeleteQuery) -> Result
.next()
.ok_or_else(|| pegboard::errors::Actor::NotFound.build())?;

// If namespace is provided, verify the actor belongs to it
if let Some(namespace_name) = query.namespace {
let namespace = ctx
.op(namespace::ops::resolve_for_name_global::Input {
name: namespace_name,
})
.await?
.ok_or_else(|| namespace::errors::Namespace::NotFound.build())?;
// Verify the actor belongs to the specified namespace
let namespace = ctx
.op(namespace::ops::resolve_for_name_global::Input {
name: query.namespace,
})
.await?
.ok_or_else(|| namespace::errors::Namespace::NotFound.build())?;

if actor.namespace_id != namespace.namespace_id {
return Err(pegboard::errors::Actor::NotFound.build());
}
if actor.namespace_id != namespace.namespace_id {
return Err(pegboard::errors::Actor::NotFound.build());
}

let res = ctx
Expand Down
33 changes: 31 additions & 2 deletions engine/packages/api-peer/src/actors/kv_get.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use anyhow::*;
use base64::Engine;
use base64::prelude::BASE64_STANDARD;
use gas::prelude::*;
use pegboard_actor_kv as actor_kv;
use rivet_api_builder::ApiCtx;
use rivet_util::Id;
Expand All @@ -16,7 +17,9 @@ pub struct KvGetPath {

#[derive(Debug, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct KvGetQuery {}
pub struct KvGetQuery {
pub namespace: String,
}

#[derive(Serialize, ToSchema)]
#[schema(as = ActorsKvGetResponse)]
Expand All @@ -39,7 +42,33 @@ pub struct KvGetResponse {
),
)]
#[tracing::instrument(skip_all)]
pub async fn kv_get(ctx: ApiCtx, path: KvGetPath, _query: KvGetQuery) -> Result<KvGetResponse> {
pub async fn kv_get(ctx: ApiCtx, path: KvGetPath, query: KvGetQuery) -> Result<KvGetResponse> {
// Get the actor first to verify it exists
let actors_res = ctx
.op(pegboard::ops::actor::get::Input {
actor_ids: vec![path.actor_id],
fetch_error: false,
})
.await?;

let actor = actors_res
.actors
.into_iter()
.next()
.ok_or_else(|| pegboard::errors::Actor::NotFound.build())?;

// Verify the actor belongs to the specified namespace
let namespace = ctx
.op(namespace::ops::resolve_for_name_global::Input {
name: query.namespace,
})
.await?
.ok_or_else(|| namespace::errors::Namespace::NotFound.build())?;

if actor.namespace_id != namespace.namespace_id {
return Err(pegboard::errors::Actor::NotFound.build());
}

// Decode base64 key
let key_bytes = BASE64_STANDARD
.decode(&path.key)
Expand Down
28 changes: 21 additions & 7 deletions engine/packages/api-public/src/actors/kv_get.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,22 @@ use anyhow::Result;
use axum::response::{IntoResponse, Response};
use rivet_api_builder::{
ApiError,
extract::{Extension, Path},
extract::{Extension, Path, Query},
};
use rivet_api_util::request_remote_datacenter_raw;
use rivet_util::Id;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use utoipa::{IntoParams, ToSchema};

use crate::ctx::ApiCtx;

#[derive(Debug, Deserialize, Serialize, IntoParams)]
#[serde(deny_unknown_fields)]
#[into_params(parameter_in = Query)]
pub struct KvGetQuery {
pub namespace: String,
}

#[derive(Deserialize)]
#[serde(deny_unknown_fields)]
pub struct KvGetPath {
Expand All @@ -32,22 +39,27 @@ pub struct KvGetResponse {
params(
("actor_id" = Id, Path),
("key" = String, Path),
KvGetQuery,
),
responses(
(status = 200, body = KvGetResponse),
),
security(("bearer_auth" = [])),
)]
#[tracing::instrument(skip_all)]
pub async fn kv_get(Extension(ctx): Extension<ApiCtx>, Path(path): Path<KvGetPath>) -> Response {
match kv_get_inner(ctx, path).await {
pub async fn kv_get(
Extension(ctx): Extension<ApiCtx>,
Path(path): Path<KvGetPath>,
Query(query): Query<KvGetQuery>,
) -> Response {
match kv_get_inner(ctx, path, query).await {
Ok(response) => response,
Err(err) => ApiError::from(err).into_response(),
}
}

#[tracing::instrument(skip_all)]
async fn kv_get_inner(ctx: ApiCtx, path: KvGetPath) -> Result<Response> {
async fn kv_get_inner(ctx: ApiCtx, path: KvGetPath, query: KvGetQuery) -> Result<Response> {
use axum::Json;

ctx.auth().await?;
Expand All @@ -57,7 +69,9 @@ async fn kv_get_inner(ctx: ApiCtx, path: KvGetPath) -> Result<Response> {
actor_id: path.actor_id,
key: path.key,
};
let peer_query = rivet_api_peer::actors::kv_get::KvGetQuery {};
let peer_query = rivet_api_peer::actors::kv_get::KvGetQuery {
namespace: query.namespace,
};
let res = rivet_api_peer::actors::kv_get::kv_get(ctx.into(), peer_path, peer_query).await?;

Ok(Json(res).into_response())
Expand All @@ -71,7 +85,7 @@ async fn kv_get_inner(ctx: ApiCtx, path: KvGetPath) -> Result<Response> {
urlencoding::encode(&path.key)
),
axum::http::Method::GET,
Option::<&()>::None,
Some(&query),
Option::<&()>::None,
)
.await
Expand Down
2 changes: 1 addition & 1 deletion engine/packages/api-public/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ pub struct GetResponse {

/// Returns metadata about the API including runtime and version
#[utoipa::path(
delete,
get,
operation_id = "metadata_get",
path = "/metadata",
responses(
Expand Down
2 changes: 1 addition & 1 deletion engine/packages/api-types/src/actors/delete.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use utoipa::{IntoParams, ToSchema};
#[serde(deny_unknown_fields)]
#[into_params(parameter_in = Query)]
pub struct DeleteQuery {
pub namespace: Option<String>,
pub namespace: String,
}

#[derive(Serialize, Deserialize)]
Expand Down
12 changes: 8 additions & 4 deletions engine/sdks/go/api-full/client/client.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion engine/sdks/go/api-full/metadata/client.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion engine/sdks/go/api-full/types.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion engine/sdks/rust/api-full/rust/Cargo.toml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions engine/sdks/rust/api-full/rust/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion engine/sdks/rust/api-full/rust/docs/ActorsDeleteApi.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion engine/sdks/rust/api-full/rust/docs/ActorsKvGetApi.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion engine/sdks/rust/api-full/rust/docs/MetadataApi.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 3 additions & 5 deletions engine/sdks/rust/api-full/rust/src/apis/actors_delete_api.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading