@fusebase/fusebase-gate-sdk 2.5.1-sdk.1 → 2.5.1-sdk.3
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/dist/apis/IsolatedStoresApi.d.ts +14 -1
- package/dist/apis/IsolatedStoresApi.js +15 -0
- package/dist/apis/PortalsApi.d.ts +159 -5
- package/dist/apis/PortalsApi.js +182 -4
- package/dist/types/isolated-store/isolated-store.d.ts +69 -0
- package/dist/types/isolated-store/isolated-store.js +11 -1
- package/dist/types/portals/portals.d.ts +1080 -207
- package/dist/types/portals/portals.js +58 -1
- package/dist/types/shared/enums.d.ts +1 -1
- package/dist/types/shared/enums.js +1 -1
- package/package.json +1 -1
- package/release-notes/2.5.1-sdk.3.md +9 -0
- package/release-notes/latest.md +3 -3
- package/release-notes/2.5.1-sdk.1.md +0 -9
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Domain: isolated-stores
|
|
6
6
|
*/
|
|
7
7
|
import type { Client } from "../runtime/transport";
|
|
8
|
-
import type { AdoptIsolatedStoreSqlMigrationBaselineRequestContract, AdoptIsolatedStoreSqlMigrationBaselineResponseContract, ApplyIsolatedStoreSqlMigrationsRequestContract, ApplyIsolatedStoreSqlMigrationsResponseContract, AttachIsolatedStoreSourceScopeRequestContract, AttachIsolatedStoreSourceScopeResponseContract, CreateIsolatedStoreCheckpointRequestContract, CreateIsolatedStoreCheckpointResponseContract, CreateIsolatedStoreRequestContract, CreateIsolatedStoreResponseContract, DeleteIsolatedStoreResponseContract, DeleteIsolatedStoreStageResponseContract, GetIsolatedStoreSqlMigrationStatusRequestContract, GetOrCreateIsolatedStoreRequestContract, GetOrCreateIsolatedStoreResponseContract, InitIsolatedStoreStageRequestContract, InitIsolatedStoreStageResponseContract, IsolatedStoreIdInPathRequired, IsolatedStoreListResponseContract, IsolatedStoreResponseContract, IsolatedStoreRevisionIdInPathRequired, IsolatedStoreRevisionListResponseContract, IsolatedStoreSqlBatchInsertRequestContract, IsolatedStoreSqlBatchInsertResponseContract, IsolatedStoreSqlCountRequestContract, IsolatedStoreSqlCountResponseContract, IsolatedStoreSqlDeleteRequestContract, IsolatedStoreSqlDeleteResponseContract, IsolatedStoreSqlDescribeTableResponseContract, IsolatedStoreSqlExecuteRequestContract, IsolatedStoreSqlExecuteResponseContract, IsolatedStoreSqlImportRequestContract, IsolatedStoreSqlImportResponseContract, IsolatedStoreSqlInsertRequestContract, IsolatedStoreSqlInsertResponseContract, IsolatedStoreSqlListTablesResponseContract, IsolatedStoreSqlMigrationStatusContract, IsolatedStoreSqlQueryRequestContract, IsolatedStoreSqlQueryResponseContract, IsolatedStoreSqlRlsStatusResponseContract, IsolatedStoreSqlSchemaNameInQueryOptional, IsolatedStoreSqlSelectRequestContract, IsolatedStoreSqlSelectResponseContract, IsolatedStoreSqlStatsResponseContract, IsolatedStoreSqlTableNameInPathRequired, IsolatedStoreSqlUpdateRequestContract, IsolatedStoreSqlUpdateResponseContract, IsolatedStoreStageInPathRequired, IsolatedStoreStageListResponseContract, ListIsolatedStoresAliasLikeInQueryOptional, ListIsolatedStoresClientIdInQueryOptional, orgIdInPathRequired, RepairIsolatedStoreSqlMigrationJournalChecksumsRequestContract, RepairIsolatedStoreSqlMigrationJournalChecksumsResponseContract, RestoreIsolatedStoreRevisionResponseContract } from "../types";
|
|
8
|
+
import type { AdoptIsolatedStoreSqlMigrationBaselineRequestContract, AdoptIsolatedStoreSqlMigrationBaselineResponseContract, ApplyIsolatedStoreSqlMigrationsRequestContract, ApplyIsolatedStoreSqlMigrationsResponseContract, AttachIsolatedStoreSourceScopeRequestContract, AttachIsolatedStoreSourceScopeResponseContract, CreateIsolatedStoreCheckpointRequestContract, CreateIsolatedStoreCheckpointResponseContract, CreateIsolatedStoreRequestContract, CreateIsolatedStoreResponseContract, DeleteIsolatedStoreResponseContract, DeleteIsolatedStoreStageResponseContract, GetIsolatedStoreSqlMigrationStatusRequestContract, GetOrCreateIsolatedStoreRequestContract, GetOrCreateIsolatedStoreResponseContract, InitIsolatedStoreStageRequestContract, InitIsolatedStoreStageResponseContract, IsolatedStoreIdInPathRequired, IsolatedStoreListResponseContract, IsolatedStoreResponseContract, IsolatedStoreRevisionIdInPathRequired, IsolatedStoreRevisionListResponseContract, IsolatedStoreSqlBatchInsertRequestContract, IsolatedStoreSqlBatchInsertResponseContract, IsolatedStoreSqlBatchRequestContract, IsolatedStoreSqlBatchResponseContract, IsolatedStoreSqlCountRequestContract, IsolatedStoreSqlCountResponseContract, IsolatedStoreSqlDeleteRequestContract, IsolatedStoreSqlDeleteResponseContract, IsolatedStoreSqlDescribeTableResponseContract, IsolatedStoreSqlExecuteRequestContract, IsolatedStoreSqlExecuteResponseContract, IsolatedStoreSqlImportRequestContract, IsolatedStoreSqlImportResponseContract, IsolatedStoreSqlInsertRequestContract, IsolatedStoreSqlInsertResponseContract, IsolatedStoreSqlListTablesResponseContract, IsolatedStoreSqlMigrationStatusContract, IsolatedStoreSqlQueryRequestContract, IsolatedStoreSqlQueryResponseContract, IsolatedStoreSqlRlsStatusResponseContract, IsolatedStoreSqlSchemaNameInQueryOptional, IsolatedStoreSqlSelectRequestContract, IsolatedStoreSqlSelectResponseContract, IsolatedStoreSqlStatsResponseContract, IsolatedStoreSqlTableNameInPathRequired, IsolatedStoreSqlUpdateRequestContract, IsolatedStoreSqlUpdateResponseContract, IsolatedStoreStageInPathRequired, IsolatedStoreStageListResponseContract, ListIsolatedStoresAliasLikeInQueryOptional, ListIsolatedStoresClientIdInQueryOptional, orgIdInPathRequired, RepairIsolatedStoreSqlMigrationJournalChecksumsRequestContract, RepairIsolatedStoreSqlMigrationJournalChecksumsResponseContract, RestoreIsolatedStoreRevisionResponseContract } from "../types";
|
|
9
9
|
export declare class IsolatedStoresApi {
|
|
10
10
|
private client;
|
|
11
11
|
constructor(client: Client);
|
|
@@ -379,6 +379,19 @@ export declare class IsolatedStoresApi {
|
|
|
379
379
|
};
|
|
380
380
|
headers?: Record<string, string>;
|
|
381
381
|
}): Promise<RestoreIsolatedStoreRevisionResponseContract>;
|
|
382
|
+
/**
|
|
383
|
+
* Run a batch of SQL operations
|
|
384
|
+
* Runs up to 25 SQL operations in a single request, inside one transaction with the RLS runtime context applied once. Use this instead of issuing K sequential SQL calls: the ~200-300 ms per-request infrastructure floor is paid once for the whole batch. Supported operation kinds are query, execute, count, select, insert, batchInsert, update and delete; each operation reuses the fields of its single-operation request, while rlsContext and trustedRuntimeContext are set once for the batch. Results are returned in request order. The batch is all-or-nothing: the first failing operation rolls the whole transaction back and the error names the failing index. Each operation still requires its own permission, so a read-scoped caller cannot write through a batch. RLS-bypass reads and row import (COPY FROM STDIN) are not batchable.
|
|
385
|
+
*/
|
|
386
|
+
runIsolatedStoreSqlBatch(params: {
|
|
387
|
+
path: {
|
|
388
|
+
orgId: orgIdInPathRequired;
|
|
389
|
+
storeId: IsolatedStoreIdInPathRequired;
|
|
390
|
+
stage: IsolatedStoreStageInPathRequired;
|
|
391
|
+
};
|
|
392
|
+
headers?: Record<string, string>;
|
|
393
|
+
body: IsolatedStoreSqlBatchRequestContract;
|
|
394
|
+
}): Promise<IsolatedStoreSqlBatchResponseContract>;
|
|
382
395
|
/**
|
|
383
396
|
* Select rows
|
|
384
397
|
* Reads rows from a postgres table using simple filters, sort, limit and offset. This is the primary low-overhead runtime read surface.
|
|
@@ -438,6 +438,21 @@ class IsolatedStoresApi {
|
|
|
438
438
|
expectedContentType: "application/json",
|
|
439
439
|
});
|
|
440
440
|
}
|
|
441
|
+
/**
|
|
442
|
+
* Run a batch of SQL operations
|
|
443
|
+
* Runs up to 25 SQL operations in a single request, inside one transaction with the RLS runtime context applied once. Use this instead of issuing K sequential SQL calls: the ~200-300 ms per-request infrastructure floor is paid once for the whole batch. Supported operation kinds are query, execute, count, select, insert, batchInsert, update and delete; each operation reuses the fields of its single-operation request, while rlsContext and trustedRuntimeContext are set once for the batch. Results are returned in request order. The batch is all-or-nothing: the first failing operation rolls the whole transaction back and the error names the failing index. Each operation still requires its own permission, so a read-scoped caller cannot write through a batch. RLS-bypass reads and row import (COPY FROM STDIN) are not batchable.
|
|
444
|
+
*/
|
|
445
|
+
async runIsolatedStoreSqlBatch(params) {
|
|
446
|
+
return this.client.request({
|
|
447
|
+
method: "POST",
|
|
448
|
+
path: "/:orgId/isolated-stores/:storeId/stages/:stage/sql/batch",
|
|
449
|
+
pathParams: params.path,
|
|
450
|
+
headers: params.headers,
|
|
451
|
+
body: params.body,
|
|
452
|
+
opId: "runIsolatedStoreSqlBatch",
|
|
453
|
+
expectedContentType: "application/json",
|
|
454
|
+
});
|
|
455
|
+
}
|
|
441
456
|
/**
|
|
442
457
|
* Select rows
|
|
443
458
|
* Reads rows from a postgres table using simple filters, sort, limit and offset. This is the primary low-overhead runtime read surface.
|
|
@@ -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, AddPortalBlockRequestContract, AddPortalBlockResponseContract, AddPortalCardBlockRequestContract, AddPortalCardBlockResponseContract, AddPortalCarouselBlockRequestContract, AddPortalCarouselBlockResponseContract, AddPortalChatBlockRequestContract, AddPortalChatBlockResponseContract, AddPortalCountdownBlockRequestContract, AddPortalCountdownBlockResponseContract, AddPortalDatabaseBlockRequestContract, AddPortalDatabaseBlockResponseContract, AddPortalEmbedBlockRequestContract, AddPortalEmbedBlockResponseContract, AddPortalHeadingBlockRequestContract, AddPortalImageBlockRequestContract, AddPortalNoteBlockRequestContract, AddPortalNoteBlockResponseContract, AddPortalTextBlockRequestContract, BulkInviteToPortalRequestContract, BulkInviteToPortalResponseContract, CreatePortalFolderRequestContract, CreatePortalFolderResponseContract, CreatePortalPageRequestContract, CreatePortalPageResponseContract, CreatePortalPageWithNoteRequestContract, CreatePortalPageWithNoteResponseContract, CreatePortalRequestContract, CreatePortalResponseContract, DuplicatePortalItemRequestContract, DuplicatePortalItemResponseContract, DuplicatePortalRequestContract, GetPortalPageBlockCountResponseContract, globalIdInPathRequired, InvitePortalManagerRequestContract, InvitePortalManagerResponseContract, InviteToPortalRequestContract, InviteToPortalResponseContract, ListPortalAiAgentsResponseContract, ListPortalChatChannelsResponseContract, ListPortalChatUsersResponseContract, ListPortalContentResponseContract, ListPortalDatabaseBlockSourcesResponseContract, orgIdInPathRequired, OrgPortalListResponseContract, PortalDetailContract, PortalTextAndMediaBlockResponseContract, PublishPortalDraftResponseContract, SetDashboardViewReadonlyRequestContract, SetDashboardViewReadonlyResponseContract, UpdatePortalAccessRequestContract, UpdatePortalAccessResponseContract, UpdatePortalCustomCodeRequestContract, UpdatePortalCustomCodeResponseContract } from "../types";
|
|
8
|
+
import type { AddPortalAiAgentBlockRequestContract, AddPortalAiAgentBlockResponseContract, AddPortalAppBlockRequestContract, AddPortalAppBlockResponseContract, AddPortalAppPageRequestContract, AddPortalAppPageResponseContract, AddPortalBlankNoteBlockRequestContract, AddPortalBlankNoteBlockResponseContract, AddPortalBlockRequestContract, AddPortalBlockResponseContract, AddPortalCardBlockRequestContract, AddPortalCardBlockResponseContract, AddPortalCardGroupBlockRequestContract, AddPortalCardGroupBlockResponseContract, AddPortalCarouselBlockRequestContract, AddPortalCarouselBlockResponseContract, AddPortalChatBlockRequestContract, AddPortalChatBlockResponseContract, AddPortalCountdownBlockRequestContract, AddPortalCountdownBlockResponseContract, AddPortalCustomWidgetBlockRequestContract, AddPortalCustomWidgetBlockResponseContract, AddPortalDatabaseBlockRequestContract, AddPortalDatabaseBlockResponseContract, AddPortalEmbedBlockRequestContract, AddPortalEmbedBlockResponseContract, AddPortalFileUploaderBlockRequestContract, AddPortalFileUploaderBlockResponseContract, AddPortalFormBlockRequestContract, AddPortalFormBlockResponseContract, AddPortalHeadingBlockRequestContract, AddPortalHtmlCssBlockRequestContract, AddPortalHtmlCssBlockResponseContract, AddPortalImageBlockRequestContract, AddPortalInfoBlockRequestContract, AddPortalInfoBlockResponseContract, AddPortalKanbanBlockRequestContract, AddPortalKanbanBlockResponseContract, AddPortalLinkedBlockRequestContract, AddPortalLinkedBlockResponseContract, AddPortalNoteBlockRequestContract, AddPortalNoteBlockResponseContract, AddPortalTaskListBlockRequestContract, AddPortalTaskListBlockResponseContract, AddPortalTextBlockRequestContract, AddPortalTimelineBlockRequestContract, AddPortalTimelineBlockResponseContract, BulkInviteToPortalRequestContract, BulkInviteToPortalResponseContract, CreatePortalFolderRequestContract, CreatePortalFolderResponseContract, CreatePortalPageRequestContract, CreatePortalPageResponseContract, CreatePortalPageWithNoteRequestContract, CreatePortalPageWithNoteResponseContract, CreatePortalRequestContract, CreatePortalResponseContract, DuplicatePortalItemRequestContract, DuplicatePortalItemResponseContract, DuplicatePortalRequestContract, GetPortalPageBlockCountResponseContract, globalIdInPathRequired, InvitePortalManagerRequestContract, InvitePortalManagerResponseContract, InviteToPortalRequestContract, InviteToPortalResponseContract, ListPortalAiAgentsResponseContract, ListPortalChatChannelsResponseContract, ListPortalChatUsersResponseContract, ListPortalContentResponseContract, ListPortalDatabaseBlockSourcesResponseContract, ListPortalLinkableBlocksResponseContract, orgIdInPathRequired, OrgPortalListResponseContract, PortalDetailContract, PortalTextAndMediaBlockResponseContract, PublishPortalDraftResponseContract, SearchPortalInfoBlockIconsResponseContract, SetDashboardViewReadonlyRequestContract, SetDashboardViewReadonlyResponseContract, UpdatePortalAccessRequestContract, UpdatePortalAccessResponseContract, UpdatePortalCustomCodeRequestContract, UpdatePortalCustomCodeResponseContract } from "../types";
|
|
9
9
|
export declare class PortalsApi {
|
|
10
10
|
private client;
|
|
11
11
|
constructor(client: Client);
|
|
@@ -62,7 +62,7 @@ export declare class PortalsApi {
|
|
|
62
62
|
}): Promise<AddPortalBlankNoteBlockResponseContract>;
|
|
63
63
|
/**
|
|
64
64
|
* Add a block of any palette type to a portal page
|
|
65
|
-
* Stages a single block of any supported type onto an existing portal page — the universal building block behind the customizer's 'Add new block' palette (no new page or sidebar item is created). Pass pageId (the target page node id from listPortalContent) and type. Supported types: note, content,
|
|
65
|
+
* Stages a single block of any supported type onto an existing portal page — the universal building block behind the customizer's 'Add new block' palette (no new page or sidebar item is created). Pass pageId (the target page node id from listPortalContent) and type. Supported types: note, content, docs, help, request, meetings, links, files-dashboard, tasks-dashboard, chats-dashboard, files-recent, flexible. Type-specific fields: note/content require noteId; flexible requires template (e.g. {type:'text'|'image'|'title'|'dashboard'|'app-feature'|...}) and may carry bricks; the link cards (docs/help/request/meetings/links) and others take their fields via the free-form `properties` object (e.g. image/link). It does NOT accept type='projection' — use addPortalLinkedBlock for a Linked block. This op does NOT accept type='embed', a flexible block with template.type='timeline' or a timeline brick (use addPortalTimelineBlock), a flexible block with template.type='dashboard' or a dashboard brick (use addPortalDatabaseBlock) or type='chat' — use addPortalEmbedBlock for Embed blocks and addPortalChatBlock for Chat blocks. It also does NOT accept type='files-bucket': use addPortalFileUploaderBlock for File uploader blocks. It does NOT accept a flexible ai-agent template or an ai-agent brick: use addPortalAiAgentBlock, which binds the agent to the caller. It does NOT accept a flexible `form` template or a `form` brick either: use addPortalFormBlock, which owns the canonical Form block and its fields. It does NOT accept type='info': use addPortalInfoBlock, which owns the canonical Info block, its icon catalog and its destination resolution. It does NOT accept type='task-list' or a note/content block with properties.templateKey='task-list': use addPortalTaskListBlock, which creates the note and its task list. Use addPortalNoteBlock for the common note case or addPortalAppPage for an app on its own page. Note: a `content` block renames the page to its title, so leave title empty for content blocks. The block is staged in the portal's customizer draft (not published immediately); the owner reviews and publishes it. Returns the block id and the draft branch/seqs. Requires portals.write access.
|
|
66
66
|
*/
|
|
67
67
|
addPortalBlock(params: {
|
|
68
68
|
path: {
|
|
@@ -85,6 +85,19 @@ export declare class PortalsApi {
|
|
|
85
85
|
headers?: Record<string, string>;
|
|
86
86
|
body: AddPortalCardBlockRequestContract;
|
|
87
87
|
}): Promise<AddPortalCardBlockResponseContract>;
|
|
88
|
+
/**
|
|
89
|
+
* Add a Card group block to a portal page
|
|
90
|
+
* Stages one Customizer-compatible Card group on an EXISTING portal page — the programmatic equivalent of the customizer's Content display "Card group" tile, a row of small linked cards. It creates exactly one flexible block with a Description brick and the cards; no page, sidebar item or media asset is created. `content.items` holds 1 to 6 cards, each with a `title` (the caption, plain text without dynamic variables), an optional `image` naming one of the four built-in tile images (`calendar`, `book`, `pen`, `briefcase` — an url, upload, asset id or local path is rejected) and an optional `destination`: an exact `pageId` of a page in THIS portal, an absolute https URL or an email address; omitting it keeps the template link of that card position and an explicit `null` leaves the card without a link. Omitting `content.items` reproduces the Customizer's four template cards. `content.description` is the text above the cards (`visible: false` hides it, otherwise plain text plus one palette colour token such as `cyan-700`, size `s`/`m`/`l`/`xl`, a unique set of `bold`/`italic`/`underline`/`lineThrough` styles and alignment); `visible` defaults to `true`, so a visible Description does NOT need `visible: true`. `title` is the wrapper title shown above the cards (default "Card group"). `appearance` is optional; omitting it keeps the Card group's canonical blank wrapper, and a `custom` backdrop takes a colour, gradient or one of the five preset background images (`azure`, `mira`, `solis`, `serenity`, `glow`). `layout` sets Customizer Width (2-6, default 4) and Height (Auto by default, a manual value is at least 50px). Per-card colours, the card gap and justification are customizer-only settings and are not accepted here, and neither are HTML, Markdown, CSS, Tailwind classes or raw bricks. The block is staged in the portal's customizer draft (not published immediately). Requires portals.write access.
|
|
91
|
+
*/
|
|
92
|
+
addPortalCardGroupBlock(params: {
|
|
93
|
+
path: {
|
|
94
|
+
orgId: orgIdInPathRequired;
|
|
95
|
+
portalId: globalIdInPathRequired;
|
|
96
|
+
pageId: globalIdInPathRequired;
|
|
97
|
+
};
|
|
98
|
+
headers?: Record<string, string>;
|
|
99
|
+
body: AddPortalCardGroupBlockRequestContract;
|
|
100
|
+
}): Promise<AddPortalCardGroupBlockResponseContract>;
|
|
88
101
|
/**
|
|
89
102
|
* Add a Carousel block to a portal page
|
|
90
103
|
* Stages one Customizer-compatible Carousel on an EXISTING portal page — the programmatic equivalent of the customizer's Content display "Carousel" tile. It creates exactly one flexible block with a single Carousel brick; no page, sidebar item or media asset is created. Omit `content` to get the Customizer default of three slides (Deliberation, Elaboration, Presentation) with their built-in images, descriptions, More buttons and links. `content.items` replaces that list entirely and must hold 1 to 6 slides in visual order; the slide index is taken from the array position and is not accepted from the caller. Each slide takes `caption` and `description` (plain text; only `description` supports the `{{ClientName}}` and `{{ClientLastName}}` variables), `button: {text}` or `null` for no Button, and `destination` or `null` for no link — an exact `pageId` of a page in THIS portal, an absolute https URL or an email address. The slide surface and its Button share that one destination. Every slide image is a built-in one: an image/video URL, asset id, file name, base64, local path or upload is rejected, as are a raw DynamicLink, raw item index, brick, CSS class, autoplay, duration, controls and indicators. Carousel has no public Appearance settings. `layout` sets Customizer Width (2-6, default 6) and Height (Auto by default, a manual value is at least 50px). The block is staged in the portal's customizer draft (not published immediately). Requires portals.write access.
|
|
@@ -124,6 +137,19 @@ export declare class PortalsApi {
|
|
|
124
137
|
headers?: Record<string, string>;
|
|
125
138
|
body: AddPortalCountdownBlockRequestContract;
|
|
126
139
|
}): Promise<AddPortalCountdownBlockResponseContract>;
|
|
140
|
+
/**
|
|
141
|
+
* Add a Custom widget block to a portal page
|
|
142
|
+
* Stages one Customizer-compatible Custom widget on an EXISTING portal page — the programmatic equivalent of the customizer's Custom "Custom widget" tile. It creates exactly one flexible block of the `custom` template; no page, sidebar item or media asset is created. Omit `content` to get the Customizer default of the nine "Your Consultant" bricks. `content.bricks` replaces that list entirely and holds the bricks in visual order, each one of the seven kinds the Customizer's "Add block" palette offers: `heading`, `text`, `image`, `avatar`, `rating`, `link` and `button`. A field belonging to another brick kind is rejected rather than dropped. Every image is a built-in one: an image URL, asset id, file name, base64, local path or upload is rejected, as are a raw DynamicLink, a raw brick index, a CSS class and a theme override. A `link` brick needs a `destination`; a `button` brick without one is created unlinked and stays linkable in the Customizer. A destination is an exact `pageId` of a page in THIS portal, an absolute https URL or an email address. `title` and `appearance` set the Customizer Appearance section: omitting `appearance` keeps the widget's canonical `blank` backdrop with the title shown, and `background`, `padding` and `showTitle` apply only to `custom`. `layout` sets Customizer Width (2-6, default 2) and Height (Auto by default, a manual value is at least 50px). The block is staged in the portal's customizer draft (not published immediately). Requires portals.write access.
|
|
143
|
+
*/
|
|
144
|
+
addPortalCustomWidgetBlock(params: {
|
|
145
|
+
path: {
|
|
146
|
+
orgId: orgIdInPathRequired;
|
|
147
|
+
portalId: globalIdInPathRequired;
|
|
148
|
+
pageId: globalIdInPathRequired;
|
|
149
|
+
};
|
|
150
|
+
headers?: Record<string, string>;
|
|
151
|
+
body: AddPortalCustomWidgetBlockRequestContract;
|
|
152
|
+
}): Promise<AddPortalCustomWidgetBlockResponseContract>;
|
|
127
153
|
/**
|
|
128
154
|
* Add a Database block to a portal page
|
|
129
155
|
* Stages one Customizer-compatible Database block on an EXISTING portal page — the programmatic equivalent of the customizer's "Database" tile. It creates exactly one flexible block with a single dashboard brick; no page, sidebar item, database, dashboard or view is created and the selected view's own settings are untouched. Both Customizer types are supported: `database` (Database -> Table -> View) and `dashboard` (a shared source such as All forms -> View). Pass exact ids from listPortalDatabaseBlockSources; names, aliases and URLs are rejected, and the dashboard must belong to `databaseId` in database mode. Optional `title` (default "Database"), `itemsPerPage` (10/20/50/100/200/500, default 100), `appearance` and `layout`. To change whether the view is editable call setDashboardViewReadonly separately — that is a global view setting. The block is staged in the portal's customizer draft (not published immediately). Requires portals.write access.
|
|
@@ -150,6 +176,32 @@ export declare class PortalsApi {
|
|
|
150
176
|
headers?: Record<string, string>;
|
|
151
177
|
body: AddPortalEmbedBlockRequestContract;
|
|
152
178
|
}): Promise<AddPortalEmbedBlockResponseContract>;
|
|
179
|
+
/**
|
|
180
|
+
* Add a File uploader block to a portal page
|
|
181
|
+
* Stages one Customizer-compatible File uploader on an EXISTING portal page — the programmatic equivalent of the customizer's File management "File uploader" tile. It creates an EMPTY upload area (internally a `files-bucket` block) that non-visitor portal users can upload files to and manage; no page, sidebar item, bucket or file is created and nothing is uploaded. The body may be empty, which reproduces the Customizer default: the title "File uploader", no description and both file columns hidden. `title` is plain text and `description` is a plain-text hint of at most 50 characters. `showAuthor` and `showUploadDate` add the matching file-list columns; neither changes who may upload — that stays a function of the viewer's portal role. `layout` sets Width (3, 4 or 6, default 3) and Height (Auto by default, a manual value is at least 50px). The screen has no Appearance section, so `appearance`, `rowspan`, upload permissions, bucket/file ids and query/sort/limit are not accepted. The block is staged in the portal's customizer draft (not published immediately). Requires portals.write access.
|
|
182
|
+
*/
|
|
183
|
+
addPortalFileUploaderBlock(params: {
|
|
184
|
+
path: {
|
|
185
|
+
orgId: orgIdInPathRequired;
|
|
186
|
+
portalId: globalIdInPathRequired;
|
|
187
|
+
pageId: globalIdInPathRequired;
|
|
188
|
+
};
|
|
189
|
+
headers?: Record<string, string>;
|
|
190
|
+
body: AddPortalFileUploaderBlockRequestContract;
|
|
191
|
+
}): Promise<AddPortalFileUploaderBlockResponseContract>;
|
|
192
|
+
/**
|
|
193
|
+
* Add a Form block to a portal page
|
|
194
|
+
* Stages one Customizer-compatible Form on an EXISTING portal page — the programmatic equivalent of the customizer's Content display "Form" tile. It creates exactly one flexible block with a Description brick and a Form content brick; no page, sidebar item, form response or file is created. The body may be empty, which reproduces the Customizer default: the title "Form", the contact-and-company description copy and five fields — required half-width First name, Last name and Contact email, optional half-width Project name and an optional full-width Project overview — plus a visible "Submit" button and reusable true. `content.form.fields` is the COMPLETE visual-order list: omit it to keep those five, or send [] for a Form without fields. Each field takes a `type` (text, textarea, number, phone, email, checkbox, select, file or date) and the optional `label`, `required` and `width` (`half`/`full`); `placeholder` is accepted only for text, textarea, number, phone, email and select, and `options` is a string array for select only — never the persisted newline-separated string. Field ids, indexes, column counts, raw bricks and renderer schema are rejected. Field labels, placeholders, options and the submit text are plain text without dynamic variables; the block `title` and the Description text accept `{{ClientName}}` and `{{ClientLastName}}`. `content.description` and `content.form` are hidden independently with `visible: false`. `appearance` sets Customizer Backdrop `none`, `blank` or `custom`; omitting it keeps the canonical blank backdrop with the title shown, and a custom backdrop takes a background, padding (default `s`) and `showTitle` (default true). `layout` sets Width (2-6, default 6) and Height (Auto by default, a manual value is at least 50px). The block is staged in the portal's customizer draft (not published immediately). Requires portals.write access.
|
|
195
|
+
*/
|
|
196
|
+
addPortalFormBlock(params: {
|
|
197
|
+
path: {
|
|
198
|
+
orgId: orgIdInPathRequired;
|
|
199
|
+
portalId: globalIdInPathRequired;
|
|
200
|
+
pageId: globalIdInPathRequired;
|
|
201
|
+
};
|
|
202
|
+
headers?: Record<string, string>;
|
|
203
|
+
body: AddPortalFormBlockRequestContract;
|
|
204
|
+
}): Promise<AddPortalFormBlockResponseContract>;
|
|
153
205
|
/**
|
|
154
206
|
* Add a Text & Media Heading block to a portal page
|
|
155
207
|
* Stages one Customizer-compatible Heading block on an existing portal page — the programmatic equivalent of the customizer's Text & Media "Heading" tile. `content` carries the text settings (plain text, one palette colour token such as `cyan-700` — never HEX or CSS —, size `s`/`m`/`l`/`xl`, a unique set of `bold`, `italic`, `underline`, `lineThrough` styles and alignment). `appearance` is the Customizer Appearance section; a `custom` backdrop takes a colour, gradient or one of the five preset background images (`azure`, `mira`, `solis`, `serenity`, `glow`) — an image URL, asset id or upload is rejected. HTML, Markdown, CSS, Tailwind classes, a wrapper title and raw bricks are not accepted. Defaults: text "Your Title Goes Here", size `l`, no styles, left alignment and a blank backdrop. It creates exactly one flexible block on an EXISTING page; no page, sidebar item or media asset is created. `layout` sets Customizer Width (2-6, default 6) and Height (Auto by default, a manual value is at least 50px); `rowspan`, row placement and responsive values are not part of this contract. The block is staged in the portal's customizer draft (not published immediately). Requires portals.write access.
|
|
@@ -163,6 +215,19 @@ export declare class PortalsApi {
|
|
|
163
215
|
headers?: Record<string, string>;
|
|
164
216
|
body: AddPortalHeadingBlockRequestContract;
|
|
165
217
|
}): Promise<PortalTextAndMediaBlockResponseContract>;
|
|
218
|
+
/**
|
|
219
|
+
* Add an HTML/CSS block to a portal page
|
|
220
|
+
* Stages one Customizer-compatible HTML/CSS block on an EXISTING portal page — the programmatic equivalent of the customizer's Custom "HTML/CSS block" tile. It creates exactly one flexible block of the `code` template carrying a single code brick; no page, sidebar item or media asset is created. ONLY a portal served from a verified custom CNAME domain may carry one — on a Fusebase-owned portal subdomain the request is rejected with 400. (The Customizer's own HTML/CSS editors gate on the domain only and have a beta-programme escape hatch this operation does not honour, so a rejection here does not always mean the owner cannot do it in the UI.) Omit `content` to get the Customizer default demo (a "Sales Distribution" pie chart). `content` replaces that demo entirely and takes `html` (markup inserted as-is), `style` (raw CSS with no `<style>` tag, injected globally, so scope every rule with your own class names) and `script` (raw JavaScript with no `<script>` tag, run on every visit of the published page); an omitted field is empty rather than the demo value, and each is limited to 50000 characters. The code is stored verbatim and is NOT sanitized, so send only markup and scripts the portal owner asked for. The block's wrapper is pinned to the Customizer's own edge-to-edge one, which hides `title` BY DEFAULT; the owner can change the backdrop, padding and Show title in the Customizer's Appearance section afterwards, so this operation exposes no `appearance` field rather than a partial one. `layout` sets Customizer Width (2-6, default 3) and Height (Auto by default, a manual value is at least 50px). The block is staged in the portal's customizer draft (not published immediately), so the portal owner reviews the code before it goes live. Requires portals.write access.
|
|
221
|
+
*/
|
|
222
|
+
addPortalHtmlCssBlock(params: {
|
|
223
|
+
path: {
|
|
224
|
+
orgId: orgIdInPathRequired;
|
|
225
|
+
portalId: globalIdInPathRequired;
|
|
226
|
+
pageId: globalIdInPathRequired;
|
|
227
|
+
};
|
|
228
|
+
headers?: Record<string, string>;
|
|
229
|
+
body: AddPortalHtmlCssBlockRequestContract;
|
|
230
|
+
}): Promise<AddPortalHtmlCssBlockResponseContract>;
|
|
166
231
|
/**
|
|
167
232
|
* Add a Text & Media Image block to a portal page
|
|
168
233
|
* Stages one Customizer-compatible Image block on an existing portal page — the programmatic equivalent of the customizer's Text & Media "Image" tile. It always creates the customizer's default stock image: `assetId`, `src`, a URL, base64, a file path or name, HTML and any other image input are rejected, and so are Appearance and text settings. Only `layout` applies. It creates exactly one flexible block on an EXISTING page; no page, sidebar item or media asset is created. `layout` sets Customizer Width (2-6, default 6) and Height (Auto by default, a manual value is at least 50px); `rowspan`, row placement and responsive values are not part of this contract. The block is staged in the portal's customizer draft (not published immediately). Requires portals.write access.
|
|
@@ -176,6 +241,45 @@ export declare class PortalsApi {
|
|
|
176
241
|
headers?: Record<string, string>;
|
|
177
242
|
body: AddPortalImageBlockRequestContract;
|
|
178
243
|
}): Promise<PortalTextAndMediaBlockResponseContract>;
|
|
244
|
+
/**
|
|
245
|
+
* Add an Info block to a portal page
|
|
246
|
+
* Stages one Customizer-compatible Info block on an EXISTING portal page — the programmatic equivalent of the customizer's Content display "Info block" tile: a compact clickable tile with one image, one title and one destination. No page, sidebar item or media asset is created, and it is NOT the Card tile (use addPortalCardBlock for that). Required `title` is the text shown inside the tile. Required `image` is exactly one semantic variant: `{type:"emoji", emoji}` with one visible Unicode emoji, `{type:"icon", iconId}` with an exact id from searchPortalInfoBlockIcons, or `{type:"custom", url}` with an existing absolute https image URL the user supplied — this operation uploads nothing and the internal `emoji#`/`icon#`/`url#` format is rejected. Required `destination` is an exact `pageId` of a page in THIS portal or an absolute https URL. Optional `openInNewTab` (default true) and `layout` set Customizer Width (1-3, default 1) and Height (Auto by default, a manual value is at least 50px); there is no row count. The Info block has no Appearance section: a backdrop, colour, padding, CSS or a raw wrapper is rejected. The block is staged in the portal's customizer draft (not published immediately). Requires portals.write access.
|
|
247
|
+
*/
|
|
248
|
+
addPortalInfoBlock(params: {
|
|
249
|
+
path: {
|
|
250
|
+
orgId: orgIdInPathRequired;
|
|
251
|
+
portalId: globalIdInPathRequired;
|
|
252
|
+
pageId: globalIdInPathRequired;
|
|
253
|
+
};
|
|
254
|
+
headers?: Record<string, string>;
|
|
255
|
+
body: AddPortalInfoBlockRequestContract;
|
|
256
|
+
}): Promise<AddPortalInfoBlockResponseContract>;
|
|
257
|
+
/**
|
|
258
|
+
* Add a Kanban board as a block to a portal page
|
|
259
|
+
* Creates a new Fusebase note, shares it into the portal, initialises a Kanban board inside it and adds the note as a block to an existing portal page — the programmatic equivalent of the customizer's Project management "Kanban" tile. No new page and no sidebar menu item is created. For a published page resolve pageId from listPortalContent; for a page created earlier in the active draft use the pageId that operation returned. Optional body: title (block, note and board title, non-empty and at most 100 characters, default "Kanban") and columns (1-10 column titles in order, each at most 100 characters, default "To do", "In progress", "Done"). The board starts empty — tasks are added by portal users, not by this operation. Use addPortalBlankNoteBlock when an empty note is wanted instead. The block is appended after the last block of the page body and is staged in the portal's customizer draft (not published immediately). Returns the note/board/block ids and the draft branch/seqs. Requires portals.write access.
|
|
260
|
+
*/
|
|
261
|
+
addPortalKanbanBlock(params: {
|
|
262
|
+
path: {
|
|
263
|
+
orgId: orgIdInPathRequired;
|
|
264
|
+
portalId: globalIdInPathRequired;
|
|
265
|
+
pageId: globalIdInPathRequired;
|
|
266
|
+
};
|
|
267
|
+
headers?: Record<string, string>;
|
|
268
|
+
body?: AddPortalKanbanBlockRequestContract;
|
|
269
|
+
}): Promise<AddPortalKanbanBlockResponseContract>;
|
|
270
|
+
/**
|
|
271
|
+
* Add a Linked block to a portal page
|
|
272
|
+
* Stages one Customizer-compatible Linked block on an EXISTING portal page — the programmatic equivalent of the customizer's Custom "Linked block" tile. The block MIRRORS an existing block of another page: its title, width, height, wrapper and actions are taken from the source and it keeps following the source, so no title, layout, appearance or content is accepted here. `source` is the exact `portalId`/`pageId`/`blockId` triple from listPortalLinkableBlocks; never invent ids. Both portals must belong to this organization and the caller must be allowed to edit both. A block staged only in a draft can be linked ONLY within the same portal — a cross-portal source must already be published. A Linked block cannot point at another Linked block, nor at a block on the target page itself. The block is staged in the target portal's customizer draft (not published immediately). Requires portals.write access.
|
|
273
|
+
*/
|
|
274
|
+
addPortalLinkedBlock(params: {
|
|
275
|
+
path: {
|
|
276
|
+
orgId: orgIdInPathRequired;
|
|
277
|
+
portalId: globalIdInPathRequired;
|
|
278
|
+
pageId: globalIdInPathRequired;
|
|
279
|
+
};
|
|
280
|
+
headers?: Record<string, string>;
|
|
281
|
+
body: AddPortalLinkedBlockRequestContract;
|
|
282
|
+
}): Promise<AddPortalLinkedBlockResponseContract>;
|
|
179
283
|
/**
|
|
180
284
|
* Add an existing Fusebase note as a block to a portal page
|
|
181
285
|
* Embeds an existing Fusebase note as a content block on an existing portal page (no new page or sidebar item is created). The note must already exist in the portal's workspace and be shared into the portal (e.g. created via createPortalPageWithNote). Pass pageId (the target page node id, obtained from listPortalContent) and noteId. The block is staged in the portal's customizer draft (not published immediately): the portal owner opens the customizer, reviews the pending block, and publishes it. Returns the created block id and the draft branch/seqs. Requires portals.write access.
|
|
@@ -188,6 +292,19 @@ export declare class PortalsApi {
|
|
|
188
292
|
headers?: Record<string, string>;
|
|
189
293
|
body: AddPortalNoteBlockRequestContract;
|
|
190
294
|
}): Promise<AddPortalNoteBlockResponseContract>;
|
|
295
|
+
/**
|
|
296
|
+
* Add a task list as a block to a portal page
|
|
297
|
+
* Creates a new Fusebase note, shares it into the portal, initialises a task list inside it and adds the note as a block to an existing portal page — the programmatic equivalent of the customizer's Project management "Task list" tile. No new page and no sidebar menu item is created. For a published page resolve pageId from listPortalContent; for a page created earlier in the active draft use the pageId that operation returned. Optional body: title (block and task list title, at most 100 characters, default "Task list") and layout (colspan 3-6, default 6; height in pixels or null for Auto, default null). The list starts empty — tasks are added by portal users, not by this operation, and an existing task list cannot be attached. Use addPortalBlankNoteBlock when an empty note is wanted instead. The block is appended after the last block of the page body and is staged in the portal's customizer draft (not published immediately). Returns the note/task list/block ids and the draft branch/seqs. Requires portals.write access.
|
|
298
|
+
*/
|
|
299
|
+
addPortalTaskListBlock(params: {
|
|
300
|
+
path: {
|
|
301
|
+
orgId: orgIdInPathRequired;
|
|
302
|
+
portalId: globalIdInPathRequired;
|
|
303
|
+
pageId: globalIdInPathRequired;
|
|
304
|
+
};
|
|
305
|
+
headers?: Record<string, string>;
|
|
306
|
+
body?: AddPortalTaskListBlockRequestContract;
|
|
307
|
+
}): Promise<AddPortalTaskListBlockResponseContract>;
|
|
191
308
|
/**
|
|
192
309
|
* Add a Text & Media Simple text block to a portal page
|
|
193
310
|
* Stages one Customizer-compatible Simple text block on an existing portal page — the programmatic equivalent of the customizer's Text & Media "Simple text" tile. `content` carries the text settings (plain text, one palette colour token such as `cyan-700` — never HEX or CSS —, size `s`/`m`/`l`/`xl`, a unique set of `bold`, `italic`, `underline`, `lineThrough` styles and alignment). `appearance` is the Customizer Appearance section; a `custom` backdrop takes a colour, gradient or one of the five preset background images (`azure`, `mira`, `solis`, `serenity`, `glow`) — an image URL, asset id or upload is rejected. HTML, Markdown, CSS, Tailwind classes, a wrapper title and raw bricks are not accepted. Defaults: text "Your journey starts here! Add your unique message to engage your audience.", size `m`, no styles, left alignment and a blank backdrop. It creates exactly one flexible block on an EXISTING page; no page, sidebar item or media asset is created. `layout` sets Customizer Width (2-6, default 6) and Height (Auto by default, a manual value is at least 50px); `rowspan`, row placement and responsive values are not part of this contract. The block is staged in the portal's customizer draft (not published immediately). Requires portals.write access.
|
|
@@ -201,6 +318,19 @@ export declare class PortalsApi {
|
|
|
201
318
|
headers?: Record<string, string>;
|
|
202
319
|
body: AddPortalTextBlockRequestContract;
|
|
203
320
|
}): Promise<PortalTextAndMediaBlockResponseContract>;
|
|
321
|
+
/**
|
|
322
|
+
* Add a Timeline block to a portal page
|
|
323
|
+
* Stages one Customizer-compatible Timeline block on an EXISTING portal page — the programmatic equivalent of the customizer's "Timeline" tile from Project management. Use it for a visual ordered sequence of project phases, milestones or steps with completion progress; it is NOT a Task list, Kanban, Carousel or Card group. It creates exactly one flexible block with four bricks (Image, Description, Step group, Button); no page, sidebar item or media asset is created. The body may be empty, which reproduces the Customizer default: the title "Timeline", the horizontal view, the built-in image, the project description, the completed Vision and Arrangements steps, the incomplete Launch step and a "View project" button. `view` is `horizontal` (default) or `vertical`. `title` is the wrapper title (plain text, only the `{{ClientName}}` and `{{ClientLastName}}` variables). `content.image.visible` shows or hides the BUILT-IN image; no image url, asset id, filename, base64 or local path is accepted. `content.description` takes `visible`, `text`, `color`, `size`, `styles` and `align`. `content.steps` REPLACES the whole step list with 1 to 6 steps in visual order; every step takes a `title` of at most 25 characters and may take `completed` and a `destination`, and completed steps must be consecutive from the first one. `content.button` takes `visible`, a plain `text` and a `destination`. A step or Button destination is an exact pageId in this SAME portal, an absolute https:// URL or an email address; raw DynamicLink fields are rejected. `appearance` sets Customizer Backdrop `none`, `blank` or `custom`; a custom backdrop takes a background, padding (default `s`) and `showTitle` (default true). `layout` sets Width (2-6, default 6) and Height (Auto by default, a manual value is at least 50px). The block is staged in the portal's customizer draft (not published immediately). Requires portals.write access.
|
|
324
|
+
*/
|
|
325
|
+
addPortalTimelineBlock(params: {
|
|
326
|
+
path: {
|
|
327
|
+
orgId: orgIdInPathRequired;
|
|
328
|
+
portalId: globalIdInPathRequired;
|
|
329
|
+
pageId: globalIdInPathRequired;
|
|
330
|
+
};
|
|
331
|
+
headers?: Record<string, string>;
|
|
332
|
+
body: AddPortalTimelineBlockRequestContract;
|
|
333
|
+
}): Promise<AddPortalTimelineBlockResponseContract>;
|
|
204
334
|
/**
|
|
205
335
|
* Invite multiple users to a portal in one call
|
|
206
336
|
* Invites a batch of users to a single portal in one request, replacing N sequential inviteToPortal calls. Portal discovery (listPortals/getPortal) runs once for the whole batch. Invites are processed with bounded concurrency (default 5, max 5); the rest are queued. With background=false (default) the response waits for all invites and returns aggregated per-invitation results (status='completed'). With background=true the response returns immediately (status='processing') and invites run in the background without blocking the caller. Per-invitation orgRole/isFullAccess semantics match inviteToPortal. Invarian — before calling for client invites (orgRole='client' or unspecified): ALWAYS ask the user 'Full access (all pages) or Shared only (public pages)?' and wait for their answer.
|
|
@@ -406,6 +536,18 @@ export declare class PortalsApi {
|
|
|
406
536
|
};
|
|
407
537
|
headers?: Record<string, string>;
|
|
408
538
|
}): Promise<ListPortalDatabaseBlockSourcesResponseContract>;
|
|
539
|
+
/**
|
|
540
|
+
* Discover the blocks a Linked block can point at
|
|
541
|
+
* Read-only discovery of the exact source block ids addPortalLinkedBlock requires. Lists the blocks of ONE page over the published portal AND its active customizer draft, in display order, as `blocks` of `blockId`, `type`, `templateType`, `title` and `draftOnly`. A `draftOnly` block is staged but not published and may only be linked from a page in the SAME portal. Linked blocks are excluded — a Linked block cannot point at another one. The response carries identity only: never bricks, wrappers, content, data or draft events. Requires portals.write access.
|
|
542
|
+
*/
|
|
543
|
+
listPortalLinkableBlocks(params: {
|
|
544
|
+
path: {
|
|
545
|
+
orgId: orgIdInPathRequired;
|
|
546
|
+
portalId: globalIdInPathRequired;
|
|
547
|
+
pageId: globalIdInPathRequired;
|
|
548
|
+
};
|
|
549
|
+
headers?: Record<string, string>;
|
|
550
|
+
}): Promise<ListPortalLinkableBlocksResponseContract>;
|
|
409
551
|
/**
|
|
410
552
|
* List organization portals
|
|
411
553
|
* Returns portals visible for the caller in the organization. Requires portals.read and org access.
|
|
@@ -417,8 +559,8 @@ export declare class PortalsApi {
|
|
|
417
559
|
headers?: Record<string, string>;
|
|
418
560
|
}): Promise<OrgPortalListResponseContract>;
|
|
419
561
|
/**
|
|
420
|
-
* Publish
|
|
421
|
-
* Publishes
|
|
562
|
+
* Publish an entire portal draft after user confirmation
|
|
563
|
+
* Publishes every staged change in the portal's customizer draft to the live portal, including changes the owner or another user staged manually. Never call this operation automatically after staging content or settings. Before every call, tell the user that the entire pending draft will go live, ask one clear yes/no question, and wait for explicit confirmation. Do not infer publish permission from a content-edit request or successful staging. Confirmation is single-use and applies only to the current draft and one attempt. Returns 400 if the draft is empty and 409 if the portal was published elsewhere since the draft was based; obtain new confirmation before retrying. Requires portals.write access.
|
|
422
564
|
*/
|
|
423
565
|
publishPortalDraft(params: {
|
|
424
566
|
path: {
|
|
@@ -427,6 +569,18 @@ export declare class PortalsApi {
|
|
|
427
569
|
};
|
|
428
570
|
headers?: Record<string, string>;
|
|
429
571
|
}): Promise<PublishPortalDraftResponseContract>;
|
|
572
|
+
/**
|
|
573
|
+
* Search the Portal Info block icon catalog
|
|
574
|
+
* Searches the icon catalog addPortalInfoBlock accepts — a versioned snapshot of the Customizer's own icon set. Call it before addPortalInfoBlock whenever the user asks for an Icon rather than an Emoji or a Custom image, and pass the returned exact `items[].id` as `image.iconId`; never derive an id from a label. `query` is optional (omit it to browse) and is matched against the icon id. Returns one bounded page of { id, label }, the matching `total`, and a nextCursor when more pages exist. The catalog is global and read-only: it is not scoped to an organization or portal, returns no SVG content, and changes nothing.
|
|
575
|
+
*/
|
|
576
|
+
searchPortalInfoBlockIcons(params: {
|
|
577
|
+
query?: {
|
|
578
|
+
query?: string;
|
|
579
|
+
limit?: number;
|
|
580
|
+
cursor?: string;
|
|
581
|
+
};
|
|
582
|
+
headers?: Record<string, string>;
|
|
583
|
+
}): Promise<SearchPortalInfoBlockIconsResponseContract>;
|
|
430
584
|
/**
|
|
431
585
|
* Restrict or allow editing of a dashboard view
|
|
432
586
|
* The customizer's "Restrict editing" switch. This is a GLOBAL view setting, not a portal-block setting: it applies everywhere the view is used, including other portal blocks and the dashboard itself. Call it only when the user explicitly asks to restrict or allow editing; it is never part of addPortalDatabaseBlock. Requires dashboard.write access.
|
|
@@ -454,7 +608,7 @@ export declare class PortalsApi {
|
|
|
454
608
|
}): Promise<UpdatePortalAccessResponseContract>;
|
|
455
609
|
/**
|
|
456
610
|
* Update portal custom CSS/JS code
|
|
457
|
-
* Sets custom code for the portal: css (custom styles), headCode (HTML/JS at the start of <head>), and bodyCode (HTML/JS at the end of <body>). Only the provided fields change; omitted fields keep their current value, and an empty string clears a field. At least one field is required. Custom code only renders on portals served from a custom CNAME domain. The change is staged in the portal's customizer draft (not published immediately): the portal owner opens the customizer, reviews the pending change, and publishes it. Returns the draft branch/seq. Requires portals.write access.
|
|
611
|
+
* Sets custom code for the portal: css (custom styles), headCode (HTML/JS at the start of <head>), and bodyCode (HTML/JS at the end of <body>). css is auto-scoped under the portal root container #main-scrolling-container so it cannot leak into the customizer UI; scope selectors accordingly and avoid body/html/:root. Only the provided fields change; omitted fields keep their current value, and an empty string clears a field. At least one field is required. Custom code only renders on portals served from a custom CNAME domain. The change is staged in the portal's customizer draft (not published immediately): the portal owner opens the customizer, reviews the pending change, and publishes it. Returns the draft branch/seq. Requires portals.write access.
|
|
458
612
|
*/
|
|
459
613
|
updatePortalCustomCode(params: {
|
|
460
614
|
path: {
|