@fusebase/fusebase-gate-sdk 2.11.9 → 2.12.3-sdk.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/apis/AppApisApi.d.ts +1 -1
- package/dist/apis/AppApisApi.js +1 -1
- package/dist/apis/FilesApi.d.ts +16 -2
- package/dist/apis/FilesApi.js +16 -2
- package/dist/apis/OrgUsersApi.d.ts +1 -1
- package/dist/apis/OrgUsersApi.js +1 -1
- package/dist/apis/OrgsApi.d.ts +11 -1
- package/dist/apis/OrgsApi.js +14 -0
- package/dist/apis/PortalsApi.d.ts +1 -1
- package/dist/apis/PortalsApi.js +1 -1
- package/dist/apis/RoutesApi.d.ts +33 -0
- package/dist/apis/RoutesApi.js +44 -0
- package/dist/apis/WorkspacesApi.d.ts +1 -1
- package/dist/apis/WorkspacesApi.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/types/file/file.d.ts +8 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.js +2 -0
- package/dist/types/org-user/org-user.d.ts +27 -0
- package/dist/types/paperclip-services/paperclip-services.d.ts +197 -0
- package/dist/types/paperclip-services/paperclip-services.js +41 -0
- package/dist/types/routes/routes.d.ts +49 -0
- package/dist/types/routes/routes.js +11 -0
- package/dist/types/shared/enums.d.ts +2 -1
- package/dist/types/shared/enums.js +2 -1
- package/package.json +1 -1
- package/release-notes/2.12.3-sdk.0.md +9 -0
- package/release-notes/latest.md +3 -3
- package/release-notes/2.11.8-sdk.0.md +0 -252
- package/release-notes/2.11.9.md +0 -9
|
@@ -11,7 +11,7 @@ export declare class AppApisApi {
|
|
|
11
11
|
constructor(client: Client);
|
|
12
12
|
/**
|
|
13
13
|
* Call app API operation
|
|
14
|
-
* Invokes a published app API operation through the owner app runtime using a runtime app token minted for the current authenticated caller context. Pass `onBehalfOfUserToken` (a platform app token, i.e. the user's `fbsfeaturetoken`) to run the call on behalf of an end user: Gate verifies it fail-closed and forwards the resolved user to the runtime as `X-Fusebase-Verified-User-Id` / `X-Fusebase-Verified-User-Source: obo`, so apps no longer need to hand-roll dual-token forwarding. The operation's `allowedCallers` / `requiredPermissions` are still evaluated against the calling identity, not the on-behalf-of user. Pass `headers` to forward extra request headers to the runtime, for operations that require one such as `Idempotency-Key`; headers Gate sets itself (auth and `X-Fusebase-*` identity headers) are reserved and rejected with 400.
|
|
14
|
+
* Invokes a published app API operation through the owner app runtime using a runtime app token minted for the current authenticated caller context. Pass `onBehalfOfUserToken` (a platform app token, i.e. the user's `fbsfeaturetoken`) to run the call on behalf of an end user: Gate verifies it fail-closed and forwards the resolved user to the runtime as `X-Fusebase-Verified-User-Id` / `X-Fusebase-Verified-User-Source: obo`, so apps no longer need to hand-roll dual-token forwarding. The operation's `allowedCallers` / `requiredPermissions` are still evaluated against the calling identity, not the on-behalf-of user. Pass `headers` to forward extra request headers to the runtime, for operations that require one such as `Idempotency-Key`; headers Gate sets itself (auth and `X-Fusebase-*` identity headers) are reserved and rejected with 400. `orgId` is the calling organization: a managed app published by another org resolves and runs under its owner org, while the token and the runtime stay scoped to the calling org, which also arrives as `X-Fusebase-Verified-Org-Id`.
|
|
15
15
|
*/
|
|
16
16
|
callAppApi(params: {
|
|
17
17
|
path: {
|
package/dist/apis/AppApisApi.js
CHANGED
|
@@ -13,7 +13,7 @@ class AppApisApi {
|
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* Call app API operation
|
|
16
|
-
* Invokes a published app API operation through the owner app runtime using a runtime app token minted for the current authenticated caller context. Pass `onBehalfOfUserToken` (a platform app token, i.e. the user's `fbsfeaturetoken`) to run the call on behalf of an end user: Gate verifies it fail-closed and forwards the resolved user to the runtime as `X-Fusebase-Verified-User-Id` / `X-Fusebase-Verified-User-Source: obo`, so apps no longer need to hand-roll dual-token forwarding. The operation's `allowedCallers` / `requiredPermissions` are still evaluated against the calling identity, not the on-behalf-of user. Pass `headers` to forward extra request headers to the runtime, for operations that require one such as `Idempotency-Key`; headers Gate sets itself (auth and `X-Fusebase-*` identity headers) are reserved and rejected with 400.
|
|
16
|
+
* Invokes a published app API operation through the owner app runtime using a runtime app token minted for the current authenticated caller context. Pass `onBehalfOfUserToken` (a platform app token, i.e. the user's `fbsfeaturetoken`) to run the call on behalf of an end user: Gate verifies it fail-closed and forwards the resolved user to the runtime as `X-Fusebase-Verified-User-Id` / `X-Fusebase-Verified-User-Source: obo`, so apps no longer need to hand-roll dual-token forwarding. The operation's `allowedCallers` / `requiredPermissions` are still evaluated against the calling identity, not the on-behalf-of user. Pass `headers` to forward extra request headers to the runtime, for operations that require one such as `Idempotency-Key`; headers Gate sets itself (auth and `X-Fusebase-*` identity headers) are reserved and rejected with 400. `orgId` is the calling organization: a managed app published by another org resolves and runs under its owner org, while the token and the runtime stay scoped to the calling org, which also arrives as `X-Fusebase-Verified-Org-Id`.
|
|
17
17
|
*/
|
|
18
18
|
async callAppApi(params) {
|
|
19
19
|
return this.client.request({
|
package/dist/apis/FilesApi.d.ts
CHANGED
|
@@ -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`, 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`, drop small files with `sizeFrom`, 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 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: {
|
|
@@ -64,7 +64,10 @@ export declare class FilesApi {
|
|
|
64
64
|
};
|
|
65
65
|
query?: {
|
|
66
66
|
targets?: unknown[];
|
|
67
|
+
targetIds?: unknown[];
|
|
67
68
|
sizeFrom?: number;
|
|
69
|
+
uploaderId?: number;
|
|
70
|
+
kinds?: unknown[];
|
|
68
71
|
attributes?: string;
|
|
69
72
|
limit?: number;
|
|
70
73
|
offset?: number;
|
|
@@ -73,6 +76,17 @@ export declare class FilesApi {
|
|
|
73
76
|
};
|
|
74
77
|
headers?: Record<string, string>;
|
|
75
78
|
}): Promise<ListBucketAttachmentsResponseContract>;
|
|
79
|
+
/**
|
|
80
|
+
* 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.
|
|
82
|
+
*/
|
|
83
|
+
removeBucketAttachment(params: {
|
|
84
|
+
path: {
|
|
85
|
+
orgId: orgIdInPathRequired;
|
|
86
|
+
globalId: BucketAttachmentGlobalIdInPathRequired;
|
|
87
|
+
};
|
|
88
|
+
headers?: Record<string, string>;
|
|
89
|
+
}): Promise<BucketAttachmentContract>;
|
|
76
90
|
/**
|
|
77
91
|
* Start multipart file upload
|
|
78
92
|
* Starts a file-service multipart upload and returns direct PUT URLs. Clients upload each part to the returned URLs, keep each response ETag, and pass those ETags to completeMultipartFileUpload.
|
|
@@ -86,7 +100,7 @@ export declare class FilesApi {
|
|
|
86
100
|
}): Promise<StartMultipartFileUploadResponseContract>;
|
|
87
101
|
/**
|
|
88
102
|
* Update bucket attachment
|
|
89
|
-
* Renames a bucket attachment or replaces its attributes and accessPrincipals. Send `accessPrincipals: null` to drop every restriction and show the file to everyone who can see the organization bucket.
|
|
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.
|
|
90
104
|
*/
|
|
91
105
|
updateBucketAttachment(params: {
|
|
92
106
|
path: {
|
package/dist/apis/FilesApi.js
CHANGED
|
@@ -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`, 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`, drop small files with `sizeFrom`, 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 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({
|
|
@@ -86,6 +86,20 @@ class FilesApi {
|
|
|
86
86
|
expectedContentType: "application/json",
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
|
+
/**
|
|
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.
|
|
92
|
+
*/
|
|
93
|
+
async removeBucketAttachment(params) {
|
|
94
|
+
return this.client.request({
|
|
95
|
+
method: "DELETE",
|
|
96
|
+
path: "/:orgId/bucket-attachments/:globalId",
|
|
97
|
+
pathParams: params.path,
|
|
98
|
+
headers: params.headers,
|
|
99
|
+
opId: "removeBucketAttachment",
|
|
100
|
+
expectedContentType: "application/json",
|
|
101
|
+
});
|
|
102
|
+
}
|
|
89
103
|
/**
|
|
90
104
|
* Start multipart file upload
|
|
91
105
|
* Starts a file-service multipart upload and returns direct PUT URLs. Clients upload each part to the returned URLs, keep each response ETag, and pass those ETags to completeMultipartFileUpload.
|
|
@@ -103,7 +117,7 @@ class FilesApi {
|
|
|
103
117
|
}
|
|
104
118
|
/**
|
|
105
119
|
* Update bucket attachment
|
|
106
|
-
* Renames a bucket attachment or replaces its attributes and 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`. Send `accessPrincipals: null` to drop every restriction and show the file to everyone who can see the organization bucket.
|
|
107
121
|
*/
|
|
108
122
|
async updateBucketAttachment(params) {
|
|
109
123
|
return this.client.request({
|
|
@@ -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
|
|
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.
|
|
26
26
|
*/
|
|
27
27
|
listOrgUsers(params: {
|
|
28
28
|
path: {
|
package/dist/apis/OrgUsersApi.js
CHANGED
|
@@ -28,7 +28,7 @@ class OrgUsersApi {
|
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* List organization users
|
|
31
|
-
* Returns the list of 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.
|
|
32
32
|
*/
|
|
33
33
|
async listOrgUsers(params) {
|
|
34
34
|
return this.client.request({
|
package/dist/apis/OrgsApi.d.ts
CHANGED
|
@@ -5,10 +5,20 @@
|
|
|
5
5
|
* Domain: orgs
|
|
6
6
|
*/
|
|
7
7
|
import type { Client } from "../runtime/transport";
|
|
8
|
-
import type { orgIdInPathRequired, OrgUrlResponseContract } from "../types";
|
|
8
|
+
import type { orgIdInPathRequired, OrgServiceInstancesContract, OrgUrlResponseContract } from "../types";
|
|
9
9
|
export declare class OrgsApi {
|
|
10
10
|
private client;
|
|
11
11
|
constructor(client: Client);
|
|
12
|
+
/**
|
|
13
|
+
* Discover installed org services
|
|
14
|
+
* Reports, for FuseBase Work, N8N and Firecrawl, whether the service is set up for the organization (`installed`), whether the organization may set it up (`available`), and its `url` once it can be reached. When `installed` is false and `available` is true, the user can be sent to the setup flow; when `available` is false, do not offer setup — the organization is not entitled to the service. An installed service without a `url` is still coming up.
|
|
15
|
+
*/
|
|
16
|
+
getOrgServiceInstances(params: {
|
|
17
|
+
path: {
|
|
18
|
+
orgId: orgIdInPathRequired;
|
|
19
|
+
};
|
|
20
|
+
headers?: Record<string, string>;
|
|
21
|
+
}): Promise<OrgServiceInstancesContract>;
|
|
12
22
|
/**
|
|
13
23
|
* Get organization URL
|
|
14
24
|
* Returns the canonical HTTPS base URL for the organization. When a custom CNAME domain is configured, the response uses that hostname; otherwise it uses the org subdomain on the environment Fusebase host (for example `https://{sub}.dev-thefusebase.com`). Requires org.read and org access.
|
package/dist/apis/OrgsApi.js
CHANGED
|
@@ -11,6 +11,20 @@ class OrgsApi {
|
|
|
11
11
|
constructor(client) {
|
|
12
12
|
this.client = client;
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Discover installed org services
|
|
16
|
+
* Reports, for FuseBase Work, N8N and Firecrawl, whether the service is set up for the organization (`installed`), whether the organization may set it up (`available`), and its `url` once it can be reached. When `installed` is false and `available` is true, the user can be sent to the setup flow; when `available` is false, do not offer setup — the organization is not entitled to the service. An installed service without a `url` is still coming up.
|
|
17
|
+
*/
|
|
18
|
+
async getOrgServiceInstances(params) {
|
|
19
|
+
return this.client.request({
|
|
20
|
+
method: "GET",
|
|
21
|
+
path: "/:orgId/paperclip-services/instances",
|
|
22
|
+
pathParams: params.path,
|
|
23
|
+
headers: params.headers,
|
|
24
|
+
opId: "getOrgServiceInstances",
|
|
25
|
+
expectedContentType: "application/json",
|
|
26
|
+
});
|
|
27
|
+
}
|
|
14
28
|
/**
|
|
15
29
|
* Get organization URL
|
|
16
30
|
* Returns the canonical HTTPS base URL for the organization. When a custom CNAME domain is configured, the response uses that hostname; otherwise it uses the org subdomain on the environment Fusebase host (for example `https://{sub}.dev-thefusebase.com`). Requires org.read and org access.
|
|
@@ -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. 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). Requires portals.read and org access.
|
|
702
702
|
*/
|
|
703
703
|
listPortals(params: {
|
|
704
704
|
path: {
|
package/dist/apis/PortalsApi.js
CHANGED
|
@@ -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. 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). Requires portals.read and org access.
|
|
818
818
|
*/
|
|
819
819
|
async listPortals(params) {
|
|
820
820
|
return this.client.request({
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Routes API
|
|
3
|
+
*
|
|
4
|
+
* Generated from contract introspection
|
|
5
|
+
* Domain: routes
|
|
6
|
+
*/
|
|
7
|
+
import type { Client } from "../runtime/transport";
|
|
8
|
+
import type { orgIdInPathRequired, ResolveRouteRequestContract, ResolveRouteResponseContract, RouteListResponseContract } from "../types";
|
|
9
|
+
export declare class RoutesApi {
|
|
10
|
+
private client;
|
|
11
|
+
constructor(client: Client);
|
|
12
|
+
/**
|
|
13
|
+
* List product navigation routes
|
|
14
|
+
* Returns the allowlist of product locations Gate can link to, including required extra permissions and param names. Requires route.read and org access. Call this before resolveRoute. Do not invent a location id.
|
|
15
|
+
*/
|
|
16
|
+
listRoutes(params: {
|
|
17
|
+
path: {
|
|
18
|
+
orgId: orgIdInPathRequired;
|
|
19
|
+
};
|
|
20
|
+
headers?: Record<string, string>;
|
|
21
|
+
}): Promise<RouteListResponseContract>;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve a product navigation route
|
|
24
|
+
* Turns a registered location plus ids into a canonical HTTPS link. Requires route.read, org access, and the location's extra permissions (for example sites.read for a Studio location). Does not search by name: pass ids you already have, or look them up with listWorkspaces, listWebStudioSites, or listOrgUsers first. status unsupported means the screen has no deep link; follow fallback when present.
|
|
25
|
+
*/
|
|
26
|
+
resolveRoute(params: {
|
|
27
|
+
path: {
|
|
28
|
+
orgId: orgIdInPathRequired;
|
|
29
|
+
};
|
|
30
|
+
headers?: Record<string, string>;
|
|
31
|
+
body: ResolveRouteRequestContract;
|
|
32
|
+
}): Promise<ResolveRouteResponseContract>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Routes API
|
|
4
|
+
*
|
|
5
|
+
* Generated from contract introspection
|
|
6
|
+
* Domain: routes
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RoutesApi = void 0;
|
|
10
|
+
class RoutesApi {
|
|
11
|
+
constructor(client) {
|
|
12
|
+
this.client = client;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* List product navigation routes
|
|
16
|
+
* Returns the allowlist of product locations Gate can link to, including required extra permissions and param names. Requires route.read and org access. Call this before resolveRoute. Do not invent a location id.
|
|
17
|
+
*/
|
|
18
|
+
async listRoutes(params) {
|
|
19
|
+
return this.client.request({
|
|
20
|
+
method: "GET",
|
|
21
|
+
path: "/:orgId/routes",
|
|
22
|
+
pathParams: params.path,
|
|
23
|
+
headers: params.headers,
|
|
24
|
+
opId: "listRoutes",
|
|
25
|
+
expectedContentType: "application/json",
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a product navigation route
|
|
30
|
+
* Turns a registered location plus ids into a canonical HTTPS link. Requires route.read, org access, and the location's extra permissions (for example sites.read for a Studio location). Does not search by name: pass ids you already have, or look them up with listWorkspaces, listWebStudioSites, or listOrgUsers first. status unsupported means the screen has no deep link; follow fallback when present.
|
|
31
|
+
*/
|
|
32
|
+
async resolveRoute(params) {
|
|
33
|
+
return this.client.request({
|
|
34
|
+
method: "POST",
|
|
35
|
+
path: "/:orgId/routes/resolve",
|
|
36
|
+
pathParams: params.path,
|
|
37
|
+
headers: params.headers,
|
|
38
|
+
body: params.body,
|
|
39
|
+
opId: "resolveRoute",
|
|
40
|
+
expectedContentType: "application/json",
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.RoutesApi = RoutesApi;
|
|
@@ -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. 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). 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. 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). Requires org.read and org access.
|
|
32
32
|
*/
|
|
33
33
|
async listWorkspaces(params) {
|
|
34
34
|
return this.client.request({
|
package/dist/index.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export { OrgsApi } from "./apis/OrgsApi";
|
|
|
23
23
|
export { PaperclipAgentsApi } from "./apis/PaperclipAgentsApi";
|
|
24
24
|
export { PortalFeatureContextApi } from "./apis/PortalFeatureContextApi";
|
|
25
25
|
export { PortalsApi } from "./apis/PortalsApi";
|
|
26
|
+
export { RoutesApi } from "./apis/RoutesApi";
|
|
26
27
|
export { SystemApi } from "./apis/SystemApi";
|
|
27
28
|
export { TokensApi } from "./apis/TokensApi";
|
|
28
29
|
export { WorkspacesApi } from "./apis/WorkspacesApi";
|
package/dist/index.js
CHANGED
|
@@ -19,7 +19,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
19
19
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.WorkspacesApi = exports.TokensApi = exports.SystemApi = exports.PortalsApi = exports.PortalFeatureContextApi = exports.PaperclipAgentsApi = exports.OrgsApi = exports.OrgUsersApi = exports.OrgGroupsApi = exports.NotesApi = exports.McpManagerApi = exports.IsolatedStoresApi = exports.HealthApi = exports.FusebaseAuthApi = exports.FilesApi = exports.EmailsApi = exports.BillingApi = exports.AppMagicLinksApi = exports.AppEmbedTargetsApi = exports.AppApisApi = exports.AccessApi = void 0;
|
|
22
|
+
exports.WorkspacesApi = exports.TokensApi = exports.SystemApi = exports.RoutesApi = exports.PortalsApi = exports.PortalFeatureContextApi = exports.PaperclipAgentsApi = exports.OrgsApi = exports.OrgUsersApi = exports.OrgGroupsApi = exports.NotesApi = exports.McpManagerApi = exports.IsolatedStoresApi = exports.HealthApi = exports.FusebaseAuthApi = exports.FilesApi = exports.EmailsApi = exports.BillingApi = exports.AppMagicLinksApi = exports.AppEmbedTargetsApi = exports.AppApisApi = exports.AccessApi = void 0;
|
|
23
23
|
__exportStar(require("./runtime"), exports);
|
|
24
24
|
__exportStar(require("./types"), exports);
|
|
25
25
|
var AccessApi_1 = require("./apis/AccessApi");
|
|
@@ -58,6 +58,8 @@ var PortalFeatureContextApi_1 = require("./apis/PortalFeatureContextApi");
|
|
|
58
58
|
Object.defineProperty(exports, "PortalFeatureContextApi", { enumerable: true, get: function () { return PortalFeatureContextApi_1.PortalFeatureContextApi; } });
|
|
59
59
|
var PortalsApi_1 = require("./apis/PortalsApi");
|
|
60
60
|
Object.defineProperty(exports, "PortalsApi", { enumerable: true, get: function () { return PortalsApi_1.PortalsApi; } });
|
|
61
|
+
var RoutesApi_1 = require("./apis/RoutesApi");
|
|
62
|
+
Object.defineProperty(exports, "RoutesApi", { enumerable: true, get: function () { return RoutesApi_1.RoutesApi; } });
|
|
61
63
|
var SystemApi_1 = require("./apis/SystemApi");
|
|
62
64
|
Object.defineProperty(exports, "SystemApi", { enumerable: true, get: function () { return SystemApi_1.SystemApi; } });
|
|
63
65
|
var TokensApi_1 = require("./apis/TokensApi");
|
|
@@ -69,6 +69,14 @@ export interface BucketAttachmentContract {
|
|
|
69
69
|
target: string;
|
|
70
70
|
targetId: string;
|
|
71
71
|
filename: string;
|
|
72
|
+
/**
|
|
73
|
+
* File kind detected from the mime type: `image`, `video`, `audio`, `doc`,
|
|
74
|
+
* `archive` or `file` for anything else.
|
|
75
|
+
*/
|
|
76
|
+
kind: string;
|
|
77
|
+
/**
|
|
78
|
+
* @deprecated Same value as `kind`, kept for apps deployed before it existed.
|
|
79
|
+
*/
|
|
72
80
|
type: string;
|
|
73
81
|
size: number;
|
|
74
82
|
/**
|
package/dist/types/index.d.ts
CHANGED
|
@@ -18,11 +18,13 @@ 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, 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, OrgInviteContract, OrgMagicLinkContract, OrgMemberExpectedJoinedAfterInQueryOptional, OrgMemberExpectedRoleInQueryOptional, OrgMemberRemoveResponseContract, OrgPortalContract, OrgPortalListResponseContract, OrgUserAddRequestContract, OrgUserAddResponseContract, OrgUserContract, OrgUserIdInPathRequired, OrgUserListResponseContract, OrgUserWorkspaceIdInPathRequired, OrgWorkspaceContract, OrgWorkspaceInviteContract, 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
|
+
export * from "./paperclip-services/paperclip-services";
|
|
24
25
|
export type { VerifyPortalFeatureContextTokenRequestContract, VerifyPortalFeatureContextTokenResponseContract } from "./portal-feature-context/portal-feature-context";
|
|
25
26
|
export * from "./portals/portals";
|
|
27
|
+
export * from "./routes/routes";
|
|
26
28
|
export * from "./shared/common";
|
|
27
29
|
export * from "./shared/enums";
|
|
28
30
|
export type { GetHealth200ResponseContract } from "./shared/health";
|
package/dist/types/index.js
CHANGED
|
@@ -27,7 +27,9 @@ __exportStar(require("./mcp-manager/mcp-manager"), exports);
|
|
|
27
27
|
__exportStar(require("./note/note"), exports);
|
|
28
28
|
__exportStar(require("./org-group/org-group"), exports);
|
|
29
29
|
__exportStar(require("./orgs/orgs"), exports);
|
|
30
|
+
__exportStar(require("./paperclip-services/paperclip-services"), exports);
|
|
30
31
|
__exportStar(require("./portals/portals"), exports);
|
|
32
|
+
__exportStar(require("./routes/routes"), exports);
|
|
31
33
|
__exportStar(require("./shared/common"), exports);
|
|
32
34
|
__exportStar(require("./shared/enums"), exports);
|
|
33
35
|
__exportStar(require("./system/system"), exports);
|
|
@@ -8,8 +8,31 @@ export interface OrgUserContract {
|
|
|
8
8
|
}
|
|
9
9
|
export type OrgUserIdInPathRequired = number;
|
|
10
10
|
export type OrgUserWorkspaceIdInPathRequired = string;
|
|
11
|
+
export interface DashboardCustomColumnContract {
|
|
12
|
+
key: string;
|
|
13
|
+
/** @nullable true */
|
|
14
|
+
alias: string | null;
|
|
15
|
+
name: string;
|
|
16
|
+
/** dashboard-service custom column type, for example `string` or `phone`. */
|
|
17
|
+
customType: string;
|
|
18
|
+
hidden: boolean;
|
|
19
|
+
readonly: boolean;
|
|
20
|
+
required: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** User-added columns of one existing dashboard. Empty when that dashboard is absent. */
|
|
23
|
+
export interface DashboardCustomColumnMetadataContract {
|
|
24
|
+
columns: DashboardCustomColumnContract[];
|
|
25
|
+
}
|
|
11
26
|
export interface OrgUserListResponseContract {
|
|
12
27
|
users: OrgUserContract[];
|
|
28
|
+
/**
|
|
29
|
+
* Custom columns from the clients and members dashboards.
|
|
30
|
+
* Both dashboards describe users. System columns are omitted.
|
|
31
|
+
*/
|
|
32
|
+
metadata: {
|
|
33
|
+
clients: DashboardCustomColumnMetadataContract;
|
|
34
|
+
members: DashboardCustomColumnMetadataContract;
|
|
35
|
+
};
|
|
13
36
|
}
|
|
14
37
|
export interface OrgUserAddRequestContract {
|
|
15
38
|
/**
|
|
@@ -77,6 +100,8 @@ export interface OrgWorkspaceContract {
|
|
|
77
100
|
}
|
|
78
101
|
export interface OrgWorkspaceListResponseContract {
|
|
79
102
|
workspaces: OrgWorkspaceContract[];
|
|
103
|
+
/** Custom columns of the workspaces dashboard. Empty when it does not exist. */
|
|
104
|
+
metadata: DashboardCustomColumnMetadataContract;
|
|
80
105
|
}
|
|
81
106
|
export interface CreateWorkspaceRequestContract {
|
|
82
107
|
/** Display name for the new workspace. Required. */
|
|
@@ -95,6 +120,8 @@ export interface OrgPortalContract {
|
|
|
95
120
|
}
|
|
96
121
|
export interface OrgPortalListResponseContract {
|
|
97
122
|
portals: OrgPortalContract[];
|
|
123
|
+
/** Custom columns of the portals dashboard. Empty when it does not exist. */
|
|
124
|
+
metadata: DashboardCustomColumnMetadataContract;
|
|
98
125
|
}
|
|
99
126
|
export interface OrgWorkspaceInviteContract {
|
|
100
127
|
workspaceId: string;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
export type PaperclipServicesEntitlementSourceContract = "advanced_subscription" | "ltd_coupons" | "ltd_pack" | "ineligible";
|
|
2
|
+
export type PaperclipServicesEntitlementErrorCodeContract = "ltd_coupons_below_minimum" | "ineligible" | "unavailable";
|
|
3
|
+
export interface PaperclipServicesEntitlementContract {
|
|
4
|
+
eligible: boolean;
|
|
5
|
+
source: PaperclipServicesEntitlementSourceContract;
|
|
6
|
+
couponCount: number | null;
|
|
7
|
+
evaluatedAt: string;
|
|
8
|
+
errorCode?: PaperclipServicesEntitlementErrorCodeContract;
|
|
9
|
+
message?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface PaperclipServicesEntitlementsContract {
|
|
12
|
+
n8n: PaperclipServicesEntitlementContract;
|
|
13
|
+
firecrawl: PaperclipServicesEntitlementContract;
|
|
14
|
+
}
|
|
15
|
+
export interface PaperclipServicesCapabilitiesContract {
|
|
16
|
+
provider: string;
|
|
17
|
+
providerVersion: string;
|
|
18
|
+
architecture: string;
|
|
19
|
+
featureAvailable: boolean;
|
|
20
|
+
firecrawlProxyManagement?: boolean;
|
|
21
|
+
entitlement?: PaperclipServicesEntitlementContract;
|
|
22
|
+
entitlements?: PaperclipServicesEntitlementsContract;
|
|
23
|
+
}
|
|
24
|
+
export interface PaperclipServicesResourceUsageContract {
|
|
25
|
+
cpu: string;
|
|
26
|
+
memory: string;
|
|
27
|
+
storage: string;
|
|
28
|
+
pods: number;
|
|
29
|
+
persistentVolumeClaims: number;
|
|
30
|
+
}
|
|
31
|
+
export interface PaperclipServicesCapacityContract {
|
|
32
|
+
currentProfile: string;
|
|
33
|
+
reserved: PaperclipServicesResourceUsageContract;
|
|
34
|
+
used: PaperclipServicesResourceUsageContract;
|
|
35
|
+
available: PaperclipServicesResourceUsageContract;
|
|
36
|
+
eligibleNextProfiles: string[];
|
|
37
|
+
}
|
|
38
|
+
export type PaperclipServicesComponentKindContract = "Deployment" | "StatefulSet";
|
|
39
|
+
export type PaperclipServicesComponentStatusContract = "healthy" | "degraded" | "unhealthy" | "unknown";
|
|
40
|
+
export interface PaperclipServicesComponentHealthContract {
|
|
41
|
+
appKey: string;
|
|
42
|
+
component: string;
|
|
43
|
+
kind: PaperclipServicesComponentKindContract;
|
|
44
|
+
status: PaperclipServicesComponentStatusContract;
|
|
45
|
+
desiredReplicas: number;
|
|
46
|
+
readyReplicas: number;
|
|
47
|
+
restartCount: number;
|
|
48
|
+
manifestRevision?: string;
|
|
49
|
+
reason?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface PaperclipServicesHealthAlertContract {
|
|
52
|
+
code: string;
|
|
53
|
+
severity: "warning" | "critical";
|
|
54
|
+
message: string;
|
|
55
|
+
appKey?: string;
|
|
56
|
+
component?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface PaperclipServicesHealthContract {
|
|
59
|
+
status: "healthy" | "degraded" | "unavailable";
|
|
60
|
+
checkedAt: string;
|
|
61
|
+
components: PaperclipServicesComponentHealthContract[];
|
|
62
|
+
alerts: PaperclipServicesHealthAlertContract[];
|
|
63
|
+
operations: {
|
|
64
|
+
pending: number;
|
|
65
|
+
running: number;
|
|
66
|
+
staleClaims: number;
|
|
67
|
+
needsManualReview: number;
|
|
68
|
+
};
|
|
69
|
+
reconciliation: {
|
|
70
|
+
orphanedWorkloads: number;
|
|
71
|
+
outdatedManifests: number;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export interface OrgServiceInstanceContract {
|
|
75
|
+
/** Set up for this organization. */
|
|
76
|
+
installed: boolean;
|
|
77
|
+
/** The organization may set it up. False means do not offer a setup flow. */
|
|
78
|
+
available: boolean;
|
|
79
|
+
url?: string;
|
|
80
|
+
}
|
|
81
|
+
export interface OrgServiceInstancesContract {
|
|
82
|
+
fusebaseWork: OrgServiceInstanceContract;
|
|
83
|
+
n8n: OrgServiceInstanceContract;
|
|
84
|
+
firecrawl: OrgServiceInstanceContract;
|
|
85
|
+
}
|
|
86
|
+
export type PaperclipServiceAppKeyContract = "n8n" | "firecrawl";
|
|
87
|
+
export type PaperclipServiceAppKeyInPathRequired = string;
|
|
88
|
+
export type PaperclipServiceOperationIdInPathRequired = string;
|
|
89
|
+
export type PaperclipManagedCompanyIdInQueryRequired = string;
|
|
90
|
+
export type FirecrawlProxyModeContract = "direct" | "custom_gateway" | "proxy_list" | "remote_list";
|
|
91
|
+
export interface FirecrawlProxyUpdateContract {
|
|
92
|
+
mode: FirecrawlProxyModeContract;
|
|
93
|
+
server?: string;
|
|
94
|
+
username?: string;
|
|
95
|
+
password?: string;
|
|
96
|
+
proxies?: string[];
|
|
97
|
+
sourceUrl?: string;
|
|
98
|
+
sourceAuthorization?: string;
|
|
99
|
+
refreshIntervalSeconds?: number;
|
|
100
|
+
}
|
|
101
|
+
export interface FirecrawlProxyConfigureRequestContract {
|
|
102
|
+
orgRuntimeIdentity: string;
|
|
103
|
+
managedCompanyId: string;
|
|
104
|
+
update: FirecrawlProxyUpdateContract;
|
|
105
|
+
}
|
|
106
|
+
export interface FirecrawlProxySettingsContract {
|
|
107
|
+
available: boolean;
|
|
108
|
+
mode: FirecrawlProxyModeContract;
|
|
109
|
+
server: string | null;
|
|
110
|
+
usernameConfigured: boolean;
|
|
111
|
+
passwordConfigured: boolean;
|
|
112
|
+
proxyCount: number;
|
|
113
|
+
sourceConfigured: boolean;
|
|
114
|
+
sourceAuthorizationConfigured: boolean;
|
|
115
|
+
refreshIntervalSeconds: number | null;
|
|
116
|
+
/** @format date-time */
|
|
117
|
+
updatedAt: string | null;
|
|
118
|
+
}
|
|
119
|
+
export interface PaperclipServiceOperationRequestContract {
|
|
120
|
+
orgRuntimeIdentity: string;
|
|
121
|
+
managedCompanyId: string;
|
|
122
|
+
operationId: string;
|
|
123
|
+
idempotencyKey: string;
|
|
124
|
+
providerRef?: string;
|
|
125
|
+
}
|
|
126
|
+
export interface PaperclipServiceInstallRequestContract extends PaperclipServiceOperationRequestContract {
|
|
127
|
+
appKey: PaperclipServiceAppKeyContract;
|
|
128
|
+
approvedManifestRevision: string;
|
|
129
|
+
}
|
|
130
|
+
export interface PaperclipServiceUpgradeRequestContract extends PaperclipServiceOperationRequestContract {
|
|
131
|
+
appKey: PaperclipServiceAppKeyContract;
|
|
132
|
+
approvedManifestRevision: string;
|
|
133
|
+
}
|
|
134
|
+
export interface PaperclipServiceBackupRequestContract extends PaperclipServiceOperationRequestContract {
|
|
135
|
+
manifestRevision: string;
|
|
136
|
+
}
|
|
137
|
+
export interface PaperclipServiceRestoreRequestContract extends PaperclipServiceOperationRequestContract {
|
|
138
|
+
backupProviderRequestId: string;
|
|
139
|
+
}
|
|
140
|
+
export interface PaperclipServiceRetryRequestContract extends PaperclipServiceOperationRequestContract {
|
|
141
|
+
action: "install" | "delete" | "upgrade" | "backup" | "restore";
|
|
142
|
+
}
|
|
143
|
+
export type PaperclipServiceOperationStatusContract = "pending" | "running" | "succeeded" | "failed" | "needs_manual_review";
|
|
144
|
+
export interface PaperclipServiceOperationContract {
|
|
145
|
+
providerRequestId: string;
|
|
146
|
+
status: PaperclipServiceOperationStatusContract;
|
|
147
|
+
providerRef?: string;
|
|
148
|
+
providerRouteRef?: string;
|
|
149
|
+
observedState: Record<string, unknown>;
|
|
150
|
+
error?: string;
|
|
151
|
+
}
|
|
152
|
+
export interface PaperclipServiceInstallResultContract {
|
|
153
|
+
outcome: "accepted" | "insufficient_capacity";
|
|
154
|
+
operation?: PaperclipServiceOperationContract;
|
|
155
|
+
requested?: PaperclipServicesResourceUsageContract;
|
|
156
|
+
available?: PaperclipServicesResourceUsageContract;
|
|
157
|
+
requiredProfile?: string;
|
|
158
|
+
eligibleProfiles?: string[];
|
|
159
|
+
}
|
|
160
|
+
export declare const PaperclipServicesEntitlementSourceContract: {
|
|
161
|
+
readonly AdvancedSubscription: "advanced_subscription";
|
|
162
|
+
readonly LtdCoupons: "ltd_coupons";
|
|
163
|
+
readonly LtdPack: "ltd_pack";
|
|
164
|
+
readonly Ineligible: "ineligible";
|
|
165
|
+
};
|
|
166
|
+
export declare const PaperclipServicesEntitlementErrorCodeContract: {
|
|
167
|
+
readonly LtdCouponsBelowMinimum: "ltd_coupons_below_minimum";
|
|
168
|
+
readonly Ineligible: "ineligible";
|
|
169
|
+
readonly Unavailable: "unavailable";
|
|
170
|
+
};
|
|
171
|
+
export declare const PaperclipServicesComponentKindContract: {
|
|
172
|
+
readonly Deployment: "Deployment";
|
|
173
|
+
readonly Statefulset: "StatefulSet";
|
|
174
|
+
};
|
|
175
|
+
export declare const PaperclipServicesComponentStatusContract: {
|
|
176
|
+
readonly Healthy: "healthy";
|
|
177
|
+
readonly Degraded: "degraded";
|
|
178
|
+
readonly Unhealthy: "unhealthy";
|
|
179
|
+
readonly Unknown: "unknown";
|
|
180
|
+
};
|
|
181
|
+
export declare const PaperclipServiceAppKeyContract: {
|
|
182
|
+
readonly N8n: "n8n";
|
|
183
|
+
readonly Firecrawl: "firecrawl";
|
|
184
|
+
};
|
|
185
|
+
export declare const FirecrawlProxyModeContract: {
|
|
186
|
+
readonly Direct: "direct";
|
|
187
|
+
readonly CustomGateway: "custom_gateway";
|
|
188
|
+
readonly ProxyList: "proxy_list";
|
|
189
|
+
readonly RemoteList: "remote_list";
|
|
190
|
+
};
|
|
191
|
+
export declare const PaperclipServiceOperationStatusContract: {
|
|
192
|
+
readonly Pending: "pending";
|
|
193
|
+
readonly Running: "running";
|
|
194
|
+
readonly Succeeded: "succeeded";
|
|
195
|
+
readonly Failed: "failed";
|
|
196
|
+
readonly NeedsManualReview: "needs_manual_review";
|
|
197
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PaperclipServiceOperationStatusContract = exports.FirecrawlProxyModeContract = exports.PaperclipServiceAppKeyContract = exports.PaperclipServicesComponentStatusContract = exports.PaperclipServicesComponentKindContract = exports.PaperclipServicesEntitlementErrorCodeContract = exports.PaperclipServicesEntitlementSourceContract = void 0;
|
|
4
|
+
exports.PaperclipServicesEntitlementSourceContract = {
|
|
5
|
+
AdvancedSubscription: "advanced_subscription",
|
|
6
|
+
LtdCoupons: "ltd_coupons",
|
|
7
|
+
LtdPack: "ltd_pack",
|
|
8
|
+
Ineligible: "ineligible"
|
|
9
|
+
};
|
|
10
|
+
exports.PaperclipServicesEntitlementErrorCodeContract = {
|
|
11
|
+
LtdCouponsBelowMinimum: "ltd_coupons_below_minimum",
|
|
12
|
+
Ineligible: "ineligible",
|
|
13
|
+
Unavailable: "unavailable"
|
|
14
|
+
};
|
|
15
|
+
exports.PaperclipServicesComponentKindContract = {
|
|
16
|
+
Deployment: "Deployment",
|
|
17
|
+
Statefulset: "StatefulSet"
|
|
18
|
+
};
|
|
19
|
+
exports.PaperclipServicesComponentStatusContract = {
|
|
20
|
+
Healthy: "healthy",
|
|
21
|
+
Degraded: "degraded",
|
|
22
|
+
Unhealthy: "unhealthy",
|
|
23
|
+
Unknown: "unknown"
|
|
24
|
+
};
|
|
25
|
+
exports.PaperclipServiceAppKeyContract = {
|
|
26
|
+
N8n: "n8n",
|
|
27
|
+
Firecrawl: "firecrawl"
|
|
28
|
+
};
|
|
29
|
+
exports.FirecrawlProxyModeContract = {
|
|
30
|
+
Direct: "direct",
|
|
31
|
+
CustomGateway: "custom_gateway",
|
|
32
|
+
ProxyList: "proxy_list",
|
|
33
|
+
RemoteList: "remote_list"
|
|
34
|
+
};
|
|
35
|
+
exports.PaperclipServiceOperationStatusContract = {
|
|
36
|
+
Pending: "pending",
|
|
37
|
+
Running: "running",
|
|
38
|
+
Succeeded: "succeeded",
|
|
39
|
+
Failed: "failed",
|
|
40
|
+
NeedsManualReview: "needs_manual_review"
|
|
41
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type RouteOpenInContract = "same_tab" | "new_tab";
|
|
2
|
+
export type RouteResolveStatusContract = "ok" | "unsupported";
|
|
3
|
+
export interface RouteCatalogEntryContract {
|
|
4
|
+
location: string;
|
|
5
|
+
title: string;
|
|
6
|
+
/** False when the screen exists but has no URL. Use `fallback`. */
|
|
7
|
+
linkable: boolean;
|
|
8
|
+
/** Permissions the caller must already hold, in addition to `route.read`. */
|
|
9
|
+
requires: string[];
|
|
10
|
+
/** Param names this location accepts. `workspaceId` may also come from `context`. */
|
|
11
|
+
params: string[];
|
|
12
|
+
openIn?: RouteOpenInContract;
|
|
13
|
+
fallback?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface RouteListResponseContract {
|
|
16
|
+
routes: RouteCatalogEntryContract[];
|
|
17
|
+
}
|
|
18
|
+
export interface RouteContextContract {
|
|
19
|
+
/** Workspace the person is in. Used as the web-client shell path. */
|
|
20
|
+
workspaceId?: string;
|
|
21
|
+
siteId?: string;
|
|
22
|
+
branchId?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ResolveRouteRequestContract {
|
|
25
|
+
/** Registry id from listRoutes. Not a URL and not a goto string. */
|
|
26
|
+
location: string;
|
|
27
|
+
params?: Record<string, string>;
|
|
28
|
+
context?: RouteContextContract;
|
|
29
|
+
}
|
|
30
|
+
export interface ResolveRouteFallbackContract {
|
|
31
|
+
location: string;
|
|
32
|
+
url: string;
|
|
33
|
+
}
|
|
34
|
+
export interface ResolveRouteResponseContract {
|
|
35
|
+
status: RouteResolveStatusContract;
|
|
36
|
+
location: string;
|
|
37
|
+
url?: string;
|
|
38
|
+
openIn?: RouteOpenInContract;
|
|
39
|
+
reason?: string;
|
|
40
|
+
fallback?: ResolveRouteFallbackContract;
|
|
41
|
+
}
|
|
42
|
+
export declare const RouteOpenInContract: {
|
|
43
|
+
readonly SameTab: "same_tab";
|
|
44
|
+
readonly NewTab: "new_tab";
|
|
45
|
+
};
|
|
46
|
+
export declare const RouteResolveStatusContract: {
|
|
47
|
+
readonly Ok: "ok";
|
|
48
|
+
readonly Unsupported: "unsupported";
|
|
49
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RouteResolveStatusContract = exports.RouteOpenInContract = void 0;
|
|
4
|
+
exports.RouteOpenInContract = {
|
|
5
|
+
SameTab: "same_tab",
|
|
6
|
+
NewTab: "new_tab"
|
|
7
|
+
};
|
|
8
|
+
exports.RouteResolveStatusContract = {
|
|
9
|
+
Ok: "ok",
|
|
10
|
+
Unsupported: "unsupported"
|
|
11
|
+
};
|
|
@@ -3,7 +3,7 @@ export type PermissionContract = string & {
|
|
|
3
3
|
__pattern: "^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)*\\.(read|write|delete|execute|send|create|manage|bypass|delegate|client_invite)$";
|
|
4
4
|
};
|
|
5
5
|
export type RootEntityContract = "custom" | "portal" | "workspace" | "org" | "user" | "client" | "form" | "form-response" | "tracker" | "tracker-result" | "meeting";
|
|
6
|
-
export type ScopeTypeContract = "org" | "workspace" | "portal" | "user" | "client" | "block" | "tracker" | "parent_row" | "parent_table";
|
|
6
|
+
export type ScopeTypeContract = "org" | "workspace" | "portal" | "user" | "client" | "block" | "tracker" | "parent_row" | "parent_table" | "app";
|
|
7
7
|
export type ScopeTypeOrgContract = "org";
|
|
8
8
|
export declare const OrgRoleContract: {
|
|
9
9
|
readonly Owner: "owner";
|
|
@@ -36,6 +36,7 @@ export declare const ScopeTypeContract: {
|
|
|
36
36
|
readonly Tracker: "tracker";
|
|
37
37
|
readonly ParentRow: "parent_row";
|
|
38
38
|
readonly ParentTable: "parent_table";
|
|
39
|
+
readonly App: "app";
|
|
39
40
|
};
|
|
40
41
|
export declare const ScopeTypeOrgContract: {
|
|
41
42
|
readonly Org: "org";
|
package/package.json
CHANGED
package/release-notes/latest.md
CHANGED
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
# Release Notes 2.11.8-sdk.0
|
|
2
|
-
|
|
3
|
-
- Current ref: `HEAD`
|
|
4
|
-
- Previous tag: `v2.11.7-sdk.0`
|
|
5
|
-
- Generated at: 2026-09-21T10:48:18.778Z
|
|
6
|
-
|
|
7
|
-
## Included Drafts
|
|
8
|
-
|
|
9
|
-
- `docs/release-notes/2026-06-08-get-org-url.md` - Get organization URL
|
|
10
|
-
- `docs/release-notes/2026-09-09-org-url-web-client-host.md` - getOrgUrl returns the web-client host
|
|
11
|
-
- `docs/release-notes/2026-09-14-bucket-attachments.md` - Bucket attachments for app files
|
|
12
|
-
- `docs/release-notes/2026-09-14-list-bucket-attachments.md` - One file list across app, note and portal files
|
|
13
|
-
- `docs/release-notes/2026-09-14-presigned-file-upload.md` - Presigned single-request file upload
|
|
14
|
-
- `docs/release-notes/2026-09-19-web-studio-motion-guidance.md` - Web Studio motion guidance
|
|
15
|
-
|
|
16
|
-
## Summary
|
|
17
|
-
|
|
18
|
-
### Get organization URL
|
|
19
|
-
|
|
20
|
-
Gate exposes `GET /:orgId/url` (`getOrgUrl`) to resolve the canonical HTTPS base URL for an organization. The hostname follows org-service rules: custom CNAME domain when configured, otherwise `{sub}.{FUSEBASE_WEB_CLIENT_HOST}` (see the 2026-09-09 note; before that it was `{sub}.{FUSEBASE_HOST}`).
|
|
21
|
-
|
|
22
|
-
### getOrgUrl returns the web-client host
|
|
23
|
-
|
|
24
|
-
`getOrgUrl` built org subdomain URLs from `FUSEBASE_HOST` (the API host, e.g.
|
|
25
|
-
`thefusebase.com`), so it returned `{sub}.thefusebase.com`. Users know their org by
|
|
26
|
-
the web-client host (`{sub}.nimbusweb.me` on prod). Both hosts resolve, so the wrong
|
|
27
|
-
one never failed loudly.
|
|
28
|
-
|
|
29
|
-
`FUSEBASE_HOST` could not be repurposed — it also derives `app.thefusebase.com` for
|
|
30
|
-
the auth-form URLs.
|
|
31
|
-
|
|
32
|
-
### Bucket attachments for app files
|
|
33
|
-
|
|
34
|
-
An app that uploaded a file through Gate had nowhere to put it: the stored file was
|
|
35
|
-
not part of the organization's file listing, so the File Manager app could only ever
|
|
36
|
-
show its own files. Gate now talks to bucket-service, so an uploaded file becomes an
|
|
37
|
-
attachment in the organization's `app` bucket and shows up next to files from notes
|
|
38
|
-
and portals.
|
|
39
|
-
|
|
40
|
-
### One file list across app, note and portal files
|
|
41
|
-
|
|
42
|
-
The File Manager app could only show the files it uploaded itself. `listBucketAttachments`
|
|
43
|
-
returns the organization's files from every source in one list, with the metadata needed to
|
|
44
|
-
filter them (source, uploader, size) and to show each file only to people who may see it.
|
|
45
|
-
|
|
46
|
-
### Presigned single-request file upload
|
|
47
|
-
|
|
48
|
-
Uploading a file through Gate always meant a multipart upload: start, PUT every part,
|
|
49
|
-
complete. For a file small enough to fit in one request that is three round trips for
|
|
50
|
-
no reason, and the completion step always created a stored-file record, which the
|
|
51
|
-
File Manager app does not want — it creates its own bucket attachment instead.
|
|
52
|
-
|
|
53
|
-
### Web Studio motion guidance
|
|
54
|
-
|
|
55
|
-
Added the safe, declarative Web Studio motion contract to the Gate MCP prompt.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
## API / SDK Changes
|
|
59
|
-
|
|
60
|
-
### Get organization URL
|
|
61
|
-
|
|
62
|
-
- Added `getOrgUrl` operation and `OrgsApi.getOrgUrl` SDK client method.
|
|
63
|
-
- Response fields: `url`, `host`, `kind` (`cname` | `subdomain`), `sub`, `customDomain`, `domainShorter`.
|
|
64
|
-
- Permission: `org.read` with org-scoped authz.
|
|
65
|
-
|
|
66
|
-
### Bucket attachments for app files
|
|
67
|
-
|
|
68
|
-
- New op `createBucketAttachment`, `POST /:orgId/bucket-attachments` (`files.write`).
|
|
69
|
-
Body takes `tempStoredFileName` (required) plus optional `attributes`, `accessPrincipals`
|
|
70
|
-
and `folder`. Gate generates the attachment id and reads the owning app from the
|
|
71
|
-
token's `client` scope, so a call without an app token answers 400.
|
|
72
|
-
- New op `updateBucketAttachment`, `PATCH /:orgId/bucket-attachments/:globalId`
|
|
73
|
-
(`files.write`). Body takes `filename`, `attributes` and `accessPrincipals`, all optional.
|
|
74
|
-
A field that is not sent stays as it is; `accessPrincipals: null` clears every
|
|
75
|
-
restriction. bucket-service statuses (400, 404) are passed through unchanged.
|
|
76
|
-
- Both return the attachment as `globalId`, `target`, `targetId`, `filename`, `type`,
|
|
77
|
-
`size`, `userId`, `url`, `createdAt`, `attributes` and `accessPrincipals`.
|
|
78
|
-
- MCP `files` prompt covers both ops, and the Gate files skill reference is
|
|
79
|
-
regenerated.
|
|
80
|
-
|
|
81
|
-
### One file list across app, note and portal files
|
|
82
|
-
|
|
83
|
-
- New op `listBucketAttachments`, `GET /:orgId/bucket-attachments` (`files.read`, clients
|
|
84
|
-
included). Query: `targets` (source buckets, for example `app` or `note`), `sizeFrom`
|
|
85
|
-
(bytes), `attributes`, `limit` (default 50, max 100), `offset`, `sortField`, `sortOrder`.
|
|
86
|
-
- `attributes` keeps only the files whose custom metadata contains every given pair, as a
|
|
87
|
-
JSON object of strings such as `{"source":"file-manager"}` (max 50 keys, 255 chars per key
|
|
88
|
-
and value). `total` follows the same filter. A malformed filter is a 400, answered before
|
|
89
|
-
bucket-service is called.
|
|
90
|
-
- Returns `{items, total}`. Each item carries `globalId`, `target` (the source), `targetId`,
|
|
91
|
-
`workspaceId`, `portalId`, `filename`, `type`, `size`, `userId` (the uploader), `url`,
|
|
92
|
-
`createdAt`, `attributes`, `accessPrincipals` and, for organization members, `permissions`.
|
|
93
|
-
- `createBucketAttachment` and `updateBucketAttachment` now return the same three extra
|
|
94
|
-
fields (`workspaceId`, `portalId`, `permissions`), null for app files.
|
|
95
|
-
- Gate resolves the caller's organization role and group memberships itself and forwards
|
|
96
|
-
them, with the caller's user id, to both the listing and the count. bucket-service then
|
|
97
|
-
decides what the caller may see. A client role is filtered in `client` permissions mode,
|
|
98
|
-
everyone else in `admin` mode.
|
|
99
|
-
- `accessPrincipals.groupIds` on `createBucketAttachment` and `updateBucketAttachment` are
|
|
100
|
-
organization group global ids (strings), the ids org-service and bucket-service use.
|
|
101
|
-
- MCP `files` prompt covers the new op, and the Gate files skill reference is regenerated.
|
|
102
|
-
|
|
103
|
-
### Presigned single-request file upload
|
|
104
|
-
|
|
105
|
-
- New op `createTempStoredFileUpload`, `POST /:orgId/files/uploads/presigned`
|
|
106
|
-
(`files.write`). Body takes `name` (required) plus optional `type`, `size`,
|
|
107
|
-
`folder` and `public`. It returns `uploadUrl`, `method`, `expiresAt`,
|
|
108
|
-
`tempStoredFileName`, and `headers` holding the single `content-type` header the
|
|
109
|
-
PUT may carry — the URL signs `host` only, so anything else breaks the signature.
|
|
110
|
-
- `completeMultipartFileUpload` takes an optional `saveStoredFile` (default `true`).
|
|
111
|
-
With `false` it finishes the upload and skips the stored-file record.
|
|
112
|
-
- `completeMultipartFileUpload` response gains `storedFileCreated` and
|
|
113
|
-
`tempStoredfileName`. `fileId` and `storedFileUUID` are now nullable — they are
|
|
114
|
-
null exactly when `saveStoredFile` was `false`.
|
|
115
|
-
- MCP `files` prompt covers both, and the Gate files skill reference is regenerated.
|
|
116
|
-
|
|
117
|
-
### Web Studio motion guidance
|
|
118
|
-
|
|
119
|
-
No operation or SDK contract changed. The `webStudio` MCP prompt is now version
|
|
120
|
-
`1.11.0` and describes the supported `reveal`, `count`, and `parallax` motion
|
|
121
|
-
attributes and their bounded options.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
## Consumer Impact
|
|
125
|
-
|
|
126
|
-
### Get organization URL
|
|
127
|
-
|
|
128
|
-
- Apps and agents can stop hardcoding Fusebase hostnames when building org-scoped links.
|
|
129
|
-
- Portal domains and app magic-link hosts remain separate surfaces; use `listPortals` or app APIs for those.
|
|
130
|
-
|
|
131
|
-
### getOrgUrl returns the web-client host
|
|
132
|
-
|
|
133
|
-
- Custom CNAME domains are unchanged — they already won over the host.
|
|
134
|
-
- Deployments without the new variable keep the previous behaviour via the fallback.
|
|
135
|
-
|
|
136
|
-
### Bucket attachments for app files
|
|
137
|
-
|
|
138
|
-
- Nothing changes for existing callers: both ops are new and no existing response
|
|
139
|
-
shape moved.
|
|
140
|
-
- Deployments need `BUCKET_SERVICE_URL`. Without it the two new ops answer 500 and
|
|
141
|
-
every other op is unaffected.
|
|
142
|
-
- Gate calls bucket-service with the plain `Internal` header and no super secret, so
|
|
143
|
-
bucket-service authorizes the real user against the file's own organization. That
|
|
144
|
-
is what keeps an app from touching an attachment in another organization.
|
|
145
|
-
|
|
146
|
-
### One file list across app, note and portal files
|
|
147
|
-
|
|
148
|
-
- Nothing changes for existing callers: the op is new and the two added fields are optional.
|
|
149
|
-
- A token issued for an app sees exactly what a user session for the same user sees: the
|
|
150
|
-
role and the group memberships are resolved from the organization membership and from
|
|
151
|
-
org-service, not from the request.
|
|
152
|
-
- `total` is counted by bucket-service, which counts the page it would return, so the gate
|
|
153
|
-
asks it for up to 1000 files. A larger organization reports 1000.
|
|
154
|
-
|
|
155
|
-
### Presigned single-request file upload
|
|
156
|
-
|
|
157
|
-
- Existing callers are unaffected: `saveStoredFile` defaults to `true`, so the
|
|
158
|
-
response keeps the same values it had.
|
|
159
|
-
- TypeScript consumers reading `storedFileUUID` from the completion response now see
|
|
160
|
-
`string | null` and have to narrow it. Checking `storedFileCreated` is the clearest
|
|
161
|
-
way.
|
|
162
|
-
|
|
163
|
-
### Web Studio motion guidance
|
|
164
|
-
|
|
165
|
-
MCP agents receive the same motion guidance as Studio Chat: they can request
|
|
166
|
-
compiler-owned motion without attempting to add site-authored JavaScript.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
## Verification
|
|
170
|
-
|
|
171
|
-
### Get organization URL
|
|
172
|
-
|
|
173
|
-
- `npm test -- tests/unit/org-url-service.test.ts tests/unit/orgs-controller.test.ts`
|
|
174
|
-
- `npm run build:sdk`
|
|
175
|
-
- `npm run mcp:skills:generate`
|
|
176
|
-
- `npm run mcp:skills:validate`
|
|
177
|
-
|
|
178
|
-
### getOrgUrl returns the web-client host
|
|
179
|
-
|
|
180
|
-
- `npm test -- tests/unit/config-env.test.ts tests/unit/orgs-controller.test.ts tests/unit/org-url-service.test.ts`
|
|
181
|
-
|
|
182
|
-
### Bucket attachments for app files
|
|
183
|
-
|
|
184
|
-
- `npm test -- tests/unit/files`
|
|
185
|
-
- `npm run build`, `npm run build:sdk`, `npm run mcp:skills:generate`,
|
|
186
|
-
`npm run mcp:skills:validate`
|
|
187
|
-
- e2e-sdk and mcp-e2e cover the update flow and the 400/404 cases against a fake
|
|
188
|
-
bucket-service. Creating an attachment needs a real app token (`client` scope),
|
|
189
|
-
so that path is covered by unit tests and by QA on dev (NIM-44491).
|
|
190
|
-
|
|
191
|
-
### One file list across app, note and portal files
|
|
192
|
-
|
|
193
|
-
- `npm test -- tests/unit/files tests/unit/bucket-service-client`
|
|
194
|
-
- `npm run build`, `npm run build:sdk`, `npm run mcp:skills:generate`,
|
|
195
|
-
`npm run mcp:skills:validate`
|
|
196
|
-
- e2e-sdk and mcp-e2e list app and note files against the fake bucket-service and check the
|
|
197
|
-
`targets` and `sizeFrom` filters. The fake enforces the caller access principals, and one
|
|
198
|
-
e2e-sdk case creates a real group, grants files by role and by group, and asserts both
|
|
199
|
-
a token and a user session see them while a file granted to neither stays hidden. Further
|
|
200
|
-
cases cover the `attributes` filter and its count, an app file addressed to another user
|
|
201
|
-
staying hidden from an org member, the uploader receiving their own restricted file, and a
|
|
202
|
-
client receiving the app file granted to the `client` role.
|
|
203
|
-
|
|
204
|
-
### Presigned single-request file upload
|
|
205
|
-
|
|
206
|
-
- `npm test -- tests/unit/files`
|
|
207
|
-
- `npm run build`, `npm run build:sdk`, `npm run mcp:skills:generate`,
|
|
208
|
-
`npm run mcp:skills:validate`
|
|
209
|
-
|
|
210
|
-
### Web Studio motion guidance
|
|
211
|
-
|
|
212
|
-
- `npm run build`
|
|
213
|
-
- `npm run mcp:skills:generate`
|
|
214
|
-
- `npm run mcp:skills:validate` remains blocked locally because the `skills_ref`
|
|
215
|
-
Python module is unavailable.
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
## Follow-ups
|
|
219
|
-
|
|
220
|
-
### Get organization URL
|
|
221
|
-
|
|
222
|
-
- None.
|
|
223
|
-
|
|
224
|
-
### Bucket attachments for app files
|
|
225
|
-
|
|
226
|
-
- `listBucketAttachments` (NIM-44489) returns the aggregated listing these
|
|
227
|
-
attachments join.
|
|
228
|
-
|
|
229
|
-
### Presigned single-request file upload
|
|
230
|
-
|
|
231
|
-
- `createBucketAttachment` (NIM-44488) is what turns `tempStoredFileName` into a
|
|
232
|
-
bucket attachment for the File Manager app.
|
|
233
|
-
|
|
234
|
-
### Web Studio motion guidance
|
|
235
|
-
|
|
236
|
-
Deploy the matching Web Studio compiler release before relying on motion
|
|
237
|
-
attributes in published sites.
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
## Changes
|
|
241
|
-
|
|
242
|
-
### getOrgUrl returns the web-client host
|
|
243
|
-
|
|
244
|
-
- New env variable `FUSEBASE_WEB_CLIENT_HOST` (`config.fusebaseWebClientHost`),
|
|
245
|
-
falling back to `FUSEBASE_HOST` when unset.
|
|
246
|
-
- `getOrgUrl` now resolves subdomain org URLs against `fusebaseWebClientHost`, and so
|
|
247
|
-
do the markdown-note share URLs, which are built on the same org base.
|
|
248
|
-
- The MCP prompt host bag carries `fusebaseWebClientHost` alongside `fusebaseHost`;
|
|
249
|
-
the `getOrgUrl` prompt example uses the web-client one. `fusebaseHost` keeps meaning
|
|
250
|
-
the API/platform host everywhere.
|
|
251
|
-
- Added to nimbus-helm-chart `fusebase-gate` values and deployment env
|
|
252
|
-
(prod `nimbusweb.me`, dev `dev-thefusebase.com`).
|