@fusebase/fusebase-gate-sdk 2.3.15 → 2.3.16-sdk.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/package.json
CHANGED
package/release-notes/latest.md
CHANGED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
# Release Notes 2.3.13-sdk.0
|
|
2
|
-
|
|
3
|
-
- Current ref: `HEAD`
|
|
4
|
-
- Previous tag: `v2.3.12`
|
|
5
|
-
- Generated at: 2026-06-29T09:24:21.148Z
|
|
6
|
-
|
|
7
|
-
## Included Drafts
|
|
8
|
-
|
|
9
|
-
- `docs/release-notes/2026-06-16-bulk-invite-to-portal.md` - Bulk invite users to a portal
|
|
10
|
-
- `docs/release-notes/2026-06-29-app-portal-embeds-iframe-kind.md` - App portal embeds — detect iframe embeds, add `kind`
|
|
11
|
-
|
|
12
|
-
## Summary
|
|
13
|
-
|
|
14
|
-
### Bulk invite users to a portal
|
|
15
|
-
|
|
16
|
-
Gate exposes `POST /:orgId/portals/:portalId/invite/bulk` (`bulkInviteToPortal`) to invite many users to a single portal in one request, replacing N sequential `inviteToPortal` calls. Invites run with bounded concurrency (default 5, max 5); the rest are queued. Portal discovery (`listPortals`/`getPortal`) runs once for the whole batch. An optional `background` mode returns immediately without blocking the caller.
|
|
17
|
-
|
|
18
|
-
### App portal embeds — detect iframe embeds, add `kind`
|
|
19
|
-
|
|
20
|
-
Extends `listAppPortalEmbeds` to also report portal pages where the app is embedded
|
|
21
|
-
via a regular `embed` (iframe) block whose `contentUrl` points at the app host, in
|
|
22
|
-
addition to the existing `app-feature` brick embeds. Every entry now carries a
|
|
23
|
-
`kind` discriminator. Detection works for all consumers, including the in-app
|
|
24
|
-
runtime app-token path.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
## API / SDK Changes
|
|
28
|
-
|
|
29
|
-
### Bulk invite users to a portal
|
|
30
|
-
|
|
31
|
-
- Added `bulkInviteToPortal` operation and `PortalsApi.bulkInviteToPortal` SDK client method.
|
|
32
|
-
- Request: `invitations[]` (each item matches `inviteToPortal`: `email` required; optional `fullName`, `orgRole`, `workspaceRole`, `isFullAccess`), optional `concurrency` (1..5, default 5), optional `background` (default false).
|
|
33
|
-
- Response: `total`, `status` (`completed` | `processing`). For `completed`: `succeeded`, `failed`, `results[]` (`{ email, status, magicLink?, url?, userId?, error? }`). For `processing`: `accepted`.
|
|
34
|
-
- Per-invitation `orgRole`/`isFullAccess` semantics are identical to `inviteToPortal` (shared `invitePortalUser` helper).
|
|
35
|
-
- Permission: `portals.manage` with org-scoped authz (same as `inviteToPortal`).
|
|
36
|
-
- MCP: `bulkInviteToPortal` is MCP-visible under the `portals` prompt group; the prompt now documents batching, concurrency, background mode, and the client access-clarification rule.
|
|
37
|
-
|
|
38
|
-
### App portal embeds — detect iframe embeds, add `kind`
|
|
39
|
-
|
|
40
|
-
- `ListAppPortalEmbedsResponse` entries gain `kind: 'app-feature' | 'iframe'`
|
|
41
|
-
(additive, non-breaking).
|
|
42
|
-
- `listAppPortalEmbeds` now merges two portal-service searches:
|
|
43
|
-
- existing brick search (`blockType=flexible`, `brickType=app-feature`,
|
|
44
|
-
`brickMatch=featureId:<appId>`) → `kind: 'app-feature'`.
|
|
45
|
-
- new iframe search (`blockType=embed`, `attrContains=contentUrl:<host>` per
|
|
46
|
-
resolved host) → `kind: 'iframe'`.
|
|
47
|
-
- Host(s) resolved via nimbus-ai `apiGetAppByGlobalId` using a secret-only
|
|
48
|
-
("visitor") header (no caller user id), so the app-token runtime path works too.
|
|
49
|
-
Takes the host of `url` and, when set, of `customDomainFqdn` (deduped).
|
|
50
|
-
- Merge is per page with brick precedence: a page matched by both stays
|
|
51
|
-
`app-feature`.
|
|
52
|
-
- Graceful degrade: if host resolution yields nothing (app not found / unpublished
|
|
53
|
-
/ nimbus-ai unreachable), the iframe search is skipped and brick embeds are
|
|
54
|
-
returned normally — the op never fails on this.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
## Consumer Impact
|
|
58
|
-
|
|
59
|
-
### Bulk invite users to a portal
|
|
60
|
-
|
|
61
|
-
- App agents inviting several clients can issue one call instead of N blocking sequential requests.
|
|
62
|
-
- Single `inviteToPortal` is unchanged; behavior and response shape are preserved.
|
|
63
|
-
- Failures are isolated per invitee in `completed` mode — a single bad invite does not fail the batch.
|
|
64
|
-
|
|
65
|
-
### App portal embeds — detect iframe embeds, add `kind`
|
|
66
|
-
|
|
67
|
-
- public-api / CLI / frontend receive the new `kind` field; downstream consumers
|
|
68
|
-
pass it through without behavioral or visual differentiation for now.
|
|
69
|
-
- Requires `npm run build:sdk` to publish the additive `kind` field and the updated
|
|
70
|
-
op description.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
## Verification
|
|
74
|
-
|
|
75
|
-
### Bulk invite users to a portal
|
|
76
|
-
|
|
77
|
-
- `npm test -- tests/unit/portals-bulk-invite-controller.test.ts tests/unit/concurrency.test.ts tests/unit/portals-controller.test.ts`
|
|
78
|
-
- `npm run build`
|
|
79
|
-
- `npm run build:sdk`
|
|
80
|
-
- `npm run mcp:skills:generate` (validate blocked locally: `skills-ref` Python module unavailable in this environment)
|
|
81
|
-
|
|
82
|
-
### App portal embeds — detect iframe embeds, add `kind`
|
|
83
|
-
|
|
84
|
-
- `eslint` and `tsc --noEmit` clean on the changed files (whole-project tsc: 0
|
|
85
|
-
errors).
|
|
86
|
-
- Runtime (user): embed an app via a regular `embed` block (managed or custom host,
|
|
87
|
-
with path/query) → page appears with `kind: 'iframe'`; brick + iframe on the same
|
|
88
|
-
page → one `app-feature` row; nimbus-ai down / app unpublished → brick results
|
|
89
|
-
returned normally. Works for internal-user and app-token auth.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
## Follow-ups
|
|
93
|
-
|
|
94
|
-
### Bulk invite users to a portal
|
|
95
|
-
|
|
96
|
-
- Background mode is fire-and-forget within the request pod; if durable retry/observability is later required, move bulk processing to a worker/queue.
|
|
97
|
-
|
|
98
|
-
### App portal embeds — detect iframe embeds, add `kind`
|
|
99
|
-
|
|
100
|
-
- Regenerate + publish the SDK (`npm run build:sdk` / `build:sdk:push`); note the
|
|
101
|
-
version for the M3A (public-api) and M4A (nx-frontend) pin bumps.
|
|
102
|
-
- M3A/M4A/M5A pass `kind` through unchanged.
|