Skip to content

Commit

Permalink
update engine API routes to include team slug
Browse files Browse the repository at this point in the history
  • Loading branch information
jnsdls committed Mar 4, 2025
1 parent 35ccf8f commit 2d8fde0
Show file tree
Hide file tree
Showing 9 changed files with 54 additions and 20 deletions.
8 changes: 6 additions & 2 deletions apps/dashboard/src/@3rdweb-sdk/react/hooks/useEngine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -232,13 +232,15 @@ export function useEngineUpdateDeployment() {

export type RemoveEngineFromDashboardIParams = {
instanceId: string;
teamIdOrSlug: string;
};

export async function removeEngineFromDashboard({
instanceId,
teamIdOrSlug,
}: RemoveEngineFromDashboardIParams) {
const res = await apiServerProxy({
pathname: `/v1/engine/${instanceId}`,
pathname: `/v1/teams/${teamIdOrSlug}/engine/${instanceId}`,
method: "DELETE",
});

Expand Down Expand Up @@ -273,18 +275,20 @@ export async function deleteCloudHostedEngine({
}

export type EditEngineInstanceParams = {
teamIdOrSlug: string;
instanceId: string;
name: string;
url: string;
};

export async function editEngineInstance({
teamIdOrSlug,
instanceId,
name,
url,
}: EditEngineInstanceParams) {
const res = await apiServerProxy({
pathname: `/v1/engine/${instanceId}`,
pathname: `/v1/teams/${teamIdOrSlug}/engine/${instanceId}`,
method: "PUT",
headers: {
"Content-Type": "application/json",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,15 @@ const formSchema = z.object({

type ImportEngineParams = z.infer<typeof formSchema>;

async function importEngine(data: ImportEngineParams) {
async function importEngine({
teamIdOrSlug,
...data
}: ImportEngineParams & { teamIdOrSlug: string }) {
// Instance URLs should end with a /.
const url = data.url.endsWith("/") ? data.url : `${data.url}/`;

const res = await apiServerProxy({
pathname: "/v1/engine",
pathname: `/v1/teams/${teamIdOrSlug}/engine`,
method: "POST",
headers: {
"Content-Type": "application/json",
Expand All @@ -59,7 +62,7 @@ export function EngineImportCard(props: {
<EngineImportCardUI
prefillImportUrl={props.prefillImportUrl}
importEngine={async (params) => {
await importEngine(params);
await importEngine({ ...params, teamIdOrSlug: props.teamSlug });
router.push(`/team/${props.teamSlug}/~/engine`);
}}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,15 @@ type RemovedEngineFromDashboard = (
) => Promise<void>;

export function EngineInstancesTable(props: {
teamIdOrSlug: string;
instances: EngineInstance[];
engineLinkPrefix: string;
}) {
const router = useDashboardRouter();

return (
<EngineInstancesTableUI
teamIdOrSlug={props.teamIdOrSlug}
instances={props.instances}
engineLinkPrefix={props.engineLinkPrefix}
deleteCloudHostedEngine={async (params) => {
Expand All @@ -100,6 +102,7 @@ export function EngineInstancesTable(props: {
}

export function EngineInstancesTableUI(props: {
teamIdOrSlug: string;
instances: EngineInstance[];
engineLinkPrefix: string;
deleteCloudHostedEngine: DeletedCloudHostedEngine;
Expand All @@ -124,6 +127,7 @@ export function EngineInstancesTableUI(props: {
{props.instances.map((instance) => (
<EngineInstanceRow
key={instance.id}
teamIdOrSlug={props.teamIdOrSlug}
instance={instance}
engineLinkPrefix={props.engineLinkPrefix}
deleteCloudHostedEngine={props.deleteCloudHostedEngine}
Expand All @@ -145,6 +149,7 @@ export function EngineInstancesTableUI(props: {
}

function EngineInstanceRow(props: {
teamIdOrSlug: string;
instance: EngineInstance;
engineLinkPrefix: string;
deleteCloudHostedEngine: DeletedCloudHostedEngine;
Expand Down Expand Up @@ -187,13 +192,15 @@ function EngineInstanceRow(props: {
</TableRow>

<EditModal
teamIdOrSlug={props.teamIdOrSlug}
instance={instance}
open={isEditModalOpen}
onOpenChange={setIsEditModalOpen}
editEngineInstance={props.editEngineInstance}
/>

<RemoveModal
teamIdOrSlug={props.teamIdOrSlug}
instance={instance}
onOpenChange={setIsRemoveModalOpen}
open={isRemoveModalOpen}
Expand Down Expand Up @@ -349,6 +356,7 @@ function EngineActionsDropdown(props: {

function EditModal(props: {
open: boolean;
teamIdOrSlug: string;
onOpenChange: (open: boolean) => void;
instance: EngineInstance;
editEngineInstance: EditedEngineInstance;
Expand All @@ -357,6 +365,7 @@ function EditModal(props: {
<Dialog open={props.open} onOpenChange={props.onOpenChange}>
<DialogContent className="overflow-hidden p-0">
<EditModalContent
teamIdOrSlug={props.teamIdOrSlug}
instance={props.instance}
editEngineInstance={props.editEngineInstance}
closeModal={() => props.onOpenChange(false)}
Expand All @@ -372,6 +381,7 @@ const editEngineFormSchema = z.object({
});

function EditModalContent(props: {
teamIdOrSlug: string;
instance: EngineInstance;
editEngineInstance: EditedEngineInstance;
closeModal: () => void;
Expand All @@ -396,6 +406,7 @@ function EditModalContent(props: {
onSubmit={form.handleSubmit((data) =>
editInstance.mutate(
{
teamIdOrSlug: props.teamIdOrSlug,
instanceId: props.instance.id,
name: data.name,
url: data.url,
Expand Down Expand Up @@ -475,6 +486,7 @@ function EditModalContent(props: {
}

function RemoveModal(props: {
teamIdOrSlug: string;
instance: EngineInstance;
open: boolean;
onOpenChange: (open: boolean) => void;
Expand All @@ -491,6 +503,7 @@ function RemoveModal(props: {
(instance.status === "active" && !instance.deploymentId) ? (
<RemoveEngineFromDashboardModalContent
instance={instance}
teamIdOrSlug={props.teamIdOrSlug}
close={() => onOpenChange(false)}
removeEngineFromDashboard={props.removeEngineFromDashboard}
/>
Expand All @@ -507,6 +520,7 @@ function RemoveModal(props: {
}

function RemoveEngineFromDashboardModalContent(props: {
teamIdOrSlug: string;
instance: EngineInstance;
close: () => void;
removeEngineFromDashboard: RemovedEngineFromDashboard;
Expand Down Expand Up @@ -552,6 +566,7 @@ function RemoveEngineFromDashboardModalContent(props: {
removeFromDashboard.mutate(
{
instanceId: instance.id,
teamIdOrSlug: props.teamIdOrSlug,
},
{
onSuccess: () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export const EngineInstancesList = (props: {
return (
<div className="flex grow flex-col">
<EngineInstancesTable
teamIdOrSlug={props.team_slug}
instances={props.instances}
engineLinkPrefix={engineLinkPrefix}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ export default async function Page(props: {
loginRedirect(`/team/${params.team_slug}/~/engine`);
}

const res = await getEngineInstances({ authToken });
const res = await getEngineInstances({
authToken,
teamIdOrSlug: params.team_slug,
});

return (
<EngineInstancesList
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export default async function Layout(props: {
}

const instance = await getEngineInstance({
teamIdOrSlug: params.team_slug,
authToken,
engineId: params.engineId,
accountId: account.id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { API_SERVER_URL } from "@/constants/env";
import type { EngineInstance } from "@3rdweb-sdk/react/hooks/useEngine";

export async function getEngineInstance(params: {
teamIdOrSlug: string;
authToken: string;
engineId: string;
accountId: string;
Expand All @@ -19,11 +20,14 @@ export async function getEngineInstance(params: {
return sandboxEngine;
}

const res = await fetch(`${API_SERVER_URL}/v1/engine/${params.engineId}`, {
headers: {
Authorization: `Bearer ${params.authToken}`,
const res = await fetch(
`${API_SERVER_URL}/v1/teams/${params.teamIdOrSlug}/engine/${params.engineId}`,
{
headers: {
Authorization: `Bearer ${params.authToken}`,
},
},
});
);

if (!res.ok) {
const errorMessage = await res.text();
Expand All @@ -33,8 +37,8 @@ export async function getEngineInstance(params: {
}

const json = (await res.json()) as {
data: EngineInstance;
result: EngineInstance;
};

return json.data;
return json.result;
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export async function engineInstancePageHandler(params: {
}

const instance = await getEngineInstance({
teamIdOrSlug: params.teamSlug,
authToken,
engineId: params.engineId,
accountId: account.id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@ import type { EngineInstance } from "@3rdweb-sdk/react/hooks/useEngine";

export async function getEngineInstances(params: {
authToken: string;
teamIdOrSlug: string;
}) {
const res = await fetch(`${API_SERVER_URL}/v1/engine`, {
headers: {
Authorization: `Bearer ${params.authToken}`,
const res = await fetch(
`${API_SERVER_URL}/v1/teams/${params.teamIdOrSlug}/engine`,
{
headers: {
Authorization: `Bearer ${params.authToken}`,
},
},
});
);

if (!res.ok) {
const errorMessage = await res.text();
Expand All @@ -20,12 +24,10 @@ export async function getEngineInstances(params: {
}

const json = (await res.json()) as {
data: {
instances: EngineInstance[];
};
result: EngineInstance[];
};

return {
data: json.data.instances,
data: json.result,
};
}

0 comments on commit 2d8fde0

Please sign in to comment.