@fusebase/fusebase-gate-sdk 2.11.5 → 2.11.6
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/AppMagicLinksApi.d.ts +1 -1
- package/dist/apis/AppMagicLinksApi.js +1 -1
- package/dist/apis/FusebaseAuthApi.d.ts +4 -4
- package/dist/apis/FusebaseAuthApi.js +4 -4
- package/dist/types/app-api/app-api.d.ts +6 -0
- package/dist/types/app-magic-link/app-magic-link.d.ts +4 -1
- package/dist/types/fusebase-auth/fusebase-auth.d.ts +85 -0
- package/dist/types/index.d.ts +1 -1
- package/package.json +1 -1
- package/release-notes/2.11.6-sdk.0.md +61 -0
- package/release-notes/2.11.6.md +9 -0
- package/release-notes/latest.md +3 -3
- package/release-notes/2.11.3.md +0 -116
- package/release-notes/2.11.5.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.
|
|
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.
|
|
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.
|
|
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.
|
|
17
17
|
*/
|
|
18
18
|
async callAppApi(params) {
|
|
19
19
|
return this.client.request({
|
|
@@ -11,7 +11,7 @@ export declare class AppMagicLinksApi {
|
|
|
11
11
|
constructor(client: Client);
|
|
12
12
|
/**
|
|
13
13
|
* Activate an app magic link
|
|
14
|
-
* Unauthenticated activation: exchange a magic-link globalId for a session token (
|
|
14
|
+
* Unauthenticated activation: exchange a magic-link globalId for a session token (a raw FuseBase session id: forward it to Gate as `EverHelper-Session-ID` when a legacy call needs it, never set it as a cookie on the app host), a Gate feature token, and a Dashboard feature token, all scoped to the magic link's app and target user. Re-evaluates accessPrincipals at activation time so a link issued before access was revoked can no longer be redeemed. Within the 24h TTL the link can be activated more than once.
|
|
15
15
|
*/
|
|
16
16
|
activateAppMagicLink(params: {
|
|
17
17
|
path: {
|
|
@@ -13,7 +13,7 @@ class AppMagicLinksApi {
|
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* Activate an app magic link
|
|
16
|
-
* Unauthenticated activation: exchange a magic-link globalId for a session token (
|
|
16
|
+
* Unauthenticated activation: exchange a magic-link globalId for a session token (a raw FuseBase session id: forward it to Gate as `EverHelper-Session-ID` when a legacy call needs it, never set it as a cookie on the app host), a Gate feature token, and a Dashboard feature token, all scoped to the magic link's app and target user. Re-evaluates accessPrincipals at activation time so a link issued before access was revoked can no longer be redeemed. Within the 24h TTL the link can be activated more than once.
|
|
17
17
|
*/
|
|
18
18
|
async activateAppMagicLink(params) {
|
|
19
19
|
return this.client.request({
|
|
@@ -21,7 +21,7 @@ export declare class FusebaseAuthApi {
|
|
|
21
21
|
}): Promise<FusebaseAuthPasswordRestoreKeyResponseContract>;
|
|
22
22
|
/**
|
|
23
23
|
* Complete Fusebase auth challenge
|
|
24
|
-
* Visitor-safe challenge completion endpoint for CAPTCHA, OTP, mail OTP, and MFA flows returned by register/login.
|
|
24
|
+
* Visitor-safe challenge completion endpoint for CAPTCHA, OTP, mail OTP, and MFA flows returned by register/login. An authenticated result carries `appAuth`: spend `appAuth.authPath` on the app's own origin, with a same-origin `fetch` sending `Accept: application/json` or a plain navigation, and the platform mints the app runtime token from it.
|
|
25
25
|
*/
|
|
26
26
|
completeFusebaseAuthChallenge(params: {
|
|
27
27
|
headers?: Record<string, string>;
|
|
@@ -29,7 +29,7 @@ export declare class FusebaseAuthApi {
|
|
|
29
29
|
}): Promise<FusebaseAuthChallengeResponseContract>;
|
|
30
30
|
/**
|
|
31
31
|
* Login a Fusebase user
|
|
32
|
-
* Visitor-safe email/password login proxy for AI App auth. Forwards to auth-form `/auth/api/auth` server-side
|
|
32
|
+
* Visitor-safe email/password login proxy for AI App auth. Forwards to auth-form `/auth/api/auth` server-side. An authenticated result carries `appAuth`: spend `appAuth.authPath` on the app's own origin, with a same-origin `fetch` sending `Accept: application/json` or a plain navigation, and the platform mints the app runtime token from it. Never provisions org membership.
|
|
33
33
|
*/
|
|
34
34
|
loginFusebaseUser(params: {
|
|
35
35
|
headers?: Record<string, string>;
|
|
@@ -44,7 +44,7 @@ export declare class FusebaseAuthApi {
|
|
|
44
44
|
}): Promise<FusebaseAuthLogoutResponseContract>;
|
|
45
45
|
/**
|
|
46
46
|
* Register a Fusebase user and add org membership
|
|
47
|
-
* Protected AI App onboarding flow. Creates a Fusebase account through auth-form, then adds the newly created user to the path org with the requested role. Requires org.members.write and org access. This endpoint is for registration only; do not call it on login because that can overwrite or duplicate existing membership intent. For trusted AI App signup flows, send `autoConfirmEmail=true` to create the account with the email already confirmed and skip the auth-form confirmation message.
|
|
47
|
+
* Protected AI App onboarding flow. Creates a Fusebase account through auth-form, then adds the newly created user to the path org with the requested role. An authenticated result carries `appAuth`: spend `appAuth.authPath` on the app's own origin, with a same-origin `fetch` sending `Accept: application/json` or a plain navigation, and the platform mints the app runtime token from it. Requires org.members.write and org access. This endpoint is for registration only; do not call it on login because that can overwrite or duplicate existing membership intent. For trusted AI App signup flows, send `autoConfirmEmail=true` to create the account with the email already confirmed and skip the auth-form confirmation message.
|
|
48
48
|
*/
|
|
49
49
|
registerFusebaseOrgMember(params: {
|
|
50
50
|
path: {
|
|
@@ -55,7 +55,7 @@ export declare class FusebaseAuthApi {
|
|
|
55
55
|
}): Promise<FusebaseAuthRegisterMemberResponseContract>;
|
|
56
56
|
/**
|
|
57
57
|
* Register a Fusebase user
|
|
58
|
-
* Visitor-safe email/password Fusebase registration proxy for AI App auth. Forwards to auth-form `/auth/api/register` server-side
|
|
58
|
+
* Visitor-safe email/password Fusebase registration proxy for AI App auth. Forwards to auth-form `/auth/api/register` server-side. An authenticated result carries `appAuth`: spend `appAuth.authPath` on the app's own origin, with a same-origin `fetch` sending `Accept: application/json` or a plain navigation, and the platform mints the app runtime token from it. Does not add org membership. For trusted AI App signup flows, send `autoConfirmEmail=true` to create the account with the email already confirmed and skip the auth-form confirmation message.
|
|
59
59
|
*/
|
|
60
60
|
registerFusebaseUser(params: {
|
|
61
61
|
headers?: Record<string, string>;
|
|
@@ -27,7 +27,7 @@ class FusebaseAuthApi {
|
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Complete Fusebase auth challenge
|
|
30
|
-
* Visitor-safe challenge completion endpoint for CAPTCHA, OTP, mail OTP, and MFA flows returned by register/login.
|
|
30
|
+
* Visitor-safe challenge completion endpoint for CAPTCHA, OTP, mail OTP, and MFA flows returned by register/login. An authenticated result carries `appAuth`: spend `appAuth.authPath` on the app's own origin, with a same-origin `fetch` sending `Accept: application/json` or a plain navigation, and the platform mints the app runtime token from it.
|
|
31
31
|
*/
|
|
32
32
|
async completeFusebaseAuthChallenge(params) {
|
|
33
33
|
return this.client.request({
|
|
@@ -41,7 +41,7 @@ class FusebaseAuthApi {
|
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Login a Fusebase user
|
|
44
|
-
* Visitor-safe email/password login proxy for AI App auth. Forwards to auth-form `/auth/api/auth` server-side
|
|
44
|
+
* Visitor-safe email/password login proxy for AI App auth. Forwards to auth-form `/auth/api/auth` server-side. An authenticated result carries `appAuth`: spend `appAuth.authPath` on the app's own origin, with a same-origin `fetch` sending `Accept: application/json` or a plain navigation, and the platform mints the app runtime token from it. Never provisions org membership.
|
|
45
45
|
*/
|
|
46
46
|
async loginFusebaseUser(params) {
|
|
47
47
|
return this.client.request({
|
|
@@ -68,7 +68,7 @@ class FusebaseAuthApi {
|
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
70
70
|
* Register a Fusebase user and add org membership
|
|
71
|
-
* Protected AI App onboarding flow. Creates a Fusebase account through auth-form, then adds the newly created user to the path org with the requested role. Requires org.members.write and org access. This endpoint is for registration only; do not call it on login because that can overwrite or duplicate existing membership intent. For trusted AI App signup flows, send `autoConfirmEmail=true` to create the account with the email already confirmed and skip the auth-form confirmation message.
|
|
71
|
+
* Protected AI App onboarding flow. Creates a Fusebase account through auth-form, then adds the newly created user to the path org with the requested role. An authenticated result carries `appAuth`: spend `appAuth.authPath` on the app's own origin, with a same-origin `fetch` sending `Accept: application/json` or a plain navigation, and the platform mints the app runtime token from it. Requires org.members.write and org access. This endpoint is for registration only; do not call it on login because that can overwrite or duplicate existing membership intent. For trusted AI App signup flows, send `autoConfirmEmail=true` to create the account with the email already confirmed and skip the auth-form confirmation message.
|
|
72
72
|
*/
|
|
73
73
|
async registerFusebaseOrgMember(params) {
|
|
74
74
|
return this.client.request({
|
|
@@ -83,7 +83,7 @@ class FusebaseAuthApi {
|
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
85
|
* Register a Fusebase user
|
|
86
|
-
* Visitor-safe email/password Fusebase registration proxy for AI App auth. Forwards to auth-form `/auth/api/register` server-side
|
|
86
|
+
* Visitor-safe email/password Fusebase registration proxy for AI App auth. Forwards to auth-form `/auth/api/register` server-side. An authenticated result carries `appAuth`: spend `appAuth.authPath` on the app's own origin, with a same-origin `fetch` sending `Accept: application/json` or a plain navigation, and the platform mints the app runtime token from it. Does not add org membership. For trusted AI App signup flows, send `autoConfirmEmail=true` to create the account with the email already confirmed and skip the auth-form confirmation message.
|
|
87
87
|
*/
|
|
88
88
|
async registerFusebaseUser(params) {
|
|
89
89
|
return this.client.request({
|
|
@@ -76,6 +76,12 @@ export interface CallAppApiRequestContract {
|
|
|
76
76
|
path?: Record<string, string>;
|
|
77
77
|
query?: Record<string, string | number | boolean>;
|
|
78
78
|
body?: unknown;
|
|
79
|
+
/**
|
|
80
|
+
* Extra request headers forwarded verbatim to the app runtime, for operations
|
|
81
|
+
* that require one (e.g. `Idempotency-Key`). Headers Gate sets itself to prove
|
|
82
|
+
* the caller's identity to the runtime are reserved and rejected with 400.
|
|
83
|
+
*/
|
|
84
|
+
headers?: Record<string, string>;
|
|
79
85
|
/**
|
|
80
86
|
* On-behalf-of: a platform app token (`fbsfeaturetoken` / `x-app-feature-token`)
|
|
81
87
|
* identifying the end user this call runs for. Gate verifies it fail-closed and
|
|
@@ -137,7 +137,10 @@ export interface ActivateAppMagicLinkResponseContract {
|
|
|
137
137
|
*/
|
|
138
138
|
id: string;
|
|
139
139
|
/**
|
|
140
|
-
*
|
|
140
|
+
* Raw FuseBase session id. Do not set it as a cookie on the app host: the
|
|
141
|
+
* app runtime token (`fbsfeaturetoken`) is the only credential an app host
|
|
142
|
+
* carries. Forward it to Gate as `EverHelper-Session-ID` when a legacy call
|
|
143
|
+
* needs it.
|
|
141
144
|
*/
|
|
142
145
|
sessionToken: string;
|
|
143
146
|
/**
|
|
@@ -1,7 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deprecated. A raw FuseBase session id, which an app has no business holding:
|
|
3
|
+
* it is the FuseBase login itself, not an app-scoped credential. Gate omits it
|
|
4
|
+
* when it runs with the `app_login_no_session_id` feature flag (NIM-43689).
|
|
5
|
+
* Use `appAuth` instead.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated Use `appAuth`.
|
|
8
|
+
*/
|
|
1
9
|
export interface FusebaseAuthSessionContract {
|
|
2
10
|
sessionId: string;
|
|
3
11
|
userId: number;
|
|
4
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Login handoff for an authenticated result (NIM-43689). Spend `authPath` on
|
|
15
|
+
* the app's own origin — a same-origin `fetch` with `Accept: application/json`
|
|
16
|
+
* from the running page, or a plain navigation — and the platform resolves
|
|
17
|
+
* `exchangeToken` there into the app runtime token (`fbsfeaturetoken`).
|
|
18
|
+
*
|
|
19
|
+
* The token is not bound to the app it was minted for: the platform takes the
|
|
20
|
+
* app identity from the request host, so whoever holds it can mint a runtime
|
|
21
|
+
* token for that user on any app host that user can open.
|
|
22
|
+
*/
|
|
23
|
+
export interface FusebaseAuthAppAuthContract {
|
|
24
|
+
/**
|
|
25
|
+
* Session-exchange token. Spend it on `authPath`. It stays valid for the
|
|
26
|
+
* whole `expiresInSeconds` window and is not invalidated by being spent, so
|
|
27
|
+
* treat it as a credential: keep it out of logs and out of shared links.
|
|
28
|
+
*/
|
|
29
|
+
exchangeToken: string;
|
|
30
|
+
/** Lifetime of `exchangeToken` in seconds, counted from this response. */
|
|
31
|
+
expiresInSeconds: number;
|
|
32
|
+
/**
|
|
33
|
+
* Relative URL on the app's own host, built from the `redirectPath` the app
|
|
34
|
+
* sent. Pass it through; do not assemble it yourself.
|
|
35
|
+
*/
|
|
36
|
+
authPath: string;
|
|
37
|
+
}
|
|
5
38
|
export interface FusebaseAuthChallengeContract {
|
|
6
39
|
type: string;
|
|
7
40
|
state: string;
|
|
@@ -31,7 +64,17 @@ export interface FusebaseAuthRegisterRequestContract {
|
|
|
31
64
|
}
|
|
32
65
|
export interface FusebaseAuthRegisterResponseContract {
|
|
33
66
|
status: "authenticated" | "challenge_required";
|
|
67
|
+
/**
|
|
68
|
+
* Deprecated. A raw FuseBase session id, which an app has no business
|
|
69
|
+
* holding: it is the FuseBase login itself, not an app-scoped credential.
|
|
70
|
+
* Gate stops returning it when it runs with the `app_login_no_session_id`
|
|
71
|
+
* feature flag (NIM-43689). Use `appAuth` instead.
|
|
72
|
+
*
|
|
73
|
+
* @deprecated Use `appAuth`.
|
|
74
|
+
*/
|
|
34
75
|
session?: FusebaseAuthSessionContract;
|
|
76
|
+
/** Present on an authenticated result, unless the mint failed. */
|
|
77
|
+
appAuth?: FusebaseAuthAppAuthContract;
|
|
35
78
|
challenge?: FusebaseAuthChallengeContract;
|
|
36
79
|
redirectPath: string;
|
|
37
80
|
}
|
|
@@ -83,6 +126,28 @@ export interface FusebaseAuthUnauthorizedErrorBodyContract {
|
|
|
83
126
|
errorCode: string;
|
|
84
127
|
};
|
|
85
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Body returned with HTTP 422 when gate runs with the `app_login_no_session_id`
|
|
131
|
+
* feature flag and the `appAuth` mint failed. `data.errorCode` is
|
|
132
|
+
* `app_auth_exchange_unavailable`.
|
|
133
|
+
*
|
|
134
|
+
* The credentials were accepted — only the handoff could not be issued. The
|
|
135
|
+
* status is 4xx and not 5xx on purpose: the generated SDK retries every 5xx
|
|
136
|
+
* three times with no method exclusion, and the register ops are not
|
|
137
|
+
* idempotent, so a retried mint failure would surface as 409
|
|
138
|
+
* `fusebase_account_already_exists` and this error would never reach the app.
|
|
139
|
+
* Start a fresh sign-in instead of replaying the call. Never returned without
|
|
140
|
+
* the flag: there `session` is still a working fallback and the response stays
|
|
141
|
+
* a 200.
|
|
142
|
+
*/
|
|
143
|
+
export interface FusebaseAuthAppAuthUnavailableErrorBodyContract {
|
|
144
|
+
success: false;
|
|
145
|
+
message: string;
|
|
146
|
+
data: {
|
|
147
|
+
code: string;
|
|
148
|
+
errorCode: string;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
86
151
|
export interface FusebaseAuthLoginRequestContract {
|
|
87
152
|
/**
|
|
88
153
|
* User email. Forwarded to auth-form as `login`.
|
|
@@ -95,7 +160,17 @@ export interface FusebaseAuthLoginRequestContract {
|
|
|
95
160
|
}
|
|
96
161
|
export interface FusebaseAuthLoginResponseContract {
|
|
97
162
|
status: "authenticated" | "challenge_required";
|
|
163
|
+
/**
|
|
164
|
+
* Deprecated. A raw FuseBase session id, which an app has no business
|
|
165
|
+
* holding: it is the FuseBase login itself, not an app-scoped credential.
|
|
166
|
+
* Gate stops returning it when it runs with the `app_login_no_session_id`
|
|
167
|
+
* feature flag (NIM-43689). Use `appAuth` instead.
|
|
168
|
+
*
|
|
169
|
+
* @deprecated Use `appAuth`.
|
|
170
|
+
*/
|
|
98
171
|
session?: FusebaseAuthSessionContract;
|
|
172
|
+
/** Present on an authenticated result, unless the mint failed. */
|
|
173
|
+
appAuth?: FusebaseAuthAppAuthContract;
|
|
99
174
|
challenge?: FusebaseAuthChallengeContract;
|
|
100
175
|
redirectPath: string;
|
|
101
176
|
}
|
|
@@ -106,7 +181,17 @@ export interface FusebaseAuthChallengeRequestContract {
|
|
|
106
181
|
}
|
|
107
182
|
export interface FusebaseAuthChallengeResponseContract {
|
|
108
183
|
status: "authenticated" | "challenge_required";
|
|
184
|
+
/**
|
|
185
|
+
* Deprecated. A raw FuseBase session id, which an app has no business
|
|
186
|
+
* holding: it is the FuseBase login itself, not an app-scoped credential.
|
|
187
|
+
* Gate stops returning it when it runs with the `app_login_no_session_id`
|
|
188
|
+
* feature flag (NIM-43689). Use `appAuth` instead.
|
|
189
|
+
*
|
|
190
|
+
* @deprecated Use `appAuth`.
|
|
191
|
+
*/
|
|
109
192
|
session?: FusebaseAuthSessionContract;
|
|
193
|
+
/** Present on an authenticated result, unless the mint failed. */
|
|
194
|
+
appAuth?: FusebaseAuthAppAuthContract;
|
|
110
195
|
challenge?: FusebaseAuthChallengeContract;
|
|
111
196
|
redirectPath: string;
|
|
112
197
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export type { ActivateAppMagicLinkResponseContract, AppMagicLinkSummaryContract,
|
|
|
12
12
|
export * from "./billing/billing";
|
|
13
13
|
export type { OrgEmailSendRequestContract, OrgEmailSendResponseContract } from "./email/email";
|
|
14
14
|
export * from "./file/file";
|
|
15
|
-
export type { FusebaseAuthChallengeContract, FusebaseAuthChallengeRequestContract, FusebaseAuthChallengeResponseContract, FusebaseAuthConflictErrorBodyContract, FusebaseAuthLoginRequestContract, FusebaseAuthLoginResponseContract, FusebaseAuthLogoutResponseContract, FusebaseAuthPasswordResetRequestContract, FusebaseAuthPasswordResetResponseContract, FusebaseAuthPasswordRestoreKeyResponseContract, FusebaseAuthPasswordRestoreRequestContract, FusebaseAuthPasswordRestoreResponseContract, FusebaseAuthRegisterMemberRequestContract, FusebaseAuthRegisterMemberResponseContract, FusebaseAuthRegisterRequestContract, FusebaseAuthRegisterResponseContract, FusebaseAuthRestoreKeyRequestContract, FusebaseAuthRestoreKeyResponseContract, FusebaseAuthSessionContract, FusebaseAuthSetInitialPasswordRequestContract, FusebaseAuthSetInitialPasswordResponseContract, FusebaseAuthUnauthorizedErrorBodyContract } from "./fusebase-auth/fusebase-auth";
|
|
15
|
+
export type { FusebaseAuthAppAuthContract, FusebaseAuthAppAuthUnavailableErrorBodyContract, FusebaseAuthChallengeContract, FusebaseAuthChallengeRequestContract, FusebaseAuthChallengeResponseContract, FusebaseAuthConflictErrorBodyContract, FusebaseAuthLoginRequestContract, FusebaseAuthLoginResponseContract, FusebaseAuthLogoutResponseContract, FusebaseAuthPasswordResetRequestContract, FusebaseAuthPasswordResetResponseContract, FusebaseAuthPasswordRestoreKeyResponseContract, FusebaseAuthPasswordRestoreRequestContract, FusebaseAuthPasswordRestoreResponseContract, FusebaseAuthRegisterMemberRequestContract, FusebaseAuthRegisterMemberResponseContract, FusebaseAuthRegisterRequestContract, FusebaseAuthRegisterResponseContract, FusebaseAuthRestoreKeyRequestContract, FusebaseAuthRestoreKeyResponseContract, FusebaseAuthSessionContract, FusebaseAuthSetInitialPasswordRequestContract, FusebaseAuthSetInitialPasswordResponseContract, FusebaseAuthUnauthorizedErrorBodyContract } from "./fusebase-auth/fusebase-auth";
|
|
16
16
|
export * from "./isolated-store/isolated-store";
|
|
17
17
|
export * from "./mcp-manager/mcp-manager";
|
|
18
18
|
export type { MeAuthContract, MeOrgGroupContract, MePreferencesContract, MeResponseContract, MeScopeContract, MeUserContract } from "./me/me";
|
package/package.json
CHANGED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Release Notes 2.11.6-sdk.0
|
|
2
|
+
|
|
3
|
+
- Current ref: `HEAD`
|
|
4
|
+
- Previous tag: `v2.11.6-sdk.0`
|
|
5
|
+
- Generated at: 2026-09-08T12:29:57.106Z
|
|
6
|
+
|
|
7
|
+
## Included Drafts
|
|
8
|
+
|
|
9
|
+
- `docs/release-notes/2026-09-07-app-auth-handoff.md` - Login handoff for the fusebase-auth ops
|
|
10
|
+
|
|
11
|
+
## Summary
|
|
12
|
+
|
|
13
|
+
### Login handoff for the fusebase-auth ops
|
|
14
|
+
|
|
15
|
+
The four fusebase-auth operations that can end in an authenticated result now
|
|
16
|
+
return an `appAuth` handoff beside `session`, so an app can obtain its own
|
|
17
|
+
runtime token without holding a raw FuseBase session id.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## API / SDK Changes
|
|
21
|
+
|
|
22
|
+
### Login handoff for the fusebase-auth ops
|
|
23
|
+
|
|
24
|
+
- Added `appAuth` (`exchangeToken`, `expiresInSeconds`, `authPath`) to the
|
|
25
|
+
authenticated responses of `registerFusebaseUser`,
|
|
26
|
+
`registerFusebaseOrgMember`, `loginFusebaseUser` and
|
|
27
|
+
`completeFusebaseAuthChallenge`.
|
|
28
|
+
- `authPath` is a relative URL on the app's own host, built from the
|
|
29
|
+
`redirectPath` the app sent. Apps pass it through rather than assembling it.
|
|
30
|
+
- Operation descriptions now point at the handoff instead of at
|
|
31
|
+
`session.sessionId`.
|
|
32
|
+
- `session` is deprecated. Gate omits it from all four responses when it runs
|
|
33
|
+
with the `app_login_no_session_id` feature flag, which is off everywhere
|
|
34
|
+
until deployed apps have moved to `appAuth`.
|
|
35
|
+
- With that flag on, a failed handoff mint answers 422 with `data.errorCode` =
|
|
36
|
+
`app_auth_exchange_unavailable` instead of degrading to the legacy response.
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
## Consumer Impact
|
|
40
|
+
|
|
41
|
+
### Login handoff for the fusebase-auth ops
|
|
42
|
+
|
|
43
|
+
Purely additive: `session` is returned exactly as before, so no deployed app
|
|
44
|
+
changes behaviour. Spend `appAuth.authPath` on the app's own origin, either
|
|
45
|
+
with a same-origin `fetch` sending `Accept: application/json` or with a plain
|
|
46
|
+
navigation. `exchangeToken` stays valid for its whole `expiresInSeconds`
|
|
47
|
+
window, is not invalidated by being spent, and is not bound to the app it was
|
|
48
|
+
minted for, so treat it as a credential.
|
|
49
|
+
A challenge result is unchanged. If the mint fails the response is the legacy
|
|
50
|
+
one, without `appAuth` — until the `app_login_no_session_id` flag is turned on,
|
|
51
|
+
where the same failure is a 422 that should be answered with a fresh sign-in
|
|
52
|
+
rather than a replay of the call.
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## Verification
|
|
56
|
+
|
|
57
|
+
### Login handoff for the fusebase-auth ops
|
|
58
|
+
|
|
59
|
+
- Unit tests over all four operations, the handoff URL encoding, the mint
|
|
60
|
+
failure paths and the relative-path guard.
|
|
61
|
+
- Generated contract/OpenAPI validation and service build.
|
package/release-notes/latest.md
CHANGED
package/release-notes/2.11.3.md
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
# Release Notes 2.11.3
|
|
2
|
-
|
|
3
|
-
- Current ref: `HEAD`
|
|
4
|
-
- Previous tag: `v2.11.3`
|
|
5
|
-
- Generated at: 2026-09-03T11:31:56.879Z
|
|
6
|
-
|
|
7
|
-
## Included Drafts
|
|
8
|
-
|
|
9
|
-
- `docs/release-notes/2026-09-02-portal-style-colors-font.md` - Portal branding: color roles and web font (NIM-42204)
|
|
10
|
-
- `docs/release-notes/2026-09-03-firecrawl-proxy-forwarding.md` - Firecrawl proxy settings forwarding
|
|
11
|
-
|
|
12
|
-
## Summary
|
|
13
|
-
|
|
14
|
-
### Portal branding: color roles and web font (NIM-42204)
|
|
15
|
-
|
|
16
|
-
`updatePortalStyle` now also takes `colors` and `font`, the two field groups the
|
|
17
|
-
first round left out. Colors are expressed the way the portal actually renders
|
|
18
|
-
them — as **Tailwind palette tokens** written into the theme's own color slots,
|
|
19
|
-
not as hex. The font is delivered through the portal's custom code, since the
|
|
20
|
-
theme model has no font field.
|
|
21
|
-
|
|
22
|
-
### Firecrawl proxy settings forwarding
|
|
23
|
-
|
|
24
|
-
Fusebase Gate now exposes the organization-scoped Paperclip Services routes
|
|
25
|
-
needed to read and update Firecrawl proxy settings.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
## API / SDK Changes
|
|
29
|
-
|
|
30
|
-
### Portal branding: color roles and web font (NIM-42204)
|
|
31
|
-
|
|
32
|
-
- `updatePortalStyle` body gained:
|
|
33
|
-
- `colors` — five semantic roles, each one palette token (`transparent`,
|
|
34
|
-
`white`, `black` or `<hue>-<shade>`, e.g. `indigo-600`):
|
|
35
|
-
|
|
36
|
-
| Role | Theme slots written |
|
|
37
|
-
| --- | --- |
|
|
38
|
-
| `primary` | `bg_primary`, `bg_primary_hover`, `primary` |
|
|
39
|
-
| `background` | `bg_body` |
|
|
40
|
-
| `surface` | `bg_surface` |
|
|
41
|
-
| `text` | `text_surface` |
|
|
42
|
-
| `accent` | `bg_secondary`, `bg_secondary_hover` |
|
|
43
|
-
|
|
44
|
-
- `font` — `{ family, source: "google" }`. The family is spelled as Google
|
|
45
|
-
Fonts spells it; letters, digits and spaces only.
|
|
46
|
-
- `getPortal` → `style` gained `colors` (the roles the portal overrides) and
|
|
47
|
-
`fontFamily`.
|
|
48
|
-
- A body touching both the theme fields and `font` stages **two** events (one
|
|
49
|
-
`updateThemeSettings`, one `updateCustomCodeSettings`); `seq` is the first.
|
|
50
|
-
- The error for an empty body is now
|
|
51
|
-
`At least one of theme, colors, font, logo, or favicon is required`.
|
|
52
|
-
|
|
53
|
-
### Firecrawl proxy settings forwarding
|
|
54
|
-
|
|
55
|
-
- Added `GET /:orgId/paperclip-services/installations/:appKey/proxy`.
|
|
56
|
-
- Added `PUT /:orgId/paperclip-services/installations/:appKey/proxy`.
|
|
57
|
-
- Added typed redacted settings and write-only configuration contracts for
|
|
58
|
-
direct, custom gateway, uploaded list, and HTTPS list/API modes.
|
|
59
|
-
- Added `firecrawlProxyManagement` to the Paperclip Services capabilities
|
|
60
|
-
contract.
|
|
61
|
-
- The `paperclip-services` tag remains excluded from the public SDK surface.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
## Consumer Impact
|
|
65
|
-
|
|
66
|
-
### Portal branding: color roles and web font (NIM-42204)
|
|
67
|
-
|
|
68
|
-
An agent can now recolor a portal past the 13 named themes without writing
|
|
69
|
-
custom CSS, and the recolor works on any domain.
|
|
70
|
-
|
|
71
|
-
**Hex is still rejected, on purpose.** The renderer interpolates the stored
|
|
72
|
-
token straight into a class name (`bg-neutral-900`), and
|
|
73
|
-
`apps/portals/tailwind.config.js` safelists palette names only, so `#2563eb`
|
|
74
|
-
would be stored, published, and style nothing. `stone` and `violet` are rejected
|
|
75
|
-
for the same reason: they are missing from that safelist. Convert a hex to the
|
|
76
|
-
nearest token before calling.
|
|
77
|
-
|
|
78
|
-
**Where the font lives.** The theme DTO has no font field, so `font` stages one
|
|
79
|
-
marked `<style>` block inside the portal's `customStyle`:
|
|
80
|
-
|
|
81
|
-
```html
|
|
82
|
-
<!--fusebase-font--><style>@import url("https://fonts.googleapis.com/css2?family=Fraunces&display=swap");#main-scrolling-container{font-family:'Fraunces',sans-serif}</style><!--/fusebase-font-->
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
The markers make it replaceable: a second `font` call swaps the block rather
|
|
86
|
-
than appending one, and `updatePortalCustomCode` carries it through when the
|
|
87
|
-
agent rewrites the surrounding CSS. Because it is custom code, it renders
|
|
88
|
-
wherever custom code renders — the customizer only offers the custom-code editor
|
|
89
|
-
on portals served from a custom CNAME domain.
|
|
90
|
-
|
|
91
|
-
**Hover slots take the same token as their base.** No shade is derived, so a
|
|
92
|
-
recolored hover never lands on an unrelated preset color. An agent that wants a
|
|
93
|
-
distinct hover uses `updatePortalCustomCode`.
|
|
94
|
-
|
|
95
|
-
### Firecrawl proxy settings forwarding
|
|
96
|
-
|
|
97
|
-
Deployed Paperclip instances can open and save Firecrawl proxy settings through
|
|
98
|
-
Fusebase Gate. Reads require `paperclip_services.read`; updates require
|
|
99
|
-
`paperclip_services.write`. Credentials and proxy-list contents are forwarded
|
|
100
|
-
only in the request body and are not included in responses.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
## Verification
|
|
104
|
-
|
|
105
|
-
### Firecrawl proxy settings forwarding
|
|
106
|
-
|
|
107
|
-
- Paperclip Services route authorization tests.
|
|
108
|
-
- Nimbus AI client forwarding tests for GET and PUT.
|
|
109
|
-
- Generated contract/OpenAPI validation and service build.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
## Follow-ups
|
|
113
|
-
|
|
114
|
-
### Firecrawl proxy settings forwarding
|
|
115
|
-
|
|
116
|
-
- Verify the dev Gate rollout before running Firecrawl proxy acceptance tests.
|