> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# SDK JavaScript: workspaces e membros

> Crie e gerencie workspaces, convide membros, defina cargos e compartilhe aplicações com api.workspaces. Atue sobre uma aplicação compartilhada pelo id composto.

Um workspace compartilha aplicações com outros usuários da Square Cloud, cada um com um cargo. `api.workspaces` gerencia os workspaces, `api.workspaces.members` seus membros e `api.workspaces.apps` as aplicações compartilhadas.

Criar workspaces requer um plano Standard, Pro ou Enterprise.

Os exemplos usam o cliente `api` de [Criando o cliente](/pt-br/sdks/js/client#criando-o-cliente). `workspaceId` é o id de um workspace (`workspaces.list()` lista todos), `appId` o id de uma das suas aplicações e `memberId` o `id` de um membro.

## Workspaces

```typescript theme={"system"}
const { id, name } = await api.workspaces.create("My team");

const workspaces = await api.workspaces.list();
const workspace = await api.workspaces.get(id);

console.log(workspace.name, workspace.owner, workspace.createdAt);

for (const member of workspace.members) {
    console.log(member.id, member.name, member.group, member.joinedAt);
}
for (const app of workspace.applications) {
    console.log(app.id, app.name, app.lang, app.ram);
}

await api.workspaces.leave(id);  // as a member
await api.workspaces.delete(id); // as the owner
```

| Campo | Descrição |
| - | - |
| `id` | 32 caracteres hexadecimais (workspaces mais antigos mantêm um id de 40 caracteres) |
| `name` | Nome do workspace (de 1 a 32 caracteres) |
| `owner` | Id do usuário dono |
| `members` | `{ id, name, group, joinedAt }`. `name` é `null` quando não pode ser resolvido (uma conta excluída) |
| `applications` | `{ id, name, desc, ram, lang, domain?, custom? }` |
| `createdAt` | Data de criação |

O dono não pode sair (400 `CANNOT_LEAVE_OWNER`): exclua o workspace em vez disso.

## Membros

Adicionar um membro requer um **código de convite** que o membro gera com `members.inviteCode()`. O código é válido por **5 minutos**.

```typescript theme={"system"}
// The member runs this and sends you the code
const code = await api.workspaces.members.inviteCode();

// The owner adds them with a role
await api.workspaces.members.add(workspaceId, code, "maintain");

await api.workspaces.members.update(workspaceId, memberId, "view");
await api.workspaces.members.remove(workspaceId, memberId);
```

Cargos (`group`): `view`, `manager`, `maintain` e `admin`. Chamar um método que seu cargo não permite resulta em 403 `PERMISSION_DENIED`.

## Aplicações compartilhadas

```typescript theme={"system"}
await api.workspaces.apps.add(workspaceId, appId);
await api.workspaces.apps.remove(workspaceId, appId);
```

Um workspace pode conter até 100 aplicações (400 `APPLICATIONS_LIMIT_REACHED`).

### Atuando sobre uma aplicação compartilhada

Para atuar sobre uma aplicação compartilhada com você, passe o id composto `<appId>-<workspaceId>` para qualquer método de `api.apps`. `workspaces.get()` e `workspaces.list()` retornam ids brutos, então monte-o você mesmo:

```typescript theme={"system"}
const workspace = await api.workspaces.get(workspaceId);

for (const app of workspace.applications) {
    const status = await api.apps.status(`${app.id}-${workspace.id}`);
    console.log(app.name, status.running);
}

// Status of every app of the workspace in one request
const statuses = await api.apps.statusAll({ workspaceId });
```

## Erros

Exceto `workspaces.get()`, as rotas de workspace enviam os ids no corpo da requisição, então um id vazio nelas resulta em 400 `INVALID_ID` vindo do servidor, não em um erro local.

| Status | Código | Quando |
| - | - | - |
| 400 | `INVALID_NAME` | O nome não tem de 1 a 32 caracteres |
| 400 | `WORKSPACE_LIMIT_REACHED`, `MEMBERS_LIMIT_REACHED`, `APPLICATIONS_LIMIT_REACHED` | Um limite do plano ou do workspace foi atingido |
| 400 | `INVALID_CODE` | O código de convite está ausente, malformado ou expirado |
| 400 | `INVALID_GROUP` | O cargo não é `view`, `manager`, `maintain` nem `admin` |
| 400 | `CANNOT_INVITE_OWNER`, `CANNOT_EDIT_OWNER`, `CANNOT_LEAVE_OWNER` | A ação não se aplica ao dono |
| 400 | `MEMBER_ALREADY_ADDED`, `APP_ALREADY_IN_WORKSPACE` | Já está no workspace |
| 403 | `UPGRADE_REQUIRED` | O plano não permite criar workspaces |
| 403 | `PERMISSION_DENIED` | Seu cargo não permite a ação |
| 404 | `WORKSPACE_NOT_FOUND`, `MEMBER_NOT_FOUND`, `APP_NOT_FOUND` | Não encontrado |

## Próximos passos

<CardGroup cols={3}>
  <Card title="IA" icon="robot" href="/pt-br/sdks/js/ai">
    Chat completions pelo AI Gateway.
  </Card>

  <Card title="Referência da API de workspaces" icon="code" href="/pt-br/api-reference/endpoint/workspace/list">
    Os endpoints REST por trás destes métodos.
  </Card>

  <Card title="Workspaces pela CLI" icon="terminal" href="/pt-br/cli-reference/workspaces">
    As mesmas ações pelo terminal.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.