import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";import { Schema } from "effect";import { UserStoreError, WorkOSError } from "../auth/errors"; export class Forbidden extends Schema.TaggedErrorClass<Forbidden>()( "Forbidden", {}, { httpApiStatus: 403 },) {} const OrgMember = Schema.Struct({ id: Schema.String, userId: Schema.String, email: Schema.String, name: Schema.NullOr(Schema.String), avatarUrl: Schema.NullOr(Schema.String), role: Schema.String, status: Schema.String, lastActiveAt: Schema.NullOr(Schema.String), isCurrentUser: Schema.Boolean,}); const OrgMembersResponse = Schema.Struct({ members: Schema.Array(OrgMember),}); const OrgRole = Schema.Struct({ slug: Schema.String, name: Schema.String,}); const OrgRolesResponse = Schema.Struct({ roles: Schema.Array(OrgRole),}); const InviteBody = Schema.Struct({ email: Schema.String, roleSlug: Schema.optional(Schema.String),}); const InviteResponse = Schema.Struct({ id: Schema.String, email: Schema.String,}); const MembershipParams = { membershipId: Schema.String }; const RemoveResponse = Schema.Struct({ success: Schema.Boolean,}); const UpdateRoleBody = Schema.Struct({ roleSlug: Schema.String,}); const UpdateRoleResponse = Schema.Struct({ success: Schema.Boolean,}); const UpdateOrgNameBody = Schema.Struct({ name: Schema.String,}); const UpdateOrgNameResponse = Schema.Struct({ name: Schema.String,}); const DomainItem = Schema.Struct({ id: Schema.String, domain: Schema.String, state: Schema.String, verificationToken: Schema.optional(Schema.String), verificationPrefix: Schema.optional(Schema.String),}); const DomainsResponse = Schema.Struct({ domains: Schema.Array(DomainItem),}); const DomainVerificationLinkResponse = Schema.Struct({ link: Schema.String,}); const DomainParams = { domainId: Schema.String }; export { OrgMember, OrgMembersResponse }; export class OrgApi extends HttpApiGroup.make("org") .add( HttpApiEndpoint.get("listMembers", "/org/members", { success: OrgMembersResponse, error: WorkOSError, }), ) .add( HttpApiEndpoint.get("listRoles", "/org/roles", { success: OrgRolesResponse, error: WorkOSError, }), ) .add( HttpApiEndpoint.post("invite", "/org/invite", { payload: InviteBody, success: InviteResponse, error: [WorkOSError, Forbidden], }), ) .add( HttpApiEndpoint.delete("removeMember", "/org/members/:membershipId", { params: MembershipParams, success: RemoveResponse, error: [WorkOSError, Forbidden], }), ) .add( HttpApiEndpoint.patch("updateMemberRole", "/org/members/:membershipId/role", { params: MembershipParams, payload: UpdateRoleBody, success: UpdateRoleResponse, error: [WorkOSError, Forbidden], }), ) .add( HttpApiEndpoint.get("listDomains", "/org/domains", { success: DomainsResponse, error: WorkOSError, }), ) .add( HttpApiEndpoint.post("getDomainVerificationLink", "/org/domains/verify-link", { success: DomainVerificationLinkResponse, error: [WorkOSError, Forbidden], }), ) .add( HttpApiEndpoint.delete("deleteDomain", "/org/domains/:domainId", { params: DomainParams, success: RemoveResponse, error: [WorkOSError, Forbidden], }), ) .add( HttpApiEndpoint.patch("updateOrgName", "/org/name", { payload: UpdateOrgNameBody, success: UpdateOrgNameResponse, error: [WorkOSError, UserStoreError, Forbidden], }), ) {}
import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";
import { Schema } from "effect";
import { UserStoreError, WorkOSError } from "../auth/errors";
export class Forbidden extends Schema.TaggedErrorClass<Forbidden>()(
"Forbidden",
{},
{ httpApiStatus: 403 },
) {}
const OrgMember = Schema.Struct({
id: Schema.String,
userId: Schema.String,
email: Schema.String,
name: Schema.NullOr(Schema.String),
avatarUrl: Schema.NullOr(Schema.String),
role: Schema.String,
status: Schema.String,
lastActiveAt: Schema.NullOr(Schema.String),
isCurrentUser: Schema.Boolean,
});
const OrgMembersResponse = Schema.Struct({
members: Schema.Array(OrgMember),
});
const OrgRole = Schema.Struct({
slug: Schema.String,
name: Schema.String,
});
const OrgRolesResponse = Schema.Struct({
roles: Schema.Array(OrgRole),
});
const InviteBody = Schema.Struct({
email: Schema.String,
roleSlug: Schema.optional(Schema.String),
});
const InviteResponse = Schema.Struct({
id: Schema.String,
email: Schema.String,
});
const MembershipParams = { membershipId: Schema.String };
const RemoveResponse = Schema.Struct({
success: Schema.Boolean,
});
const UpdateRoleBody = Schema.Struct({
roleSlug: Schema.String,
});
const UpdateRoleResponse = Schema.Struct({
success: Schema.Boolean,
});
const UpdateOrgNameBody = Schema.Struct({
name: Schema.String,
});
const UpdateOrgNameResponse = Schema.Struct({
name: Schema.String,
});
const DomainItem = Schema.Struct({
id: Schema.String,
domain: Schema.String,
state: Schema.String,
verificationToken: Schema.optional(Schema.String),
verificationPrefix: Schema.optional(Schema.String),
});
const DomainsResponse = Schema.Struct({
domains: Schema.Array(DomainItem),
});
const DomainVerificationLinkResponse = Schema.Struct({
link: Schema.String,
});
const DomainParams = { domainId: Schema.String };
export { OrgMember, OrgMembersResponse };
export class OrgApi extends HttpApiGroup.make("org")
.add(
HttpApiEndpoint.get("listMembers", "/org/members", {
success: OrgMembersResponse,
error: WorkOSError,
}),
)
.add(
HttpApiEndpoint.get("listRoles", "/org/roles", {
success: OrgRolesResponse,
error: WorkOSError,
}),
)
.add(
HttpApiEndpoint.post("invite", "/org/invite", {
payload: InviteBody,
success: InviteResponse,
error: [WorkOSError, Forbidden],
}),
)
.add(
HttpApiEndpoint.delete("removeMember", "/org/members/:membershipId", {
params: MembershipParams,
success: RemoveResponse,
error: [WorkOSError, Forbidden],
}),
)
.add(
HttpApiEndpoint.patch("updateMemberRole", "/org/members/:membershipId/role", {
params: MembershipParams,
payload: UpdateRoleBody,
success: UpdateRoleResponse,
error: [WorkOSError, Forbidden],
}),
)
.add(
HttpApiEndpoint.get("listDomains", "/org/domains", {
success: DomainsResponse,
error: WorkOSError,
}),
)
.add(
HttpApiEndpoint.post("getDomainVerificationLink", "/org/domains/verify-link", {
success: DomainVerificationLinkResponse,
error: [WorkOSError, Forbidden],
}),
)
.add(
HttpApiEndpoint.delete("deleteDomain", "/org/domains/:domainId", {
params: DomainParams,
success: RemoveResponse,
error: [WorkOSError, Forbidden],
}),
)
.add(
HttpApiEndpoint.patch("updateOrgName", "/org/name", {
payload: UpdateOrgNameBody,
success: UpdateOrgNameResponse,
error: [WorkOSError, UserStoreError, Forbidden],
}),
) {}