Skip to content

Commit ca87b92

Browse files
os-zhuangclaude
andcommitted
chore(client): remove dead projects.* env-member SDK methods (ADR-0024 D9)
The four projects.{listMembers,addMember,updateMemberRole,removeMember} methods called GET/POST/PATCH/DELETE /cloud/environments/:id/members, which were deleted in cloud#533 (retiring sys_environment_member); they returned 404. Org membership/invites now flow through the better-auth organization plugin (organization.inviteMember/listMembers/…); objectui already uses organization.* and no in-repo callers remained. The membership field on projects.get() is unchanged — cloud#533 still returns it on the single-env GET (re-sourced to the caller's org sys_member role), so cli environments/show.ts still works. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 1e8a813 commit ca87b92

2 files changed

Lines changed: 15 additions & 58 deletions

File tree

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
"@objectstack/client": patch
3+
---
4+
5+
chore(client): remove dead `projects.*` env-member SDK methods (cloud#533 / ADR-0024 D9)
6+
7+
Removes `projects.listMembers` / `addMember` / `updateMemberRole` / `removeMember`,
8+
which called `GET/POST/PATCH/DELETE /api/v1/cloud/environments/:id/members`. Those
9+
control-plane endpoints were deleted in cloud#533 (retiring `sys_environment_member`),
10+
so the methods returned 404. Org membership/invites now flow through the better-auth
11+
`organization` plugin (`organization.inviteMember` / `listMembers` / …); objectui
12+
already uses `organization.*` and no in-repo callers remained.
13+
14+
The `membership` field on the `projects.get()` response is unchanged — cloud#533 still
15+
returns it on the single-env GET (re-sourced to the caller's org `sys_member` role).

packages/client/src/index.ts

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -879,64 +879,6 @@ export class ObjectStackClient {
879879
return this.unwrapResponse<{ project: any }>(res);
880880
},
881881

882-
/**
883-
* List members of a project (per-project RBAC).
884-
*/
885-
listMembers: async (id: string) => {
886-
const res = await this.fetch(`${this.baseUrl}/api/v1/cloud/environments/${encodeURIComponent(id)}/members`);
887-
return this.unwrapResponse<{ members: any[] }>(res);
888-
},
889-
890-
/**
891-
* Invite a member to a project. Caller must be `owner` or `admin`.
892-
* Pass either `email` (resolved against the user table) or `user_id`.
893-
* Returns `{ member, alreadyMember }` — `alreadyMember=true` means the
894-
* row already existed; the call is idempotent.
895-
*/
896-
addMember: async (
897-
id: string,
898-
payload: { email?: string; user_id?: string; role?: 'owner' | 'admin' | 'member' | 'viewer' },
899-
) => {
900-
const res = await this.fetch(`${this.baseUrl}/api/v1/cloud/environments/${encodeURIComponent(id)}/members`, {
901-
method: 'POST',
902-
headers: { 'content-type': 'application/json' },
903-
body: JSON.stringify(payload),
904-
});
905-
return this.unwrapResponse<{ member: any; alreadyMember: boolean }>(res);
906-
},
907-
908-
/**
909-
* Update a member's role. Caller must be `owner` or `admin`. Demoting
910-
* the last `owner` returns 409.
911-
*/
912-
updateMemberRole: async (
913-
id: string,
914-
memberId: string,
915-
role: 'owner' | 'admin' | 'member' | 'viewer',
916-
) => {
917-
const res = await this.fetch(
918-
`${this.baseUrl}/api/v1/cloud/environments/${encodeURIComponent(id)}/members/${encodeURIComponent(memberId)}`,
919-
{
920-
method: 'PATCH',
921-
headers: { 'content-type': 'application/json' },
922-
body: JSON.stringify({ role }),
923-
},
924-
);
925-
return this.unwrapResponse<{ member: any }>(res);
926-
},
927-
928-
/**
929-
* Remove a member. Owners/admins may remove anyone; non-privileged
930-
* users may only remove themselves. Removing the last `owner` returns 409.
931-
*/
932-
removeMember: async (id: string, memberId: string) => {
933-
const res = await this.fetch(
934-
`${this.baseUrl}/api/v1/cloud/environments/${encodeURIComponent(id)}/members/${encodeURIComponent(memberId)}`,
935-
{ method: 'DELETE' },
936-
);
937-
return this.unwrapResponse<{ removed: boolean; memberId: string }>(res);
938-
},
939-
940882
/**
941883
* List ObjectQL drivers registered on the server. Useful for populating a
942884
* driver selector when provisioning a new project (memory / turso /

0 commit comments

Comments
 (0)