Skip to content

Commit 77cb88e

Browse files
committed
[public-api] Implement experimental TeamsService
1 parent a519cf1 commit 77cb88e

File tree

10 files changed

+80
-5
lines changed

10 files changed

+80
-5
lines changed

components/dashboard/BUILD.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ packages:
1717
- scripts/run-integration-tests.sh
1818
deps:
1919
- components/gitpod-protocol:lib
20+
- components/public-api/typescript:lib
2021
config:
2122
commands:
2223
build: ["yarn", "build"]

components/dashboard/package.json

+2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
"version": "0.0.0",
55
"private": true,
66
"dependencies": {
7+
"@bufbuild/connect-web": "^0.2.1",
78
"@gitpod/gitpod-protocol": "0.1.5",
9+
"@gitpod/public-api": "0.1.5",
810
"@stripe/react-stripe-js": "^1.7.2",
911
"@stripe/stripe-js": "^1.29.0",
1012
"configcat-js": "^6.0.0",

components/dashboard/src/projects/NewProject.tsx

+21
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { trackEvent } from "../Analytics";
2121
import exclamation from "../images/exclamation.svg";
2222
import ErrorMessage from "../components/ErrorMessage";
2323
import Spinner from "../icons/Spinner.svg";
24+
import { teamsService } from "../service/public-api";
2425

2526
export default function NewProject() {
2627
const location = useLocation();
@@ -729,6 +730,26 @@ function NewTeam(props: { onSuccess: (team: Team) => void }) {
729730
if (!teamName) {
730731
return;
731732
}
733+
734+
try {
735+
const response = await teamsService.createTeam({
736+
name: teamName,
737+
});
738+
const team = response.team;
739+
setTeams(await getGitpodService().server.getTeams());
740+
741+
const mappedTeam: Team = {
742+
id: team?.id || "",
743+
name: team?.name || "",
744+
slug: team?.slug || "",
745+
creationTime: "",
746+
};
747+
props.onSuccess(mappedTeam);
748+
return;
749+
} catch (error) {
750+
console.error(error);
751+
}
752+
732753
try {
733754
const team = await getGitpodService().server.createTeam(teamName);
734755
setTeams(await getGitpodService().server.getTeams());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* Copyright (c) 2022 Gitpod GmbH. All rights reserved.
3+
* Licensed under the GNU Affero General Public License (AGPL).
4+
* See License-AGPL.txt in the project root for license information.
5+
*/
6+
7+
import { createConnectTransport, createPromiseClient, Interceptor } from "@bufbuild/connect-web";
8+
9+
// Import service definition that you want to connect to.
10+
import { TeamsService } from "@gitpod/public-api/lib/gitpod/experimental/v1/teams_connectweb";
11+
import { getGitpodService } from "./service";
12+
13+
let token: string | undefined;
14+
15+
const authInterceptor: Interceptor = (next) => async (req) => {
16+
if (!token) {
17+
const newToken = await getGitpodService().server.generateNewGitpodToken({
18+
type: 1,
19+
scopes: [
20+
"function:getGitpodTokenScopes",
21+
"function:getWorkspace",
22+
"function:getWorkspaces",
23+
"function:createTeam",
24+
"function:joinTeam",
25+
"function:getTeamMembers",
26+
"function:listenForWorkspaceInstanceUpdates",
27+
"resource:default",
28+
],
29+
});
30+
token = newToken;
31+
}
32+
33+
req.header.set("Authorization", `Bearer ${token}`);
34+
return await next(req);
35+
};
36+
37+
const transport = createConnectTransport({
38+
baseUrl: `${window.location.protocol}//api.${window.location.host}`,
39+
interceptors: [authInterceptor],
40+
});
41+
42+
export const teamsService = createPromiseClient(TeamsService, transport);

components/dashboard/src/teams/NewTeam.tsx

+14
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { FormEvent, useContext, useEffect, useState } from "react";
88
import { useHistory } from "react-router-dom";
99
import { getGitpodService } from "../service/service";
1010
import { TeamsContext } from "./teams-context";
11+
import { teamsService } from "../service/public-api";
1112

1213
export default function () {
1314
const { setTeams } = useContext(TeamsContext);
@@ -17,6 +18,19 @@ export default function () {
1718
let name = "";
1819
const createTeam = async (event: FormEvent) => {
1920
event.preventDefault();
21+
try {
22+
const response = await teamsService.createTeam({
23+
name,
24+
});
25+
const team = response.team;
26+
setTeams(await getGitpodService().server.getTeams());
27+
28+
history.push(`/t/${team!.slug}`);
29+
return;
30+
} catch (error) {
31+
console.error(error);
32+
setCreationError(error);
33+
}
2034
try {
2135
const team = await getGitpodService().server.createTeam(name);
2236
const teams = await getGitpodService().server.getTeams();

components/public-api/typescript/src/gitpod/experimental/v1/pagination_pb.ts

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/public-api/typescript/src/gitpod/experimental/v1/teams_connectweb.ts

-1
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,3 @@ export const TeamsService = {
3131
},
3232
}
3333
} as const;
34-

components/public-api/typescript/src/gitpod/experimental/v1/teams_pb.ts

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/public-api/typescript/src/gitpod/experimental/v1/workspaces_connectweb.ts

-1
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,3 @@ export const WorkspacesService = {
7878
},
7979
}
8080
} as const;
81-

components/public-api/typescript/src/gitpod/experimental/v1/workspaces_pb.ts

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)