feat(credentials): manage team members and rotate invites
Some checks are pending
CI / build (push) Waiting to run
test / test (push) Waiting to run

This commit is contained in:
Anthony Ettinger 2026-08-04 19:16:02 +00:00
parent fd253b0485
commit e4723f31b1
10 changed files with 531 additions and 61 deletions

View file

@ -1,6 +1,6 @@
{
"name": "@logicsrc/plugin-credential-sharing",
"version": "0.1.1",
"version": "0.1.2",
"description": "LogicSRC Credential Sharing OpenSpec plugin: portable, auditable secret sync across .env, Doppler, Railway, and GitHub Secrets.",
"type": "module",
"main": "./dist/index.js",

View file

@ -25,6 +25,7 @@ export interface RemoteTeam {
}
export interface RemoteMember {
id: string;
email: string;
role: "owner" | "admin" | "member";
status: "active" | "invited";
@ -136,12 +137,25 @@ export class TeamClient {
return this.request<{ members: RemoteMember[] }>("GET", `/teams/${encodeURIComponent(slug)}/members`);
}
invite(slug: string, email: string, role?: "owner" | "admin" | "member") {
return this.request<{ invite: { id: string; email: string; role: string; expiresAt: string }; emailSent: boolean; token?: string }>(
return this.request<{ invite: { id: string; email: string; role: string; expiresAt: number }; emailSent: boolean; resent: boolean; token?: string }>(
"POST",
`/teams/${encodeURIComponent(slug)}/invites`,
{ email, role }
);
}
updateMemberRole(slug: string, memberId: string, role: "owner" | "admin" | "member") {
return this.request<{ member: Pick<RemoteMember, "id" | "email" | "role" | "status"> }>(
"PATCH",
`/teams/${encodeURIComponent(slug)}/members/${encodeURIComponent(memberId)}`,
{ role }
);
}
removeMember(slug: string, memberId: string) {
return this.request<{ ok: boolean; removed: string; revokedVaultGrants: number; rotationRequired: boolean }>(
"DELETE",
`/teams/${encodeURIComponent(slug)}/members/${encodeURIComponent(memberId)}`
);
}
acceptInvite(token: string) {
return this.request<{ ok: boolean; team?: RemoteTeam }>("POST", "/invites/accept", { token });
}