@fusebase/fusebase-gate-sdk 2.13.0 → 2.13.1

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.
@@ -45,7 +45,7 @@ export declare class FilesApi {
45
45
  }): Promise<CreateTempStoredFileUploadResponseContract>;
46
46
  /**
47
47
  * Delete file
48
- * Deletes a file-service stored file by stored-file UUID. Gate never handles the file bytes.
48
+ * Deletes a file-service stored file by stored-file UUID. Gate never handles the file bytes. Not available to organization clients: they remove the files they uploaded with `removeBucketAttachment`.
49
49
  */
50
50
  deleteFile(params: {
51
51
  path: {
@@ -56,7 +56,7 @@ export declare class FilesApi {
56
56
  }): Promise<DeleteFileResponseContract>;
57
57
  /**
58
58
  * List bucket attachments
59
- * Lists the organization's files from every source in one list: files uploaded into an app (`app`), note attachments (`note`) and portal files (`portalPage`, `portalGlobal`, `portalFiles`, `portalBlock`). Each item carries its source `target`, its file `kind` (`image`, `video`, `audio`, `doc`, `archive` or `file`, detected from the mime type), the uploader `userId` (resolve the email and role with the org-users operations), the `size` in bytes, the custom `attributes` and the `accessPrincipals`. Filter by source with `targets`, keep only some apps or other sources with `targetIds` (matched against the item `targetId`; a bare app id needs `targets` set to `app`), drop small files with `sizeFrom`, keep only the files one user uploaded with `uploaderId`, keep only some file types with `kinds`, and match custom metadata with `attributes`, a JSON object of strings sent as a string, such as `{"source":"file-manager"}`, where every given pair must match exactly (`total` follows the same filter). Clients only receive files their access principals or the bucket permissions allow.
59
+ * Lists the organization's files from every source in one list: files uploaded into an app (`app`), note attachments (`note`) and portal files (`portalPage`, `portalGlobal`, `portalFiles`, `portalBlock`). Each item carries its source `target`, its file `kind` (`image`, `video`, `audio`, `doc`, `archive` or `file`, detected from the mime type), the uploader `userId` (resolve the email and role with the org-users operations), the `size` in bytes, the custom `attributes` and the `accessPrincipals`. Filter by source with `targets`, keep only some apps or other sources with `targetIds` (matched against the item `targetId`; a bare app id needs `targets` set to `app`), drop small files with `sizeFrom`, keep only the files added in a date range with `createdFrom` and `createdTo` (unix seconds like `createdAt`, both inclusive, either alone), keep only the files one user uploaded with `uploaderId`, keep only some file types with `kinds`, and match custom metadata with `attributes`, a JSON object of strings sent as a string, such as `{"source":"file-manager"}`, where every given pair must match exactly (`total` follows the same filter). Clients only receive files their access principals or the bucket permissions allow.
60
60
  */
61
61
  listBucketAttachments(params: {
62
62
  path: {
@@ -66,6 +66,8 @@ export declare class FilesApi {
66
66
  targets?: unknown[];
67
67
  targetIds?: unknown[];
68
68
  sizeFrom?: number;
69
+ createdFrom?: number;
70
+ createdTo?: number;
69
71
  uploaderId?: number;
70
72
  kinds?: unknown[];
71
73
  attributes?: string;
@@ -78,7 +80,7 @@ export declare class FilesApi {
78
80
  }): Promise<ListBucketAttachmentsResponseContract>;
79
81
  /**
80
82
  * Remove bucket attachment
81
- * Removes a file of the organization from the organization file listing, whatever its source (app, note or portal). Only the uploader or an organization manager or owner may remove it.
83
+ * Removes a file of the organization from the organization file listing, whatever its source (app, note or portal). Only the uploader or an organization manager or owner may remove it, so an organization client removes only the files it uploaded.
82
84
  */
83
85
  removeBucketAttachment(params: {
84
86
  path: {
@@ -100,7 +102,7 @@ export declare class FilesApi {
100
102
  }): Promise<StartMultipartFileUploadResponseContract>;
101
103
  /**
102
104
  * Update bucket attachment
103
- * Renames a bucket attachment or replaces its attributes and accessPrincipals. Works on any file of the organization; `accessPrincipals` only on app files. Only the uploader or an organization manager or owner may change `attributes` or `accessPrincipals`. Send `accessPrincipals: null` to drop every restriction and show the file to everyone who can see the organization bucket.
105
+ * Renames a bucket attachment or replaces its attributes and accessPrincipals. Works on any file of the organization; `accessPrincipals` only on app files. Only the uploader or an organization manager or owner may change `attributes` or `accessPrincipals`; an organization client may change only the files it uploaded, the name included. Send `accessPrincipals: null` to drop every restriction and show the file to everyone who can see the organization bucket.
104
106
  */
105
107
  updateBucketAttachment(params: {
106
108
  path: {
@@ -58,7 +58,7 @@ class FilesApi {
58
58
  }
59
59
  /**
60
60
  * Delete file
61
- * Deletes a file-service stored file by stored-file UUID. Gate never handles the file bytes.
61
+ * Deletes a file-service stored file by stored-file UUID. Gate never handles the file bytes. Not available to organization clients: they remove the files they uploaded with `removeBucketAttachment`.
62
62
  */
63
63
  async deleteFile(params) {
64
64
  return this.client.request({
@@ -73,7 +73,7 @@ class FilesApi {
73
73
  }
74
74
  /**
75
75
  * List bucket attachments
76
- * Lists the organization's files from every source in one list: files uploaded into an app (`app`), note attachments (`note`) and portal files (`portalPage`, `portalGlobal`, `portalFiles`, `portalBlock`). Each item carries its source `target`, its file `kind` (`image`, `video`, `audio`, `doc`, `archive` or `file`, detected from the mime type), the uploader `userId` (resolve the email and role with the org-users operations), the `size` in bytes, the custom `attributes` and the `accessPrincipals`. Filter by source with `targets`, keep only some apps or other sources with `targetIds` (matched against the item `targetId`; a bare app id needs `targets` set to `app`), drop small files with `sizeFrom`, keep only the files one user uploaded with `uploaderId`, keep only some file types with `kinds`, and match custom metadata with `attributes`, a JSON object of strings sent as a string, such as `{"source":"file-manager"}`, where every given pair must match exactly (`total` follows the same filter). Clients only receive files their access principals or the bucket permissions allow.
76
+ * Lists the organization's files from every source in one list: files uploaded into an app (`app`), note attachments (`note`) and portal files (`portalPage`, `portalGlobal`, `portalFiles`, `portalBlock`). Each item carries its source `target`, its file `kind` (`image`, `video`, `audio`, `doc`, `archive` or `file`, detected from the mime type), the uploader `userId` (resolve the email and role with the org-users operations), the `size` in bytes, the custom `attributes` and the `accessPrincipals`. Filter by source with `targets`, keep only some apps or other sources with `targetIds` (matched against the item `targetId`; a bare app id needs `targets` set to `app`), drop small files with `sizeFrom`, keep only the files added in a date range with `createdFrom` and `createdTo` (unix seconds like `createdAt`, both inclusive, either alone), keep only the files one user uploaded with `uploaderId`, keep only some file types with `kinds`, and match custom metadata with `attributes`, a JSON object of strings sent as a string, such as `{"source":"file-manager"}`, where every given pair must match exactly (`total` follows the same filter). Clients only receive files their access principals or the bucket permissions allow.
77
77
  */
78
78
  async listBucketAttachments(params) {
79
79
  return this.client.request({
@@ -88,7 +88,7 @@ class FilesApi {
88
88
  }
89
89
  /**
90
90
  * Remove bucket attachment
91
- * Removes a file of the organization from the organization file listing, whatever its source (app, note or portal). Only the uploader or an organization manager or owner may remove it.
91
+ * Removes a file of the organization from the organization file listing, whatever its source (app, note or portal). Only the uploader or an organization manager or owner may remove it, so an organization client removes only the files it uploaded.
92
92
  */
93
93
  async removeBucketAttachment(params) {
94
94
  return this.client.request({
@@ -117,7 +117,7 @@ class FilesApi {
117
117
  }
118
118
  /**
119
119
  * Update bucket attachment
120
- * Renames a bucket attachment or replaces its attributes and accessPrincipals. Works on any file of the organization; `accessPrincipals` only on app files. Only the uploader or an organization manager or owner may change `attributes` or `accessPrincipals`. Send `accessPrincipals: null` to drop every restriction and show the file to everyone who can see the organization bucket.
120
+ * Renames a bucket attachment or replaces its attributes and accessPrincipals. Works on any file of the organization; `accessPrincipals` only on app files. Only the uploader or an organization manager or owner may change `attributes` or `accessPrincipals`; an organization client may change only the files it uploaded, the name included. Send `accessPrincipals: null` to drop every restriction and show the file to everyone who can see the organization bucket.
121
121
  */
122
122
  async updateBucketAttachment(params) {
123
123
  return this.client.request({
@@ -5,7 +5,7 @@
5
5
  * Domain: notes
6
6
  */
7
7
  import type { Client } from "../runtime/transport";
8
- import type { AddWorkspaceMarkdownNoteAttachmentRequestContract, AddWorkspaceMarkdownNoteAttachmentResponseContract, AddWorkspaceNoteAttachmentRequestContract, AddWorkspaceNoteAttachmentResponseContract, AppendWorkspaceMarkdownNoteContentRequestContract, AppendWorkspaceNoteContentRequestContract, CreateWorkspaceMarkdownNoteRequestContract, CreateWorkspaceNoteFolderRequestContract, CreateWorkspaceNoteFolderResponseContract, CreateWorkspaceNoteRequestContract, CreateWorkspaceNoteResponseContract, orgIdInPathRequired, ShareWorkspaceMarkdownNoteRequestContract, ShareWorkspaceMarkdownNoteResponseContract, UnshareWorkspaceMarkdownNoteResponseContract, UpdateWorkspaceMarkdownNoteContentRequestContract, WorkspaceIdInPathRequired, WorkspaceMarkdownNoteResponseContract, WorkspaceNoteContentResponseContract, WorkspaceNoteFolderListResponseContract, WorkspaceNoteIdInPathRequired, WorkspaceNoteListResponseContract, WorkspaceNoteParentIdInQueryOptional } from "../types";
8
+ import type { AddWorkspaceMarkdownNoteAttachmentRequestContract, AddWorkspaceMarkdownNoteAttachmentResponseContract, AddWorkspaceNoteAttachmentRequestContract, AddWorkspaceNoteAttachmentResponseContract, AppendWorkspaceMarkdownNoteContentRequestContract, AppendWorkspaceNoteContentRequestContract, CreateWorkspaceMarkdownNoteRequestContract, CreateWorkspaceNoteFolderRequestContract, CreateWorkspaceNoteFolderResponseContract, CreateWorkspaceNoteRequestContract, CreateWorkspaceNoteResponseContract, orgIdInPathRequired, ShareWorkspaceMarkdownNoteRequestContract, ShareWorkspaceMarkdownNoteResponseContract, UnshareWorkspaceMarkdownNoteResponseContract, UpdateWorkspaceMarkdownNoteContentRequestContract, WorkspaceIdInPathRequired, WorkspaceMarkdownNoteResponseContract, WorkspaceNoteContentResponseContract, WorkspaceNoteFolderListResponseContract, WorkspaceNoteIdInPathRequired, WorkspaceNoteListResponseContract, WorkspaceNoteParentIdInQueryOptional, WorkspaceNoteSearchResponseContract } from "../types";
9
9
  export declare class NotesApi {
10
10
  private client;
11
11
  constructor(client: Client);
@@ -146,6 +146,22 @@ export declare class NotesApi {
146
146
  };
147
147
  headers?: Record<string, string>;
148
148
  }): Promise<WorkspaceNoteListResponseContract>;
149
+ /**
150
+ * Search workspace notes by text
151
+ * Full-text search over note titles and text in one workspace, covering both classic (v2) and markdown (v3) notes. Each hit carries `contentVersion` (`v2` or `markdown_v3`) so the caller knows whether to read it with getWorkspaceNote or getWorkspaceMarkdownNote, plus a `snippet` around the matched words. Pass `parentId` to search only inside that folder and its subfolders. Folders, trashed, encrypted and portal-shared notes are never returned; v3 hits are returned only when the caller also holds `notes.markdown.read`. Ranking is keyword full-text, not semantic. Prefer a real workspace id; when the path workspaceId is `default`, gate resolves it to the organization's default workspace.
152
+ */
153
+ searchWorkspaceNotes(params: {
154
+ path: {
155
+ orgId: orgIdInPathRequired;
156
+ workspaceId: WorkspaceIdInPathRequired;
157
+ };
158
+ query?: {
159
+ query?: string;
160
+ parentId?: WorkspaceNoteParentIdInQueryOptional;
161
+ limit?: number;
162
+ };
163
+ headers?: Record<string, string>;
164
+ }): Promise<WorkspaceNoteSearchResponseContract>;
149
165
  /**
150
166
  * Share markdown (v3) note
151
167
  * Publishes a v3 markdown note through the existing note-service share flow and returns the share links for the three read-only modes: `ui` (full share page), `rendered` (markdown only) and `raw` (the markdown source as `text/markdown`). note-service creates the security key and enforces the caller's own note access, password and access-control rules — gate mints nothing. Calling it again on an already shared note updates that same share instead of creating a second one. v2 notes are not accepted here; they keep their existing sharing flow.
@@ -173,6 +173,21 @@ class NotesApi {
173
173
  expectedContentType: "application/json",
174
174
  });
175
175
  }
176
+ /**
177
+ * Search workspace notes by text
178
+ * Full-text search over note titles and text in one workspace, covering both classic (v2) and markdown (v3) notes. Each hit carries `contentVersion` (`v2` or `markdown_v3`) so the caller knows whether to read it with getWorkspaceNote or getWorkspaceMarkdownNote, plus a `snippet` around the matched words. Pass `parentId` to search only inside that folder and its subfolders. Folders, trashed, encrypted and portal-shared notes are never returned; v3 hits are returned only when the caller also holds `notes.markdown.read`. Ranking is keyword full-text, not semantic. Prefer a real workspace id; when the path workspaceId is `default`, gate resolves it to the organization's default workspace.
179
+ */
180
+ async searchWorkspaceNotes(params) {
181
+ return this.client.request({
182
+ method: "GET",
183
+ path: "/:orgId/workspaces/:workspaceId/notes/search",
184
+ pathParams: params.path,
185
+ query: params.query,
186
+ headers: params.headers,
187
+ opId: "searchWorkspaceNotes",
188
+ expectedContentType: "application/json",
189
+ });
190
+ }
176
191
  /**
177
192
  * Share markdown (v3) note
178
193
  * Publishes a v3 markdown note through the existing note-service share flow and returns the share links for the three read-only modes: `ui` (full share page), `rendered` (markdown only) and `raw` (the markdown source as `text/markdown`). note-service creates the security key and enforces the caller's own note access, password and access-control rules — gate mints nothing. Calling it again on an already shared note updates that same share instead of creating a second one. v2 notes are not accepted here; they keep their existing sharing flow.
@@ -22,7 +22,7 @@ export declare class OrgUsersApi {
22
22
  }): Promise<OrgUserAddResponseContract>;
23
23
  /**
24
24
  * List organization users
25
- * Returns the list of users of the organization, including clients and members. `metadata.clients` and `metadata.members` are the user-added custom columns of those dashboards (system columns omitted; empty when a dashboard does not exist). Requires org.members.read and org access.
25
+ * Returns the list of users of the organization, including clients and members. `metadata.clients` and `metadata.members` are the user-added custom columns of those dashboards (system columns omitted; empty when a dashboard does not exist). Each user has `metadataValues`: cell values keyed by those column keys. Clients read the clients dashboard; other roles read the members dashboard. A missing cell is null. Requires org.members.read and org access.
26
26
  */
27
27
  listOrgUsers(params: {
28
28
  path: {
@@ -28,7 +28,7 @@ class OrgUsersApi {
28
28
  }
29
29
  /**
30
30
  * List organization users
31
- * Returns the list of users of the organization, including clients and members. `metadata.clients` and `metadata.members` are the user-added custom columns of those dashboards (system columns omitted; empty when a dashboard does not exist). Requires org.members.read and org access.
31
+ * Returns the list of users of the organization, including clients and members. `metadata.clients` and `metadata.members` are the user-added custom columns of those dashboards (system columns omitted; empty when a dashboard does not exist). Each user has `metadataValues`: cell values keyed by those column keys. Clients read the clients dashboard; other roles read the members dashboard. A missing cell is null. Requires org.members.read and org access.
32
32
  */
33
33
  async listOrgUsers(params) {
34
34
  return this.client.request({
@@ -698,7 +698,7 @@ export declare class PortalsApi {
698
698
  }): Promise<ListPortalPageBlocksResponseContract>;
699
699
  /**
700
700
  * List organization portals
701
- * Returns portals visible for the caller in the organization. `metadata.columns` are the user-added custom columns of the portals dashboard (system columns omitted; empty when that dashboard does not exist). Requires portals.read and org access.
701
+ * Returns portals visible for the caller in the organization. `metadata.columns` are the user-added custom columns of the portals dashboard (system columns omitted; empty when that dashboard does not exist). Each portal has `metadataValues`: cell values keyed by those column keys. A missing cell is null. Requires portals.read and org access.
702
702
  */
703
703
  listPortals(params: {
704
704
  path: {
@@ -814,7 +814,7 @@ class PortalsApi {
814
814
  }
815
815
  /**
816
816
  * List organization portals
817
- * Returns portals visible for the caller in the organization. `metadata.columns` are the user-added custom columns of the portals dashboard (system columns omitted; empty when that dashboard does not exist). Requires portals.read and org access.
817
+ * Returns portals visible for the caller in the organization. `metadata.columns` are the user-added custom columns of the portals dashboard (system columns omitted; empty when that dashboard does not exist). Each portal has `metadataValues`: cell values keyed by those column keys. A missing cell is null. Requires portals.read and org access.
818
818
  */
819
819
  async listPortals(params) {
820
820
  return this.client.request({
@@ -22,7 +22,7 @@ export declare class WorkspacesApi {
22
22
  }): Promise<OrgWorkspaceContract>;
23
23
  /**
24
24
  * List organization workspaces
25
- * Returns workspaces visible for the caller in the organization and marks the default workspace. `metadata.columns` are the user-added custom columns of the workspaces dashboard (system columns omitted; empty when that dashboard does not exist). Requires org.read and org access.
25
+ * Returns workspaces visible for the caller in the organization and marks the default workspace. `metadata.columns` are the user-added custom columns of the workspaces dashboard (system columns omitted; empty when that dashboard does not exist). Each workspace has `metadataValues`: cell values keyed by those column keys. A missing cell is null. Requires org.read and org access.
26
26
  */
27
27
  listWorkspaces(params: {
28
28
  path: {
@@ -28,7 +28,7 @@ class WorkspacesApi {
28
28
  }
29
29
  /**
30
30
  * List organization workspaces
31
- * Returns workspaces visible for the caller in the organization and marks the default workspace. `metadata.columns` are the user-added custom columns of the workspaces dashboard (system columns omitted; empty when that dashboard does not exist). Requires org.read and org access.
31
+ * Returns workspaces visible for the caller in the organization and marks the default workspace. `metadata.columns` are the user-added custom columns of the workspaces dashboard (system columns omitted; empty when that dashboard does not exist). Each workspace has `metadataValues`: cell values keyed by those column keys. A missing cell is null. Requires org.read and org access.
32
32
  */
33
33
  async listWorkspaces(params) {
34
34
  return this.client.request({
@@ -18,7 +18,7 @@ export * from "./mcp-manager/mcp-manager";
18
18
  export type { MeAuthContract, MeOrgGroupContract, MePreferencesContract, MeResponseContract, MeScopeContract, MeUserContract } from "./me/me";
19
19
  export * from "./note/note";
20
20
  export * from "./org-group/org-group";
21
- export type { ClientAccountScheduledDeletionRequestContract, ClientAccountScheduledDeletionResponseContract, CreateWorkspaceRequestContract, DashboardCustomColumnContract, DashboardCustomColumnMetadataContract, OrgInviteContract, OrgMagicLinkContract, OrgMemberExpectedJoinedAfterInQueryOptional, OrgMemberExpectedRoleInQueryOptional, OrgMemberRemoveResponseContract, OrgPortalContract, OrgPortalListResponseContract, OrgUserAddRequestContract, OrgUserAddResponseContract, OrgUserContract, OrgUserIdInPathRequired, OrgUserListResponseContract, OrgUserWorkspaceIdInPathRequired, OrgWorkspaceContract, OrgWorkspaceInviteContract, OrgWorkspaceListResponseContract, OrgWorkspaceMemberContract, OrgWorkspaceMemberListResponseContract, WorkspaceMemberRemoveResponseContract } from "./org-user/org-user";
21
+ export type { ClientAccountScheduledDeletionRequestContract, ClientAccountScheduledDeletionResponseContract, CreateWorkspaceRequestContract, DashboardCustomColumnContract, DashboardCustomColumnMetadataContract, DashboardMetadataValuesContract, OrgInviteContract, OrgMagicLinkContract, OrgMemberExpectedJoinedAfterInQueryOptional, OrgMemberExpectedRoleInQueryOptional, OrgMemberRemoveResponseContract, OrgPortalContract, OrgPortalListItemContract, OrgPortalListResponseContract, OrgUserAddRequestContract, OrgUserAddResponseContract, OrgUserContract, OrgUserIdInPathRequired, OrgUserListItemContract, OrgUserListResponseContract, OrgUserWorkspaceIdInPathRequired, OrgWorkspaceContract, OrgWorkspaceInviteContract, OrgWorkspaceListItemContract, OrgWorkspaceListResponseContract, OrgWorkspaceMemberContract, OrgWorkspaceMemberListResponseContract, WorkspaceMemberRemoveResponseContract } from "./org-user/org-user";
22
22
  export * from "./orgs/orgs";
23
23
  export type { CreatePaperclipAgentTaskRequestContract, PaperclipAgentRunContract, PaperclipAgentTaskAcceptedContract, PaperclipAgentTaskContract, PaperclipAgentTaskIdInPathRequired, PaperclipAgentTaskStatusContract, PaperclipCallableAgentContract, PaperclipCallableAgentListContract } from "./paperclip-agents/paperclip-agents";
24
24
  export * from "./paperclip-services/paperclip-services";
@@ -25,6 +25,24 @@ export interface WorkspaceNoteListQueryContract {
25
25
  */
26
26
  parentId?: WorkspaceNoteParentIdInQueryOptional;
27
27
  }
28
+ export interface WorkspaceNoteSearchHitContract {
29
+ globalId: string;
30
+ title?: string | null;
31
+ parentId?: string | null;
32
+ workspaceId: string;
33
+ /**
34
+ * `markdown_v3` for v3 markdown notes (read them with getWorkspaceMarkdownNote),
35
+ * `v2` for classic notes (read them with getWorkspaceNote).
36
+ */
37
+ contentVersion: "v2" | "markdown_v3";
38
+ /**
39
+ * Text around the matched words, when the search index returned one.
40
+ */
41
+ snippet?: string | null;
42
+ }
43
+ export interface WorkspaceNoteSearchResponseContract {
44
+ notes: WorkspaceNoteSearchHitContract[];
45
+ }
28
46
  export interface CreateWorkspaceNoteFolderRequestContract {
29
47
  title: string;
30
48
  /**
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Cell values of the user-added columns for this entity.
3
+ * Keys are column `key`s from the matching `metadata.columns` list.
4
+ * A missing cell is `null`. An entity with no custom columns has `{}`.
5
+ */
6
+ export type DashboardMetadataValuesContract = Record<string, unknown>;
1
7
  export interface OrgUserContract {
2
8
  id: number;
3
9
  firstname?: string | null;
@@ -6,6 +12,13 @@ export interface OrgUserContract {
6
12
  username?: string | null;
7
13
  role: string;
8
14
  }
15
+ export interface OrgUserListItemContract extends OrgUserContract {
16
+ /**
17
+ * Custom-column values for this user. Clients use the clients dashboard;
18
+ * every other role uses the members dashboard.
19
+ */
20
+ metadataValues: DashboardMetadataValuesContract;
21
+ }
9
22
  export type OrgUserIdInPathRequired = number;
10
23
  export type OrgUserWorkspaceIdInPathRequired = string;
11
24
  export interface DashboardCustomColumnContract {
@@ -24,7 +37,7 @@ export interface DashboardCustomColumnMetadataContract {
24
37
  columns: DashboardCustomColumnContract[];
25
38
  }
26
39
  export interface OrgUserListResponseContract {
27
- users: OrgUserContract[];
40
+ users: OrgUserListItemContract[];
28
41
  /**
29
42
  * Custom columns from the clients and members dashboards.
30
43
  * Both dashboards describe users. System columns are omitted.
@@ -98,8 +111,12 @@ export interface OrgWorkspaceContract {
98
111
  color?: string | null;
99
112
  role?: string | null;
100
113
  }
114
+ export interface OrgWorkspaceListItemContract extends OrgWorkspaceContract {
115
+ /** Custom-column values from the workspaces dashboard. */
116
+ metadataValues: DashboardMetadataValuesContract;
117
+ }
101
118
  export interface OrgWorkspaceListResponseContract {
102
- workspaces: OrgWorkspaceContract[];
119
+ workspaces: OrgWorkspaceListItemContract[];
103
120
  /** Custom columns of the workspaces dashboard. Empty when it does not exist. */
104
121
  metadata: DashboardCustomColumnMetadataContract;
105
122
  }
@@ -118,8 +135,12 @@ export interface OrgPortalContract {
118
135
  lastPublishedAt?: number;
119
136
  version: number;
120
137
  }
138
+ export interface OrgPortalListItemContract extends OrgPortalContract {
139
+ /** Custom-column values from the portals dashboard. */
140
+ metadataValues: DashboardMetadataValuesContract;
141
+ }
121
142
  export interface OrgPortalListResponseContract {
122
- portals: OrgPortalContract[];
143
+ portals: OrgPortalListItemContract[];
123
144
  /** Custom columns of the portals dashboard. Empty when it does not exist. */
124
145
  metadata: DashboardCustomColumnMetadataContract;
125
146
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusebase/fusebase-gate-sdk",
3
- "version": "2.13.0",
3
+ "version": "2.13.1",
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,88 @@
1
+ # Release Notes 2.13.1-sdk.0
2
+
3
+ - Current ref: `HEAD`
4
+ - Previous tag: `v2.13.0`
5
+ - Generated at: 2026-09-29T14:28:28.394Z
6
+
7
+ ## Included Drafts
8
+
9
+ - `docs/release-notes/2026-09-25-dashboard-custom-columns.md` - Custom columns on client, member, workspace, and portal lists (NIM-44852)
10
+ - `docs/release-notes/2026-09-29-dashboard-metadata-values.md` - Custom column values on client, member, workspace, and portal lists (NIM-44852)
11
+
12
+ ## Summary
13
+
14
+ ### Custom columns on client, member, workspace, and portal lists (NIM-44852)
15
+
16
+ `listOrgUsers`, `listWorkspaces`, and `listPortals` now include user-added
17
+ custom columns from the matching existing dashboards. System and template
18
+ columns are omitted. A missing dashboard yields an empty column list and does
19
+ not fail the list.
20
+
21
+ Clients and members are both users, so `listOrgUsers` carries both dashboards:
22
+ `metadata.clients` and `metadata.members`. Workspaces and portals carry
23
+ `metadata.columns` from aliases `workspaces` and `portals`.
24
+
25
+ ### Custom column values on client, member, workspace, and portal lists (NIM-44852)
26
+
27
+ `listOrgUsers`, `listWorkspaces`, and `listPortals` now include the cell
28
+ values of user-added dashboard columns. Column descriptions stay in
29
+ `metadata`. Values sit on each entity as `metadataValues`, keyed by column
30
+ `key`. A missing cell is `null`.
31
+
32
+ Clients read the clients dashboard. Every other role on `listOrgUsers` reads
33
+ the members dashboard.
34
+
35
+
36
+ ## API / SDK Changes
37
+
38
+ ### Custom columns on client, member, workspace, and portal lists (NIM-44852)
39
+
40
+ - `OrgUserListResponse.metadata.clients.columns` and `.members.columns`.
41
+ - `OrgWorkspaceListResponse.metadata.columns`.
42
+ - `OrgPortalListResponse.metadata.columns`.
43
+ - Column shape: `{ key, alias, name, customType, hidden, readonly, required }`.
44
+ - No new operation. Existing list fields are unchanged.
45
+
46
+ ### Custom column values on client, member, workspace, and portal lists (NIM-44852)
47
+
48
+ - `OrgUserListItem.metadataValues`, `OrgWorkspaceListItem.metadataValues`,
49
+ `OrgPortalListItem.metadataValues`.
50
+ - Create-workspace and nested org-member payloads are unchanged.
51
+ - No new operation.
52
+
53
+
54
+ ## Consumer Impact
55
+
56
+ ### Custom columns on client, member, workspace, and portal lists (NIM-44852)
57
+
58
+ Callers that ignore unknown fields are unaffected. Callers that need extra
59
+ dashboard fields read `metadata` on the list they already call.
60
+
61
+ ### Custom column values on client, member, workspace, and portal lists (NIM-44852)
62
+
63
+ Callers that ignore unknown fields are unaffected. Callers that compare list
64
+ items field-for-field now see `metadataValues`.
65
+
66
+
67
+ ## Verification
68
+
69
+ ### Custom columns on client, member, workspace, and portal lists (NIM-44852)
70
+
71
+ - Unit tests cover custom-only filtering and a missing dashboard.
72
+
73
+ ### Custom column values on client, member, workspace, and portal lists (NIM-44852)
74
+
75
+ - Unit test maps a wrapped dashboard cell onto `metadataValues` and fills a
76
+ missing cell with `null`.
77
+ - Live dev check of a filled client cell is still pending a deploy.
78
+
79
+
80
+ ## Follow-ups
81
+
82
+ ### Custom columns on client, member, workspace, and portal lists (NIM-44852)
83
+
84
+ - Cell values shipped later as `metadataValues` on each listed entity.
85
+
86
+ ### Custom column values on client, member, workspace, and portal lists (NIM-44852)
87
+
88
+ - None.
@@ -0,0 +1,90 @@
1
+ # Release Notes 2.13.1
2
+
3
+ - Current ref: `HEAD`
4
+ - Previous tag: `v2.13.1-sdk.0`
5
+ - Generated at: 2026-09-29T21:24:25.497Z
6
+
7
+ ## Included Drafts
8
+
9
+ - `docs/release-notes/2026-09-29-client-files-write.md` - Portal clients can upload files
10
+ - `docs/release-notes/2026-09-29-notes-search.md` - Search notes by their text
11
+
12
+ ## Summary
13
+
14
+ ### Portal clients can upload files
15
+
16
+ A portal client could not upload through a FuseBase app: the first upload call answered 403
17
+ "Missing required permission: files.write". The client role now holds `files.write`. A client
18
+ may upload and create bucket attachments, and may rename, change or remove only the files it
19
+ uploaded. `deleteFile` is not available to clients.
20
+
21
+ ### Search notes by their text
22
+
23
+ MCP clients and AI agents could read and edit notes but had no way to find one by its content.
24
+ `searchWorkspaceNotes` searches note titles and text in one workspace, for classic (v2) and
25
+ markdown (v3) notes, using the full-text search note-service already has.
26
+
27
+
28
+ ## API / SDK Changes
29
+
30
+ ### Portal clients can upload files
31
+
32
+ - Client role permissions: `files.write` added. Visitor stays read-only.
33
+ - `deleteFile` answers 403 when the caller's organization role is client. A stored-file UUID has
34
+ no organization and no uploader to check a client against.
35
+ - `updateBucketAttachment` and `removeBucketAttachment`: no change in Gate. bucket-service
36
+ decides whether the client uploaded the file and its 403 reaches the caller as 403.
37
+ - Op descriptions, MCP `files` prompt (1.15.0), SDK and the Gate files skill reference updated.
38
+
39
+ ### Search notes by their text
40
+
41
+ - New op `searchWorkspaceNotes`, `GET /:orgId/workspaces/:workspaceId/notes/search` (`notes.read`).
42
+ Query: `query` (required), `parentId` (search that folder and its subfolders), `limit`
43
+ (1 to 100, default 20; other values answer 400). `workspaceId` accepts `default`.
44
+ - Each hit: `globalId`, `title`, `parentId`, `workspaceId`, `contentVersion` (`v2` or
45
+ `markdown_v3`) and `snippet` around the matched words.
46
+ - Never returned: folders, trashed notes (also notes inside a trashed folder), portal-shared and
47
+ encrypted notes, notes the user cannot read. `markdown_v3` hits need `notes.markdown.read` too.
48
+ - Ranking is keyword full-text, not semantic. No new index.
49
+ - MCP `notes` prompt, SDK `NotesApi`, manifest, OpenAPI and the Gate notes skill reference
50
+ cover the new op.
51
+
52
+
53
+ ## Consumer Impact
54
+
55
+ ### Portal clients can upload files
56
+
57
+ - Same permission name, so deployed apps need no redeploy; an app that lists `files.write` gets
58
+ it for its client users too.
59
+ - Nothing is tightened for owner, manager, member, guest or app service tokens. Clients never
60
+ held `files.write`, so the `deleteFile` refusal takes nothing away from a working app.
61
+ - Client uploads work end to end only with the bucket-service release that lets a client create
62
+ app files (NIM-45207). Before it, a client passes Gate and gets bucket-service's 403, as today.
63
+
64
+ ### Search notes by their text
65
+
66
+ - New op; nothing changes for existing callers.
67
+
68
+
69
+ ## Verification
70
+
71
+ ### Portal clients can upload files
72
+
73
+ - Unit: `tests/unit/permissions.test.ts` (client has `files.write`, visitor does not),
74
+ `tests/unit/files-controller.test.ts` (client refused on `deleteFile`, member allowed).
75
+
76
+ ### Search notes by their text
77
+
78
+ - Unit: `tests/unit/notes-controller.test.ts` (trash and portal filtering, `root` search scope,
79
+ v3 permission rule, limit applied after filtering, invalid limit). Full unit suite green.
80
+
81
+
82
+ ## Follow-ups
83
+
84
+ ### Portal clients can upload files
85
+
86
+ - NIM-45213: `deleteFile` has no organization or owner check for any caller.
87
+
88
+ ### Search notes by their text
89
+
90
+ - Semantic or hybrid ranking, if agents need it, is a separate task.
@@ -1,9 +1,90 @@
1
- # Release Notes 2.13.0
1
+ # Release Notes 2.13.1
2
2
 
3
3
  - Current ref: `HEAD`
4
- - Previous tag: `v2.13.0`
5
- - Generated at: 2026-09-29T10:32:05.503Z
4
+ - Previous tag: `v2.13.1-sdk.0`
5
+ - Generated at: 2026-09-29T21:24:25.497Z
6
6
 
7
7
  ## Included Drafts
8
8
 
9
- - None
9
+ - `docs/release-notes/2026-09-29-client-files-write.md` - Portal clients can upload files
10
+ - `docs/release-notes/2026-09-29-notes-search.md` - Search notes by their text
11
+
12
+ ## Summary
13
+
14
+ ### Portal clients can upload files
15
+
16
+ A portal client could not upload through a FuseBase app: the first upload call answered 403
17
+ "Missing required permission: files.write". The client role now holds `files.write`. A client
18
+ may upload and create bucket attachments, and may rename, change or remove only the files it
19
+ uploaded. `deleteFile` is not available to clients.
20
+
21
+ ### Search notes by their text
22
+
23
+ MCP clients and AI agents could read and edit notes but had no way to find one by its content.
24
+ `searchWorkspaceNotes` searches note titles and text in one workspace, for classic (v2) and
25
+ markdown (v3) notes, using the full-text search note-service already has.
26
+
27
+
28
+ ## API / SDK Changes
29
+
30
+ ### Portal clients can upload files
31
+
32
+ - Client role permissions: `files.write` added. Visitor stays read-only.
33
+ - `deleteFile` answers 403 when the caller's organization role is client. A stored-file UUID has
34
+ no organization and no uploader to check a client against.
35
+ - `updateBucketAttachment` and `removeBucketAttachment`: no change in Gate. bucket-service
36
+ decides whether the client uploaded the file and its 403 reaches the caller as 403.
37
+ - Op descriptions, MCP `files` prompt (1.15.0), SDK and the Gate files skill reference updated.
38
+
39
+ ### Search notes by their text
40
+
41
+ - New op `searchWorkspaceNotes`, `GET /:orgId/workspaces/:workspaceId/notes/search` (`notes.read`).
42
+ Query: `query` (required), `parentId` (search that folder and its subfolders), `limit`
43
+ (1 to 100, default 20; other values answer 400). `workspaceId` accepts `default`.
44
+ - Each hit: `globalId`, `title`, `parentId`, `workspaceId`, `contentVersion` (`v2` or
45
+ `markdown_v3`) and `snippet` around the matched words.
46
+ - Never returned: folders, trashed notes (also notes inside a trashed folder), portal-shared and
47
+ encrypted notes, notes the user cannot read. `markdown_v3` hits need `notes.markdown.read` too.
48
+ - Ranking is keyword full-text, not semantic. No new index.
49
+ - MCP `notes` prompt, SDK `NotesApi`, manifest, OpenAPI and the Gate notes skill reference
50
+ cover the new op.
51
+
52
+
53
+ ## Consumer Impact
54
+
55
+ ### Portal clients can upload files
56
+
57
+ - Same permission name, so deployed apps need no redeploy; an app that lists `files.write` gets
58
+ it for its client users too.
59
+ - Nothing is tightened for owner, manager, member, guest or app service tokens. Clients never
60
+ held `files.write`, so the `deleteFile` refusal takes nothing away from a working app.
61
+ - Client uploads work end to end only with the bucket-service release that lets a client create
62
+ app files (NIM-45207). Before it, a client passes Gate and gets bucket-service's 403, as today.
63
+
64
+ ### Search notes by their text
65
+
66
+ - New op; nothing changes for existing callers.
67
+
68
+
69
+ ## Verification
70
+
71
+ ### Portal clients can upload files
72
+
73
+ - Unit: `tests/unit/permissions.test.ts` (client has `files.write`, visitor does not),
74
+ `tests/unit/files-controller.test.ts` (client refused on `deleteFile`, member allowed).
75
+
76
+ ### Search notes by their text
77
+
78
+ - Unit: `tests/unit/notes-controller.test.ts` (trash and portal filtering, `root` search scope,
79
+ v3 permission rule, limit applied after filtering, invalid limit). Full unit suite green.
80
+
81
+
82
+ ## Follow-ups
83
+
84
+ ### Portal clients can upload files
85
+
86
+ - NIM-45213: `deleteFile` has no organization or owner check for any caller.
87
+
88
+ ### Search notes by their text
89
+
90
+ - Semantic or hybrid ranking, if agents need it, is a separate task.
@@ -1,9 +0,0 @@
1
- # Release Notes 2.12.3-sdk.0
2
-
3
- - Current ref: `HEAD`
4
- - Previous tag: `v2.12.0`
5
- - Generated at: 2026-09-29T09:18:04.507Z
6
-
7
- ## Included Drafts
8
-
9
- - None
@@ -1,9 +0,0 @@
1
- # Release Notes 2.13.0
2
-
3
- - Current ref: `HEAD`
4
- - Previous tag: `v2.13.0`
5
- - Generated at: 2026-09-29T10:32:05.503Z
6
-
7
- ## Included Drafts
8
-
9
- - None