@fusebase/fusebase-gate-sdk 2.3.12 → 2.3.13

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.
@@ -11,7 +11,7 @@ export declare class AppEmbedTargetsApi {
11
11
  constructor(client: Client);
12
12
  /**
13
13
  * List an app's portal embeds
14
- * Returns the portal pages in the organization where the given app is embedded (as an app-feature brick). One entry per page, each with the portal name, page title, and a ready-to-use page URL. Org-scoped by design (per spec); workspace-level access enforcement is portal-service's responsibility. Requires portals.read access.
14
+ * Returns the portal pages in the organization where the given app is embedded (as an app-feature brick or via a regular embed/iframe block pointing at the app host). One entry per page, each with the portal name, page title, a ready-to-use page URL, and a `kind` of 'app-feature' or 'iframe' (app-feature wins when a page has both). Org-scoped by design (per spec); workspace-level access enforcement is portal-service's responsibility. Requires portals.read access.
15
15
  */
16
16
  listAppPortalEmbeds(params: {
17
17
  path: {
@@ -13,7 +13,7 @@ class AppEmbedTargetsApi {
13
13
  }
14
14
  /**
15
15
  * List an app's portal embeds
16
- * Returns the portal pages in the organization where the given app is embedded (as an app-feature brick). One entry per page, each with the portal name, page title, and a ready-to-use page URL. Org-scoped by design (per spec); workspace-level access enforcement is portal-service's responsibility. Requires portals.read access.
16
+ * Returns the portal pages in the organization where the given app is embedded (as an app-feature brick or via a regular embed/iframe block pointing at the app host). One entry per page, each with the portal name, page title, a ready-to-use page URL, and a `kind` of 'app-feature' or 'iframe' (app-feature wins when a page has both). Org-scoped by design (per spec); workspace-level access enforcement is portal-service's responsibility. Requires portals.read access.
17
17
  */
18
18
  async listAppPortalEmbeds(params) {
19
19
  return this.client.request({
@@ -9,6 +9,12 @@ export interface AppPortalEmbedContract {
9
9
  };
10
10
  /** Ready-to-use URL of the portal page where the app is embedded. */
11
11
  url: string;
12
+ /**
13
+ * How the app is embedded on the page: as a first-class `app-feature` brick or
14
+ * via a regular `embed` (iframe) block whose `contentUrl` points at the app
15
+ * host. When a page matches both, `app-feature` wins (brick precedence).
16
+ */
17
+ kind: "app-feature" | "iframe";
12
18
  }
13
19
  export interface ListAppPortalEmbedsResponseContract {
14
20
  /** One entry per portal page where the app is embedded. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusebase/fusebase-gate-sdk",
3
- "version": "2.3.12",
3
+ "version": "2.3.13",
4
4
  "description": "TypeScript SDK for Fusebase Gate APIs - Generated from contract introspection",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -0,0 +1,102 @@
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.
@@ -0,0 +1,9 @@
1
+ # Release Notes 2.3.13
2
+
3
+ - Current ref: `HEAD`
4
+ - Previous tag: `v2.3.13`
5
+ - Generated at: 2026-06-29T11:00:58.685Z
6
+
7
+ ## Included Drafts
8
+
9
+ - None
@@ -1,53 +1,9 @@
1
- # Release Notes 2.3.12
1
+ # Release Notes 2.3.13
2
2
 
3
3
  - Current ref: `HEAD`
4
- - Previous tag: `v2.3.12`
5
- - Generated at: 2026-06-29T08:59:27.274Z
4
+ - Previous tag: `v2.3.13`
5
+ - Generated at: 2026-06-29T11:00:58.685Z
6
6
 
7
7
  ## Included Drafts
8
8
 
9
- - `docs/release-notes/2026-06-16-bulk-invite-to-portal.md` - Bulk invite users to a portal
10
-
11
- ## Summary
12
-
13
- ### Bulk invite users to a portal
14
-
15
- 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.
16
-
17
-
18
- ## API / SDK Changes
19
-
20
- ### Bulk invite users to a portal
21
-
22
- - Added `bulkInviteToPortal` operation and `PortalsApi.bulkInviteToPortal` SDK client method.
23
- - Request: `invitations[]` (each item matches `inviteToPortal`: `email` required; optional `fullName`, `orgRole`, `workspaceRole`, `isFullAccess`), optional `concurrency` (1..5, default 5), optional `background` (default false).
24
- - Response: `total`, `status` (`completed` | `processing`). For `completed`: `succeeded`, `failed`, `results[]` (`{ email, status, magicLink?, url?, userId?, error? }`). For `processing`: `accepted`.
25
- - Per-invitation `orgRole`/`isFullAccess` semantics are identical to `inviteToPortal` (shared `invitePortalUser` helper).
26
- - Permission: `portals.manage` with org-scoped authz (same as `inviteToPortal`).
27
- - MCP: `bulkInviteToPortal` is MCP-visible under the `portals` prompt group; the prompt now documents batching, concurrency, background mode, and the client access-clarification rule.
28
-
29
-
30
- ## Consumer Impact
31
-
32
- ### Bulk invite users to a portal
33
-
34
- - App agents inviting several clients can issue one call instead of N blocking sequential requests.
35
- - Single `inviteToPortal` is unchanged; behavior and response shape are preserved.
36
- - Failures are isolated per invitee in `completed` mode — a single bad invite does not fail the batch.
37
-
38
-
39
- ## Verification
40
-
41
- ### Bulk invite users to a portal
42
-
43
- - `npm test -- tests/unit/portals-bulk-invite-controller.test.ts tests/unit/concurrency.test.ts tests/unit/portals-controller.test.ts`
44
- - `npm run build`
45
- - `npm run build:sdk`
46
- - `npm run mcp:skills:generate` (validate blocked locally: `skills-ref` Python module unavailable in this environment)
47
-
48
-
49
- ## Follow-ups
50
-
51
- ### Bulk invite users to a portal
52
-
53
- - Background mode is fire-and-forget within the request pod; if durable retry/observability is later required, move bulk processing to a worker/queue.
9
+ - None
@@ -1,53 +0,0 @@
1
- # Release Notes 2.3.12
2
-
3
- - Current ref: `HEAD`
4
- - Previous tag: `v2.3.12`
5
- - Generated at: 2026-06-29T08:59:27.274Z
6
-
7
- ## Included Drafts
8
-
9
- - `docs/release-notes/2026-06-16-bulk-invite-to-portal.md` - Bulk invite users to a portal
10
-
11
- ## Summary
12
-
13
- ### Bulk invite users to a portal
14
-
15
- 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.
16
-
17
-
18
- ## API / SDK Changes
19
-
20
- ### Bulk invite users to a portal
21
-
22
- - Added `bulkInviteToPortal` operation and `PortalsApi.bulkInviteToPortal` SDK client method.
23
- - Request: `invitations[]` (each item matches `inviteToPortal`: `email` required; optional `fullName`, `orgRole`, `workspaceRole`, `isFullAccess`), optional `concurrency` (1..5, default 5), optional `background` (default false).
24
- - Response: `total`, `status` (`completed` | `processing`). For `completed`: `succeeded`, `failed`, `results[]` (`{ email, status, magicLink?, url?, userId?, error? }`). For `processing`: `accepted`.
25
- - Per-invitation `orgRole`/`isFullAccess` semantics are identical to `inviteToPortal` (shared `invitePortalUser` helper).
26
- - Permission: `portals.manage` with org-scoped authz (same as `inviteToPortal`).
27
- - MCP: `bulkInviteToPortal` is MCP-visible under the `portals` prompt group; the prompt now documents batching, concurrency, background mode, and the client access-clarification rule.
28
-
29
-
30
- ## Consumer Impact
31
-
32
- ### Bulk invite users to a portal
33
-
34
- - App agents inviting several clients can issue one call instead of N blocking sequential requests.
35
- - Single `inviteToPortal` is unchanged; behavior and response shape are preserved.
36
- - Failures are isolated per invitee in `completed` mode — a single bad invite does not fail the batch.
37
-
38
-
39
- ## Verification
40
-
41
- ### Bulk invite users to a portal
42
-
43
- - `npm test -- tests/unit/portals-bulk-invite-controller.test.ts tests/unit/concurrency.test.ts tests/unit/portals-controller.test.ts`
44
- - `npm run build`
45
- - `npm run build:sdk`
46
- - `npm run mcp:skills:generate` (validate blocked locally: `skills-ref` Python module unavailable in this environment)
47
-
48
-
49
- ## Follow-ups
50
-
51
- ### Bulk invite users to a portal
52
-
53
- - Background mode is fire-and-forget within the request pod; if durable retry/observability is later required, move bulk processing to a worker/queue.