@fusebase/fusebase-gate-sdk 2.10.1-sdk.0 → 2.11.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.
@@ -5,7 +5,7 @@
5
5
  * Domain: app-apis
6
6
  */
7
7
  import type { Client } from "../runtime/transport";
8
- import type { AppApiOperationContract, AppApiOperationListResponseContract, CallAppApiRequestContract, CallAppApiResponseContract, orgIdInPathRequired, PublishedAppListResponseContract, VerifyAppApiContractsRequestContract, VerifyAppApiContractsResponseContract } from "../types";
8
+ import type { AppApiOperationContract, AppApiOperationListResponseContract, CallAppApiRequestContract, CallAppApiResponseContract, orgIdInPathRequired, PublishedAppApiManifestContract, PublishedAppListResponseContract, VerifyAppApiContractsRequestContract, VerifyAppApiContractsResponseContract } from "../types";
9
9
  export declare class AppApisApi {
10
10
  private client;
11
11
  constructor(client: Client);
@@ -48,6 +48,17 @@ export declare class AppApisApi {
48
48
  };
49
49
  headers?: Record<string, string>;
50
50
  }): Promise<AppApiOperationContract>;
51
+ /**
52
+ * Get a published app API manifest
53
+ * Returns the selected app's published app-api-registry manifest, including the complete parsed OpenAPI document. The caller must have org.read access and user-bound context.
54
+ */
55
+ getPublishedAppApiManifest(params: {
56
+ path: {
57
+ orgId: orgIdInPathRequired;
58
+ appId: string;
59
+ };
60
+ headers?: Record<string, string>;
61
+ }): Promise<PublishedAppApiManifestContract>;
51
62
  /**
52
63
  * List app API operations
53
64
  * Returns published app API operations visible inside the organization. Optional filters narrow the result by app, feature, visibility, and limit.
@@ -55,6 +55,20 @@ class AppApisApi {
55
55
  expectedContentType: "application/json",
56
56
  });
57
57
  }
58
+ /**
59
+ * Get a published app API manifest
60
+ * Returns the selected app's published app-api-registry manifest, including the complete parsed OpenAPI document. The caller must have org.read access and user-bound context.
61
+ */
62
+ async getPublishedAppApiManifest(params) {
63
+ return this.client.request({
64
+ method: "GET",
65
+ path: "/:orgId/apps/:appId/app-api-manifest",
66
+ pathParams: params.path,
67
+ headers: params.headers,
68
+ opId: "getPublishedAppApiManifest",
69
+ expectedContentType: "application/json",
70
+ });
71
+ }
58
72
  /**
59
73
  * List app API operations
60
74
  * Returns published app API operations visible inside the organization. Optional filters narrow the result by app, feature, visibility, and limit.
@@ -11,7 +11,7 @@ export declare class OrgUsersApi {
11
11
  constructor(client: Client);
12
12
  /**
13
13
  * Add user to organization
14
- * Invites a user into the organization. Without workspaceId it performs an org invite. With workspaceId it performs a workspace-aware invite and can resolve `default` to the organization's default workspace. For org-only instant client onboarding, send orgRole=`client` with autoConfirmClientInvite=`true`. A successful write does not prove that the current session already has org access; confirm access with getMyOrgAccess. Requires org.members.write and org access.
14
+ * Invites a user into the organization. Without workspaceId it performs an org invite. With workspaceId it performs a workspace-aware invite and can resolve `default` to the organization's default workspace. For org-only instant client onboarding, send orgRole=`client` with autoConfirmClientInvite=`true`. For service accounts (bots) that cannot click an invite email, send autoConfirmInvite=`true` to add an existing Fusebase account as a member of the path org right away with the requested orgRole. A successful write does not prove that the current session already has org access; confirm access with getMyOrgAccess. Requires org.members.write and org access.
15
15
  */
16
16
  addOrgUser(params: {
17
17
  path: {
@@ -13,7 +13,7 @@ class OrgUsersApi {
13
13
  }
14
14
  /**
15
15
  * Add user to organization
16
- * Invites a user into the organization. Without workspaceId it performs an org invite. With workspaceId it performs a workspace-aware invite and can resolve `default` to the organization's default workspace. For org-only instant client onboarding, send orgRole=`client` with autoConfirmClientInvite=`true`. A successful write does not prove that the current session already has org access; confirm access with getMyOrgAccess. Requires org.members.write and org access.
16
+ * Invites a user into the organization. Without workspaceId it performs an org invite. With workspaceId it performs a workspace-aware invite and can resolve `default` to the organization's default workspace. For org-only instant client onboarding, send orgRole=`client` with autoConfirmClientInvite=`true`. For service accounts (bots) that cannot click an invite email, send autoConfirmInvite=`true` to add an existing Fusebase account as a member of the path org right away with the requested orgRole. A successful write does not prove that the current session already has org access; confirm access with getMyOrgAccess. Requires org.members.write and org access.
17
17
  */
18
18
  async addOrgUser(params) {
19
19
  return this.client.request({
@@ -5,7 +5,7 @@
5
5
  * Domain: portals
6
6
  */
7
7
  import type { Client } from "../runtime/transport";
8
- import type { AddPortalAiAgentBlockRequestContract, AddPortalAiAgentBlockResponseContract, AddPortalAppBlockRequestContract, AddPortalAppBlockResponseContract, AddPortalAppPageRequestContract, AddPortalAppPageResponseContract, AddPortalBlankNoteBlockRequestContract, AddPortalBlankNoteBlockResponseContract, AddPortalBpmnDiagramBlockRequestContract, AddPortalBpmnDiagramBlockResponseContract, AddPortalCardBlockRequestContract, AddPortalCardBlockResponseContract, AddPortalCardGroupBlockRequestContract, AddPortalCardGroupBlockResponseContract, AddPortalCarouselBlockRequestContract, AddPortalCarouselBlockResponseContract, AddPortalChatBlockRequestContract, AddPortalChatBlockResponseContract, AddPortalChatsDashboardMenuItemRequestContract, AddPortalChatsDashboardMenuItemResponseContract, AddPortalCountdownBlockRequestContract, AddPortalCountdownBlockResponseContract, AddPortalCustomWidgetBlockRequestContract, AddPortalCustomWidgetBlockResponseContract, AddPortalDatabaseBlockRequestContract, AddPortalDatabaseBlockResponseContract, AddPortalDynamicTableBlockRequestContract, AddPortalDynamicTableBlockResponseContract, AddPortalEmbedBlockRequestContract, AddPortalEmbedBlockResponseContract, AddPortalFilesDashboardMenuItemRequestContract, AddPortalFilesDashboardMenuItemResponseContract, AddPortalFileUploaderBlockRequestContract, AddPortalFileUploaderBlockResponseContract, AddPortalFormBlockRequestContract, AddPortalFormBlockResponseContract, AddPortalHeadingBlockRequestContract, AddPortalHtmlCssBlockRequestContract, AddPortalHtmlCssBlockResponseContract, AddPortalImageBlockRequestContract, AddPortalInfoBlockRequestContract, AddPortalInfoBlockResponseContract, AddPortalInternalSpacePageRequestContract, AddPortalInternalSpacePageResponseContract, AddPortalKanbanBlockRequestContract, AddPortalKanbanBlockResponseContract, AddPortalLinkedBlockRequestContract, AddPortalLinkedBlockResponseContract, AddPortalNoteBlockRequestContract, AddPortalNoteBlockResponseContract, AddPortalRecentFilesBlockRequestContract, AddPortalRecentFilesBlockResponseContract, AddPortalTaskListBlockRequestContract, AddPortalTaskListBlockResponseContract, AddPortalTasksDashboardMenuItemRequestContract, AddPortalTasksDashboardMenuItemResponseContract, AddPortalTextBlockRequestContract, AddPortalTimelineBlockRequestContract, AddPortalTimelineBlockResponseContract, BulkInviteToPortalRequestContract, BulkInviteToPortalResponseContract, CreatePortalFolderRequestContract, CreatePortalFolderResponseContract, CreatePortalLinkRequestContract, CreatePortalLinkResponseContract, CreatePortalPageRequestContract, CreatePortalPageResponseContract, CreatePortalPageWithNoteRequestContract, CreatePortalPageWithNoteResponseContract, CreatePortalRequestContract, CreatePortalResponseContract, DeletePortalItemResponseContract, DuplicatePortalItemRequestContract, DuplicatePortalItemResponseContract, DuplicatePortalRequestContract, GetPortalBlockResponseContract, GetPortalPageBlockCountResponseContract, globalIdInPathRequired, InvitePortalManagerRequestContract, InvitePortalManagerResponseContract, InviteToPortalRequestContract, InviteToPortalResponseContract, ListPortalAiAgentsResponseContract, ListPortalChatChannelsResponseContract, ListPortalChatUsersResponseContract, ListPortalContentResponseContract, ListPortalDatabaseBlockSourcesResponseContract, ListPortalLinkableBlocksResponseContract, ListPortalPageBlocksResponseContract, MovePortalBlockRequestContract, orgIdInPathRequired, OrgPortalListResponseContract, PortalDetailContract, PortalTextAndMediaBlockResponseContract, PublishPortalDraftResponseContract, SearchPortalInfoBlockIconsResponseContract, SetDashboardViewReadonlyRequestContract, SetDashboardViewReadonlyResponseContract, StagedPortalBlockResponseContract, UpdatePortalAccessRequestContract, UpdatePortalAccessResponseContract, UpdatePortalAiAgentBlockRequestContract, UpdatePortalAppBlockRequestContract, UpdatePortalBpmnDiagramBlockRequestContract, UpdatePortalCardBlockRequestContract, UpdatePortalCardGroupBlockRequestContract, UpdatePortalCarouselBlockRequestContract, UpdatePortalChatBlockRequestContract, UpdatePortalContentPermissionsRequestContract, UpdatePortalContentPermissionsResponseContract, UpdatePortalCountdownBlockRequestContract, UpdatePortalCustomCodeRequestContract, UpdatePortalCustomCodeResponseContract, UpdatePortalCustomWidgetBlockRequestContract, UpdatePortalDatabaseBlockRequestContract, UpdatePortalDynamicTableBlockRequestContract, UpdatePortalEmbedBlockRequestContract, UpdatePortalFileUploaderBlockRequestContract, UpdatePortalFormBlockRequestContract, UpdatePortalHomepageRequestContract, UpdatePortalHomepageResponseContract, UpdatePortalHtmlCssBlockRequestContract, UpdatePortalImageBlockRequestContract, UpdatePortalInfoBlockRequestContract, UpdatePortalItemRequestContract, UpdatePortalItemResponseContract, UpdatePortalLinkedBlockRequestContract, UpdatePortalNoteBlockRequestContract, UpdatePortalRecentFilesBlockRequestContract, UpdatePortalStyleRequestContract, UpdatePortalStyleResponseContract, UpdatePortalTextBlockRequestContract, UpdatePortalTimelineBlockRequestContract } from "../types";
8
+ import type { AddPortalAiAgentBlockRequestContract, AddPortalAiAgentBlockResponseContract, AddPortalAppBlockRequestContract, AddPortalAppBlockResponseContract, AddPortalAppPageRequestContract, AddPortalAppPageResponseContract, AddPortalBlankNoteBlockRequestContract, AddPortalBlankNoteBlockResponseContract, AddPortalBpmnDiagramBlockRequestContract, AddPortalBpmnDiagramBlockResponseContract, AddPortalCardBlockRequestContract, AddPortalCardBlockResponseContract, AddPortalCardGroupBlockRequestContract, AddPortalCardGroupBlockResponseContract, AddPortalCarouselBlockRequestContract, AddPortalCarouselBlockResponseContract, AddPortalChatBlockRequestContract, AddPortalChatBlockResponseContract, AddPortalChatsDashboardMenuItemRequestContract, AddPortalChatsDashboardMenuItemResponseContract, AddPortalCountdownBlockRequestContract, AddPortalCountdownBlockResponseContract, AddPortalCustomWidgetBlockRequestContract, AddPortalCustomWidgetBlockResponseContract, AddPortalDatabaseBlockRequestContract, AddPortalDatabaseBlockResponseContract, AddPortalDynamicTableBlockRequestContract, AddPortalDynamicTableBlockResponseContract, AddPortalEmbedBlockRequestContract, AddPortalEmbedBlockResponseContract, AddPortalFilesDashboardMenuItemRequestContract, AddPortalFilesDashboardMenuItemResponseContract, AddPortalFileUploaderBlockRequestContract, AddPortalFileUploaderBlockResponseContract, AddPortalFormBlockRequestContract, AddPortalFormBlockResponseContract, AddPortalHeadingBlockRequestContract, AddPortalHtmlCssBlockRequestContract, AddPortalHtmlCssBlockResponseContract, AddPortalImageBlockRequestContract, AddPortalInfoBlockRequestContract, AddPortalInfoBlockResponseContract, AddPortalInternalSpacePageRequestContract, AddPortalInternalSpacePageResponseContract, AddPortalKanbanBlockRequestContract, AddPortalKanbanBlockResponseContract, AddPortalLinkedBlockRequestContract, AddPortalLinkedBlockResponseContract, AddPortalNoteBlockRequestContract, AddPortalNoteBlockResponseContract, AddPortalRecentFilesBlockRequestContract, AddPortalRecentFilesBlockResponseContract, AddPortalTaskListBlockRequestContract, AddPortalTaskListBlockResponseContract, AddPortalTasksDashboardMenuItemRequestContract, AddPortalTasksDashboardMenuItemResponseContract, AddPortalTextBlockRequestContract, AddPortalTimelineBlockRequestContract, AddPortalTimelineBlockResponseContract, BulkInviteToPortalRequestContract, BulkInviteToPortalResponseContract, CreatePortalFolderRequestContract, CreatePortalFolderResponseContract, CreatePortalLinkRequestContract, CreatePortalLinkResponseContract, CreatePortalPageRequestContract, CreatePortalPageResponseContract, CreatePortalPageWithNoteRequestContract, CreatePortalPageWithNoteResponseContract, CreatePortalRequestContract, CreatePortalResponseContract, DeletePortalItemResponseContract, DuplicatePortalItemRequestContract, DuplicatePortalItemResponseContract, DuplicatePortalRequestContract, GetPortalBlockResponseContract, GetPortalPageBlockCountResponseContract, globalIdInPathRequired, InvitePortalManagerRequestContract, InvitePortalManagerResponseContract, InviteToPortalRequestContract, InviteToPortalResponseContract, ListPortalAiAgentsResponseContract, ListPortalChatChannelsResponseContract, ListPortalChatUsersResponseContract, ListPortalContentResponseContract, ListPortalDatabaseBlockSourcesResponseContract, ListPortalLinkableBlocksResponseContract, ListPortalPageBlocksResponseContract, MovePortalBlockRequestContract, orgIdInPathRequired, OrgPortalListResponseContract, PortalDetailContract, PortalStyleContractResponseContract, PortalTextAndMediaBlockResponseContract, PublishPortalDraftResponseContract, SearchPortalInfoBlockIconsResponseContract, SetDashboardViewReadonlyRequestContract, SetDashboardViewReadonlyResponseContract, StagedPortalBlockResponseContract, UpdatePortalAccessRequestContract, UpdatePortalAccessResponseContract, UpdatePortalAiAgentBlockRequestContract, UpdatePortalAppBlockRequestContract, UpdatePortalBpmnDiagramBlockRequestContract, UpdatePortalCardBlockRequestContract, UpdatePortalCardGroupBlockRequestContract, UpdatePortalCarouselBlockRequestContract, UpdatePortalChatBlockRequestContract, UpdatePortalContentPermissionsRequestContract, UpdatePortalContentPermissionsResponseContract, UpdatePortalCountdownBlockRequestContract, UpdatePortalCustomCodeRequestContract, UpdatePortalCustomCodeResponseContract, UpdatePortalCustomWidgetBlockRequestContract, UpdatePortalDatabaseBlockRequestContract, UpdatePortalDynamicTableBlockRequestContract, UpdatePortalEmbedBlockRequestContract, UpdatePortalFileUploaderBlockRequestContract, UpdatePortalFormBlockRequestContract, UpdatePortalHomepageRequestContract, UpdatePortalHomepageResponseContract, UpdatePortalHtmlCssBlockRequestContract, UpdatePortalImageBlockRequestContract, UpdatePortalInfoBlockRequestContract, UpdatePortalItemRequestContract, UpdatePortalItemResponseContract, UpdatePortalLinkedBlockRequestContract, UpdatePortalNoteBlockRequestContract, UpdatePortalRecentFilesBlockRequestContract, UpdatePortalStyleRequestContract, UpdatePortalStyleResponseContract, UpdatePortalTextBlockRequestContract, UpdatePortalTimelineBlockRequestContract } from "../types";
9
9
  export declare class PortalsApi {
10
10
  private client;
11
11
  constructor(client: Client);
@@ -567,6 +567,16 @@ export declare class PortalsApi {
567
567
  };
568
568
  headers?: Record<string, string>;
569
569
  }): Promise<GetPortalPageBlockCountResponseContract>;
570
+ /**
571
+ * Get the portal styling contract
572
+ * Returns the machine-readable styling contract for portals: the stable `data-portal` structural hooks and class hooks that custom CSS may target, how to write selectors that apply, a verified example override, and the anti-contract. Pull it at runtime instead of hard-coding hooks; `version` is the same value getPortal returns as `style.styleContractVersion`, so a consumer can cache the contract and refetch when it changes. The contract is the same for every portal — orgId only scopes access. Requires portals.read access.
573
+ */
574
+ getPortalStyleContract(params: {
575
+ path: {
576
+ orgId: orgIdInPathRequired;
577
+ };
578
+ headers?: Record<string, string>;
579
+ }): Promise<PortalStyleContractResponseContract>;
570
580
  /**
571
581
  * Invite a portal manager (customizer access)
572
582
  * Invites a user as a PORTAL MANAGER via a magic link. A manager has access to the portal customizer and can build, edit, and publish the portal (layout, settings, widgets, custom code); they always get full access to all portal pages. This is a dedicated shortcut for inviteToPortal with orgRole='manager' — no access question is needed (managers are always full access). Returns a magic link for direct portal/customizer access without email confirmation. Requires portals.manage access.
@@ -667,6 +667,20 @@ class PortalsApi {
667
667
  expectedContentType: "application/json",
668
668
  });
669
669
  }
670
+ /**
671
+ * Get the portal styling contract
672
+ * Returns the machine-readable styling contract for portals: the stable `data-portal` structural hooks and class hooks that custom CSS may target, how to write selectors that apply, a verified example override, and the anti-contract. Pull it at runtime instead of hard-coding hooks; `version` is the same value getPortal returns as `style.styleContractVersion`, so a consumer can cache the contract and refetch when it changes. The contract is the same for every portal — orgId only scopes access. Requires portals.read access.
673
+ */
674
+ async getPortalStyleContract(params) {
675
+ return this.client.request({
676
+ method: "GET",
677
+ path: "/:orgId/portal-style-contract",
678
+ pathParams: params.path,
679
+ headers: params.headers,
680
+ opId: "getPortalStyleContract",
681
+ expectedContentType: "application/json",
682
+ });
683
+ }
670
684
  /**
671
685
  * Invite a portal manager (customizer access)
672
686
  * Invites a user as a PORTAL MANAGER via a magic link. A manager has access to the portal customizer and can build, edit, and publish the portal (layout, settings, widgets, custom code); they always get full access to all portal pages. This is a dedicated shortcut for inviteToPortal with orgRole='manager' — no access question is needed (managers are always full access). Returns a magic link for direct portal/customizer access without email confirmation. Requires portals.manage access.
@@ -40,6 +40,38 @@ export interface PublishedAppListResponseContract {
40
40
  apps: PublishedAppContract[];
41
41
  total: number;
42
42
  }
43
+ export interface AppApiManifestOperationContract {
44
+ operationId: string;
45
+ method: string;
46
+ path: string;
47
+ summary?: string;
48
+ description?: string;
49
+ tags?: string[];
50
+ visibility?: string;
51
+ executionMode?: string;
52
+ allowedCallers?: string[];
53
+ requiredPermissions?: string[];
54
+ }
55
+ export interface AppApiRegistryManifestContract {
56
+ kind: "app-api-registry";
57
+ format: "openapi";
58
+ schemaVersion: string;
59
+ sourceFile: string;
60
+ publishedAt: string;
61
+ info: {
62
+ title: string;
63
+ version: string;
64
+ };
65
+ openapiVersion: string;
66
+ operations: AppApiManifestOperationContract[];
67
+ document: Record<string, unknown>;
68
+ }
69
+ export interface PublishedAppApiManifestContract {
70
+ productId: string;
71
+ appId: string;
72
+ title: string;
73
+ manifest: AppApiRegistryManifestContract;
74
+ }
43
75
  export interface CallAppApiRequestContract {
44
76
  path?: Record<string, string>;
45
77
  query?: Record<string, string | number | boolean>;
@@ -6,7 +6,7 @@
6
6
  */
7
7
  export type { AuthenticatedUserSummaryContract, MyOrgAccessResponseContract } from "./access/access";
8
8
  export type { AppAccessPrincipalContract, RemoveAppAccessPrincipalRequestContract, RemoveAppAccessPrincipalResponseContract } from "./app-access-principal/app-access-principal";
9
- export type { AppApiOperationContract, AppApiOperationListResponseContract, CallAppApiRequestContract, CallAppApiResponseContract, PublishedAppContract, PublishedAppListResponseContract, VerifyAppApiContractsRequestContract, VerifyAppApiContractsResponseContract, VerifyCaseResultContract } from "./app-api/app-api";
9
+ export type { AppApiManifestOperationContract, AppApiOperationContract, AppApiOperationListResponseContract, AppApiRegistryManifestContract, CallAppApiRequestContract, CallAppApiResponseContract, PublishedAppApiManifestContract, PublishedAppContract, PublishedAppListResponseContract, VerifyAppApiContractsRequestContract, VerifyAppApiContractsResponseContract, VerifyCaseResultContract } from "./app-api/app-api";
10
10
  export type { AppPortalEmbedContract, ListAppPortalEmbedsResponseContract } from "./app-embed-targets/app-embed-targets";
11
11
  export type { ActivateAppMagicLinkResponseContract, AppMagicLinkSummaryContract, BulkAppMagicLinkInvitationContract, BulkAppMagicLinkResultItemContract, BulkCreateAppMagicLinksRequestContract, BulkCreateAppMagicLinksResponseContract, CreateAppClientInviteRequestContract, CreateAppMagicLinkRequestContract, CreateAppMagicLinkResponseContract, ListAppMagicLinksResponseContract, RequestAppMagicLinkRequestContract, RequestAppMagicLinkResponseContract, RevokeAppMagicLinkResponseContract } from "./app-magic-link/app-magic-link";
12
12
  export * from "./billing/billing";
@@ -51,6 +51,13 @@ export interface OrgUserAddRequestContract {
51
51
  * is omitted.
52
52
  */
53
53
  autoConfirmClientInvite?: boolean;
54
+ /**
55
+ * Org-only shortcut for service accounts (bots): when the email already has
56
+ * a Fusebase account, add it as an org member right away with `orgRole`
57
+ * instead of sending an invite email a bot can never click. Falls back to a
58
+ * normal invite when no account exists yet. Requires `workspaceId` omitted.
59
+ */
60
+ autoConfirmInvite?: boolean;
54
61
  }
55
62
  export interface OrgInviteContract {
56
63
  id: number;
@@ -2926,6 +2926,12 @@ export interface PortalDetailContract {
2926
2926
  }
2927
2927
  /** Published branding of a portal, as stored in its theme. */
2928
2928
  export interface PortalStyleContract {
2929
+ /**
2930
+ * Version of the portal styling contract this portal renders with. Compare it
2931
+ * against a cached value to detect a breaking change; call
2932
+ * getPortalStyleContract for the contract itself.
2933
+ */
2934
+ styleContractVersion: string;
2929
2935
  /** Color theme key. Absent when the portal never had one set explicitly. */
2930
2936
  theme?: PortalThemeKey;
2931
2937
  /** Logo image URL, as rendered in the portal header. */
@@ -2933,6 +2939,34 @@ export interface PortalStyleContract {
2933
2939
  /** Favicon image URL, used as the portal's browser tab icon. */
2934
2940
  faviconUrl?: string;
2935
2941
  }
2942
+ /**
2943
+ * The portal styling contract: the stable hooks custom CSS may target. Mirrors
2944
+ * PORTAL_STYLE_CONTRACT in nx-frontend, where a CI guard fails the portal build
2945
+ * if any hook below disappears from the source.
2946
+ */
2947
+ export interface PortalStyleContractResponseContract {
2948
+ /**
2949
+ * Contract version. Removing or renaming a hook bumps the major, adding one
2950
+ * bumps the minor.
2951
+ */
2952
+ version: string;
2953
+ /**
2954
+ * Preferred surface: `data-portal` attribute values, targeted as
2955
+ * `[data-portal="sidebar"]`.
2956
+ */
2957
+ structuralHooks: string[];
2958
+ /** Legacy stable class hooks, also part of the contract, e.g. `.container`. */
2959
+ classHooks: string[];
2960
+ /** How to write CSS that actually applies. */
2961
+ usage: string;
2962
+ /** A working override, verified against the portal build. */
2963
+ canonicalOverride: string;
2964
+ /**
2965
+ * Things that look styleable but are not part of the contract, each written
2966
+ * as a sentence explaining why targeting it fails.
2967
+ */
2968
+ antiContract: string[];
2969
+ }
2936
2970
  export interface UpdatePortalStyleRequestContract {
2937
2971
  /** Color theme to apply, the same picker the customizer's Theme screen shows. */
2938
2972
  theme?: PortalThemeKey;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusebase/fusebase-gate-sdk",
3
- "version": "2.10.1-sdk.0",
3
+ "version": "2.11.0",
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",
@@ -2,8 +2,46 @@
2
2
 
3
3
  - Current ref: `HEAD`
4
4
  - Previous tag: `v2.10.1-sdk.0`
5
- - Generated at: 2026-08-25T08:32:52.825Z
5
+ - Generated at: 2026-08-25T11:38:27.682Z
6
6
 
7
7
  ## Included Drafts
8
8
 
9
- - None
9
+ - `docs/release-notes/2026-08-25-published-app-api-manifest.md` - Published App API manifest endpoint
10
+
11
+ ## Summary
12
+
13
+ ### Published App API manifest endpoint
14
+
15
+ Gate now exposes the complete published OpenAPI manifest for a selected FuseBase App so authenticated HTTP clients such as FuseBase Work can discover an App's request and response schemas without using the frontend proxy or MCP.
16
+
17
+
18
+ ## API / SDK Changes
19
+
20
+ ### Published App API manifest endpoint
21
+
22
+ - Added `GET /:orgId/apps/:appId/app-api-manifest`.
23
+ - Added the `getPublishedAppApiManifest` generated SDK operation.
24
+ - The response includes stable Product/App identifiers and the complete `app-api-registry` manifest, including `manifest.document`.
25
+ - The operation requires `org.read`, accepts user or user-bound token authentication, and is intentionally not exposed as an MCP tool.
26
+
27
+
28
+ ## Consumer Impact
29
+
30
+ ### Published App API manifest endpoint
31
+
32
+ HTTP clients can list Apps and operations through the existing Gate APIs, then fetch the selected App's full OpenAPI contract through Gate. Existing operations are unchanged.
33
+
34
+
35
+ ## Verification
36
+
37
+ ### Published App API manifest endpoint
38
+
39
+ - Unit coverage verifies complete manifest delivery and rejects Apps without a published App API manifest.
40
+ - Generated SDK and OpenAPI artifacts were rebuilt.
41
+
42
+
43
+ ## Follow-ups
44
+
45
+ ### Published App API manifest endpoint
46
+
47
+ - FuseBase Work will consume this operation through its direct server-to-server Gate client.
@@ -0,0 +1,9 @@
1
+ # Release Notes 2.11.0
2
+
3
+ - Current ref: `HEAD`
4
+ - Previous tag: `v2.11.0`
5
+ - Generated at: 2026-08-26T07:53:27.963Z
6
+
7
+ ## Included Drafts
8
+
9
+ - None
@@ -1,8 +1,8 @@
1
- # Release Notes 2.10.1-sdk.0
1
+ # Release Notes 2.11.0
2
2
 
3
3
  - Current ref: `HEAD`
4
- - Previous tag: `v2.10.1-sdk.0`
5
- - Generated at: 2026-08-25T08:32:52.825Z
4
+ - Previous tag: `v2.11.0`
5
+ - Generated at: 2026-08-26T07:53:27.963Z
6
6
 
7
7
  ## Included Drafts
8
8