@stapel/workspaces-react 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/dist/api/generated/schema.d.ts +774 -7
- package/dist/api/generated/schema.d.ts.map +1 -1
- package/dist/api/types.d.ts +104 -7
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/workspacesApi.d.ts +55 -1
- package/dist/api/workspacesApi.d.ts.map +1 -1
- package/dist/api/workspacesApi.js +23 -0
- package/dist/api/workspacesApi.js.map +1 -1
- package/dist/default/InviteAcceptPage.d.ts +28 -0
- package/dist/default/InviteAcceptPage.d.ts.map +1 -0
- package/dist/default/InviteAcceptPage.js +141 -0
- package/dist/default/InviteAcceptPage.js.map +1 -0
- package/dist/default/MembersManager.d.ts +4 -4
- package/dist/default/MembersManager.d.ts.map +1 -1
- package/dist/default/MembersManager.js +61 -56
- package/dist/default/MembersManager.js.map +1 -1
- package/dist/default/index.d.ts +2 -0
- package/dist/default/index.d.ts.map +1 -1
- package/dist/default/index.js +1 -0
- package/dist/default/index.js.map +1 -1
- package/dist/flows/inviteAcceptFlow.d.ts +155 -0
- package/dist/flows/inviteAcceptFlow.d.ts.map +1 -0
- package/dist/flows/inviteAcceptFlow.js +126 -0
- package/dist/flows/inviteAcceptFlow.js.map +1 -0
- package/dist/headless/Can.d.ts +40 -0
- package/dist/headless/Can.d.ts.map +1 -0
- package/dist/headless/Can.js +30 -0
- package/dist/headless/Can.js.map +1 -0
- package/dist/headless/InviteAcceptFlow.d.ts +44 -0
- package/dist/headless/InviteAcceptFlow.d.ts.map +1 -0
- package/dist/headless/InviteAcceptFlow.js +67 -0
- package/dist/headless/InviteAcceptFlow.js.map +1 -0
- package/dist/headless/RoleSelect.d.ts +41 -0
- package/dist/headless/RoleSelect.d.ts.map +1 -0
- package/dist/headless/RoleSelect.js +34 -0
- package/dist/headless/RoleSelect.js.map +1 -0
- package/dist/i18n/generated/errors.gen.d.ts +48 -0
- package/dist/i18n/generated/errors.gen.d.ts.map +1 -1
- package/dist/i18n/generated/errors.gen.js +24 -0
- package/dist/i18n/generated/errors.gen.js.map +1 -1
- package/dist/i18n/generated/errors.ru.gen.d.ts.map +1 -1
- package/dist/i18n/generated/errors.ru.gen.js +8 -0
- package/dist/i18n/generated/errors.ru.gen.js.map +1 -1
- package/dist/i18n/keys.d.ts +28 -0
- package/dist/i18n/keys.d.ts.map +1 -1
- package/dist/i18n/keys.js +64 -0
- package/dist/i18n/keys.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +30 -0
- package/dist/i18n/ru.js.map +1 -1
- package/dist/index.d.ts +17 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/model/capabilities.d.ts +21 -0
- package/dist/model/capabilities.d.ts.map +1 -0
- package/dist/model/capabilities.js +32 -0
- package/dist/model/capabilities.js.map +1 -0
- package/dist/model/emailMask.d.ts +22 -0
- package/dist/model/emailMask.d.ts.map +1 -0
- package/dist/model/emailMask.js +36 -0
- package/dist/model/emailMask.js.map +1 -0
- package/dist/model/mutations.d.ts +107 -3
- package/dist/model/mutations.d.ts.map +1 -1
- package/dist/model/mutations.js +190 -1
- package/dist/model/mutations.js.map +1 -1
- package/dist/model/queries.d.ts +108 -2
- package/dist/model/queries.d.ts.map +1 -1
- package/dist/model/queries.js +139 -1
- package/dist/model/queries.js.map +1 -1
- package/dist/model/queryKeys.d.ts +12 -1
- package/dist/model/queryKeys.d.ts.map +1 -1
- package/dist/model/queryKeys.js +25 -0
- package/dist/model/queryKeys.js.map +1 -1
- package/dist/model/stepUp.d.ts +25 -0
- package/dist/model/stepUp.d.ts.map +1 -0
- package/dist/model/stepUp.js +79 -0
- package/dist/model/stepUp.js.map +1 -0
- package/llms.txt +49 -15
- package/manifest.json +346 -3
- package/package.json +5 -5
- package/src/analytics/generated/events.json +1 -1
- package/src/api/generated/schema.ts +774 -7
- package/src/api/types.ts +113 -7
- package/src/api/workspacesApi.ts +137 -0
- package/src/default/InviteAcceptPage.tsx +373 -0
- package/src/default/MembersManager.tsx +155 -145
- package/src/default/index.ts +2 -0
- package/src/flows/inviteAcceptFlow.ts +289 -0
- package/src/headless/Can.tsx +49 -0
- package/src/headless/InviteAcceptFlow.tsx +105 -0
- package/src/headless/RoleSelect.tsx +58 -0
- package/src/i18n/generated/errors.gen.ts +24 -0
- package/src/i18n/generated/errors.json +62 -0
- package/src/i18n/generated/errors.ru.gen.ts +8 -0
- package/src/i18n/keys.ts +68 -0
- package/src/i18n/ru.ts +34 -0
- package/src/index.ts +54 -1
- package/src/model/capabilities.ts +37 -0
- package/src/model/emailMask.ts +37 -0
- package/src/model/mutations.ts +248 -4
- package/src/model/queries.ts +205 -2
- package/src/model/queryKeys.ts +45 -1
- package/src/model/stepUp.ts +96 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
# @stapel/workspaces-react
|
|
2
2
|
|
|
3
|
+
## 0.8.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- f9c04aa: Ручки вчерашних релизов бэкенда стали вызываемыми с фронта.
|
|
8
|
+
|
|
9
|
+
`@stapel/workspaces-react` (контракт stapel-workspaces `>=0.14 <0.15`):
|
|
10
|
+
|
|
11
|
+
- `useInvitations` / `useInfiniteInvitations` — админская таблица приглашений
|
|
12
|
+
(`GET /{ws}/invitations`) с фильтрами `status` (`pending` / `never_accepted`
|
|
13
|
+
/ `all`) и `search`. Пагинация **якорная**, как у `useMembers`: страница
|
|
14
|
+
адресуется непрозрачным `next_anchor` предыдущей, номера страницы нет —
|
|
15
|
+
оффсет поехал бы ровно в тот момент, когда приглашение отзывают у админа
|
|
16
|
+
под руками.
|
|
17
|
+
- `useRevokeInvitation` / `useResendInvitation` — отзыв и повторная отправка;
|
|
18
|
+
обе возвращают обновлённый DTO. Ресенд ротирует токен и перезапускает TTL,
|
|
19
|
+
поэтому таблица инвалидируется: старый `expires_at` на экране врал бы про
|
|
20
|
+
живую креденцию.
|
|
21
|
+
- `useResetMemberPassword` — админский сброс пароля участнику.
|
|
22
|
+
`generated_password` приходит ровно один раз и **не попадает в кэш
|
|
23
|
+
запросов** (ничего не пишется через `setQueryData`, `gcTime: 0`): рантайм
|
|
24
|
+
ядра персистит весь пользовательский query-кэш в localStorage, так что
|
|
25
|
+
запись туда означала бы живой пароль на диске и в девтулзах.
|
|
26
|
+
- `useCapabilityGate` + порт `BUILTIN_CAPABILITY_LEVELS` — уровень `high` и
|
|
27
|
+
скоуп `sensitive` известны **до** кнопки, а не после 403.
|
|
28
|
+
`readVerificationEnrollment` отличает конверт «заведи фактор» (его ядро не
|
|
29
|
+
перехватывает — перехватывать нечего) от обычного челленджа.
|
|
30
|
+
- `useUpdateSecuritySettings` — `provisioned_user_policies` теперь список
|
|
31
|
+
независимых требований (#90), пустой список отправляется явно. Мердж
|
|
32
|
+
делается на клиенте: бэкенд присваивает `settings` целиком, и голый
|
|
33
|
+
`{security: …}` стёр бы остальные ключи.
|
|
34
|
+
|
|
35
|
+
`@stapel/profiles-react` (контракт stapel-profiles `>=0.9 <0.10`):
|
|
36
|
+
|
|
37
|
+
- `useProfilesBatch` — `POST /profiles/api/v1/batch`, один запрос вместо N.
|
|
38
|
+
`profileBatchEntry` отвечает четырьмя состояниями (`found` / `missing` /
|
|
39
|
+
`not_requested` / `unknown`): «профиля нет» — нормальное состояние и
|
|
40
|
+
плейсхолдер, «не спрашивали» — другое дело, и схлопывать их в `undefined`
|
|
41
|
+
значило бы вернуть тот самый дефект, ради которого батч и делался.
|
|
42
|
+
Найденные профили засеваются в кэш `useProfile`; для `missing` не
|
|
43
|
+
выдумывается ничего.
|
|
44
|
+
|
|
45
|
+
## 0.7.0
|
|
46
|
+
|
|
47
|
+
### Minor Changes
|
|
48
|
+
|
|
49
|
+
- 2f27177: Org-program wave (spec §A2/§B4/§E): mandate model surface + invite flow.
|
|
50
|
+
|
|
51
|
+
- **model**: `useCapabilities(wsId)` (reads `my_capabilities` off the workspace detail; wildcard-aware `can()`), `useRoles()` (GET /roles — the effective registry), `useInvitationPreview(token)` (AllowAny — deliberately NOT session-gated), `useClaimInvitation`, `useDeclineInvitation`. Backend-ported, semantics-synced utils: `capabilityMatches`/`hasCapability` (`*` and `prefix.*`) and `maskEmail`/`emailMatchesMask` (the preview's mask algorithm — drives §B4 session/email routing client-side without exposing the invitee's address).
|
|
52
|
+
- **headless**: `Can` (static-children gate + render-prop verdict; deny-by-default — UI convenience, backend re-checks), `RoleSelect` (registry-driven roles; labels via `workspaces.role.<key>` with client-bundle merge and RAW-name fallback), `InviteAcceptFlow` — the §B4 flow machine (preview → accept-prompt / wrong-account / login slot / claim → grant → basic-data slot → accept/decline, terminal `unavailable` for dead invites).
|
|
53
|
+
- **THE GRANT SEAM**: pairs don't depend on each other — `claim` hands the minted `grant_token` OUT via `onLoginGrant(grantToken)`; the HOST exchanges it at auth (`@stapel/auth-react`'s `exchangeLoginGrant`) and calls `grantExchanged()`. `InviteAcceptPage` automates the advance when the host callback's promise resolves.
|
|
54
|
+
- **default**: `InviteAcceptPage` (the `/invite/{token}` route component — every flow state, with `renderLoginPanel`/`renderInitialSetup` host slots for auth-react and profiles-react); `MembersManager` now takes its role options from the registry via `RoleSelect` instead of the hardcoded builtin four.
|
|
55
|
+
- **types**: `InvitationPreview`, `InvitationClaim`, `RoleInfo`, `RoleList`; `MemberRoleChange.role` widened to `string` (registry-extensible roles). Generated types regenerated against stapel-workspaces v0.8.0 — the 0.8 provision/suspension/security contract shapes are already carried; their model/headless/skins land in the next wave.
|
|
56
|
+
- **i18n**: `workspaces.role.*` (builtin four), `workspaces.invite.*` (all flow states), en + ru.
|
|
57
|
+
- Contract pin: stapel-workspaces → v0.8.0 (`df58135`), regen'd together.
|
|
58
|
+
|
|
3
59
|
## 0.6.0
|
|
4
60
|
|
|
5
61
|
### Minor Changes
|