Initial commit of eigent-main

This commit is contained in:
puzhen 2025-08-12 01:16:39 +02:00
commit 723df5a03e
1144 changed files with 103478 additions and 0 deletions

View file

@ -0,0 +1,511 @@
// src/interface/serverInterface.ts
import { KnownErrors } from "../known-errors";
import { StackAssertionError } from "../utils/errors";
import { filterUndefined } from "../utils/objects";
import { Result } from "../utils/results";
import { urlString } from "../utils/urls";
import {
StackClientInterface
} from "./clientInterface";
var StackServerInterface = class extends StackClientInterface {
constructor(options) {
super(options);
this.options = options;
}
async sendServerRequest(path, options, session, requestType = "server") {
return await this.sendClientRequest(
path,
{
...options,
headers: {
"x-stack-secret-server-key": "secretServerKey" in this.options ? this.options.secretServerKey : "",
...options.headers
}
},
session,
requestType
);
}
async sendServerRequestAndCatchKnownError(path, requestOptions, tokenStoreOrNull, errorsToCatch) {
try {
return Result.ok(await this.sendServerRequest(path, requestOptions, tokenStoreOrNull));
} catch (e) {
for (const errorType of errorsToCatch) {
if (errorType.isInstance(e)) {
return Result.error(e);
}
}
throw e;
}
}
async createServerUser(data) {
const response = await this.sendServerRequest(
"/users",
{
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify(data)
},
null
);
return await response.json();
}
async getServerUserByToken(session) {
const responseOrError = await this.sendServerRequestAndCatchKnownError(
"/users/me",
{},
session,
[KnownErrors.CannotGetOwnUserWithoutUser]
);
if (responseOrError.status === "error") {
if (KnownErrors.CannotGetOwnUserWithoutUser.isInstance(responseOrError.error)) {
return null;
} else {
throw new StackAssertionError("Unexpected uncaught error", { cause: responseOrError.error });
}
}
const response = responseOrError.data;
const user = await response.json();
if (!user) throw new StackAssertionError("User endpoint returned null; this should never happen");
return user;
}
async getServerUserById(userId) {
const responseOrError = await this.sendServerRequestAndCatchKnownError(
urlString`/users/${userId}`,
{},
null,
[KnownErrors.UserNotFound]
);
if (responseOrError.status === "error") {
return Result.error(responseOrError.error);
}
const user = await responseOrError.data.json();
return Result.ok(user);
}
async listServerTeamInvitations(options) {
const response = await this.sendServerRequest(
urlString`/team-invitations?team_id=${options.teamId}`,
{},
null
);
const result = await response.json();
return result.items;
}
async revokeServerTeamInvitation(invitationId, teamId) {
await this.sendServerRequest(
urlString`/team-invitations/${invitationId}?team_id=${teamId}`,
{ method: "DELETE" },
null
);
}
async listServerTeamMemberProfiles(options) {
const response = await this.sendServerRequest(
urlString`/team-member-profiles?team_id=${options.teamId}`,
{},
null
);
const result = await response.json();
return result.items;
}
async getServerTeamMemberProfile(options) {
const response = await this.sendServerRequest(
urlString`/team-member-profiles/${options.teamId}/${options.userId}`,
{},
null
);
return await response.json();
}
async listServerTeamPermissions(options, session) {
const response = await this.sendServerRequest(
`/team-permissions?${new URLSearchParams(filterUndefined({
user_id: options.userId,
team_id: options.teamId,
recursive: options.recursive.toString()
}))}`,
{},
session
);
const result = await response.json();
return result.items;
}
async listServerProjectPermissions(options, session) {
const response = await this.sendServerRequest(
`/project-permissions?${new URLSearchParams(filterUndefined({
user_id: options.userId,
recursive: options.recursive.toString()
}))}`,
{},
session
);
const result = await response.json();
return result.items;
}
async listServerUsers(options) {
const searchParams = new URLSearchParams(filterUndefined({
cursor: options.cursor,
limit: options.limit?.toString(),
desc: options.desc?.toString(),
...options.orderBy ? {
order_by: {
signedUpAt: "signed_up_at"
}[options.orderBy]
} : {},
...options.query ? {
query: options.query
} : {}
}));
const response = await this.sendServerRequest("/users?" + searchParams.toString(), {}, null);
return await response.json();
}
async listServerTeams(options) {
const response = await this.sendServerRequest(
`/teams?${new URLSearchParams(filterUndefined({
user_id: options?.userId
}))}`,
{},
null
);
const result = await response.json();
return result.items;
}
async getServerTeam(teamId) {
const response = await this.sendServerRequest(
`/teams/${teamId}`,
{},
null
);
return await response.json();
}
async listServerTeamUsers(teamId) {
const response = await this.sendServerRequest(`/users?team_id=${teamId}`, {}, null);
const result = await response.json();
return result.items;
}
/* when passing a session, the user will be added to the team */
async createServerTeam(data) {
const response = await this.sendServerRequest(
"/teams",
{
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify(data)
},
null
);
return await response.json();
}
async updateServerTeam(teamId, data) {
const response = await this.sendServerRequest(
urlString`/teams/${teamId}`,
{
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify(data)
},
null
);
return await response.json();
}
async deleteServerTeam(teamId) {
await this.sendServerRequest(
urlString`/teams/${teamId}`,
{ method: "DELETE" },
null
);
}
async addServerUserToTeam(options) {
const response = await this.sendServerRequest(
urlString`/team-memberships/${options.teamId}/${options.userId}`,
{
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({})
},
null
);
return await response.json();
}
async removeServerUserFromTeam(options) {
await this.sendServerRequest(
urlString`/team-memberships/${options.teamId}/${options.userId}`,
{
method: "DELETE",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({})
},
null
);
}
async updateServerUser(userId, update) {
const response = await this.sendServerRequest(
urlString`/users/${userId}`,
{
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify(update)
},
null
);
return await response.json();
}
async createServerProviderAccessToken(userId, provider, scope) {
const response = await this.sendServerRequest(
urlString`/connected-accounts/${userId}/${provider}/access-token`,
{
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({ scope })
},
null
);
return await response.json();
}
async createServerUserSession(userId, expiresInMillis, isImpersonation) {
const response = await this.sendServerRequest(
"/auth/sessions",
{
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
user_id: userId,
expires_in_millis: expiresInMillis,
is_impersonation: isImpersonation
})
},
null
);
const result = await response.json();
return {
accessToken: result.access_token,
refreshToken: result.refresh_token
};
}
async leaveServerTeam(options) {
await this.sendClientRequest(
urlString`/team-memberships/${options.teamId}/${options.userId}`,
{
method: "DELETE",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({})
},
null
);
}
async updateServerTeamMemberProfile(options) {
await this.sendServerRequest(
urlString`/team-member-profiles/${options.teamId}/${options.userId}`,
{
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify(options.profile)
},
null
);
}
async grantServerTeamUserPermission(teamId, userId, permissionId) {
await this.sendServerRequest(
urlString`/team-permissions/${teamId}/${userId}/${permissionId}`,
{
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({})
},
null
);
}
async grantServerProjectPermission(userId, permissionId) {
await this.sendServerRequest(
urlString`/project-permissions/${userId}/${permissionId}`,
{
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({})
},
null
);
}
async revokeServerTeamUserPermission(teamId, userId, permissionId) {
await this.sendServerRequest(
urlString`/team-permissions/${teamId}/${userId}/${permissionId}`,
{
method: "DELETE",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({})
},
null
);
}
async revokeServerProjectPermission(userId, permissionId) {
await this.sendServerRequest(
urlString`/project-permissions/${userId}/${permissionId}`,
{
method: "DELETE",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({})
},
null
);
}
async deleteServerUser(userId) {
await this.sendServerRequest(
urlString`/users/${userId}`,
{
method: "DELETE",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({})
},
null
);
}
async createServerContactChannel(data) {
const response = await this.sendServerRequest(
"/contact-channels",
{
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify(data)
},
null
);
return await response.json();
}
async updateServerContactChannel(userId, contactChannelId, data) {
const response = await this.sendServerRequest(
urlString`/contact-channels/${userId}/${contactChannelId}`,
{
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify(data)
},
null
);
return await response.json();
}
async deleteServerContactChannel(userId, contactChannelId) {
await this.sendServerRequest(
urlString`/contact-channels/${userId}/${contactChannelId}`,
{
method: "DELETE"
},
null
);
}
async listServerContactChannels(userId) {
const response = await this.sendServerRequest(
urlString`/contact-channels?user_id=${userId}`,
{
method: "GET"
},
null
);
const json = await response.json();
return json.items;
}
async sendServerContactChannelVerificationEmail(userId, contactChannelId, callbackUrl) {
await this.sendServerRequest(
urlString`/contact-channels/${userId}/${contactChannelId}/send-verification-code`,
{
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({ callback_url: callbackUrl })
},
null
);
}
async listServerSessions(userId) {
const response = await this.sendServerRequest(
urlString`/auth/sessions?user_id=${userId}`,
{
method: "GET"
},
null
);
return await response.json();
}
async deleteServerSession(sessionId) {
await this.sendServerRequest(
urlString`/auth/sessions/${sessionId}`,
{
method: "DELETE"
},
null
);
}
async sendServerTeamInvitation(options) {
await this.sendServerRequest(
"/team-invitations/send-code",
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
email: options.email,
team_id: options.teamId,
callback_url: options.callbackUrl
})
},
null
);
}
async updatePassword(options) {
const res = await this.sendServerRequestAndCatchKnownError(
"/auth/password/update",
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
old_password: options.oldPassword,
new_password: options.newPassword
})
},
null,
[KnownErrors.PasswordConfirmationMismatch, KnownErrors.PasswordRequirementsNotMet]
);
if (res.status === "error") {
return res.error;
}
}
};
export {
StackServerInterface
};
//# sourceMappingURL=serverInterface.js.map